From c44b6cd60c35c49e30661a7da5310b8fb28528a6 Mon Sep 17 00:00:00 2001 From: wangxhhh <9450ave@163.com> Date: Tue, 1 Apr 2025 16:59:39 +0800 Subject: [PATCH] add visible --- lib/moments.dart | 86 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 22 deletions(-) diff --git a/lib/moments.dart b/lib/moments.dart index e758cb2..ebd32b1 100644 --- a/lib/moments.dart +++ b/lib/moments.dart @@ -2,9 +2,32 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:vector_graphics/vector_graphics_compat.dart'; -void main() => runApp(MomentsPage()); +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Demo', + debugShowCheckedModeBanner: false, + home: MomentsPage(), + ); + } +} + +class MomentsPage extends StatefulWidget { + @override + _MomentsPageState createState() => _MomentsPageState(); +} + +class _MomentsPageState extends State { + late bool _isVisible; + @override + void initState() { + super.initState(); + _isVisible = true; + } -class MomentsPage extends StatelessWidget { final List imageUrls = [ 'assets/wikimedia/chess_knight.svg', 'assets/wikimedia/Ghostscript_Tiger.svg', @@ -14,25 +37,33 @@ class MomentsPage extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( - home: Scaffold( - appBar: AppBar(title: Text('微信朋友圈图片效果')), - body: GridView.builder( - itemCount: imageUrls.length, - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3), - itemBuilder: (context, index) { - return GestureDetector( - onTap: () => _openFullScreen(context, index), - child: Hero( - tag: 'image_$index', - child: SvgPicture.asset( - imageUrls[index], - fit: BoxFit.scaleDown, - strategy: RenderingStrategy.raster, + home: Visibility( + visible: _isVisible, + child: Scaffold( + appBar: AppBar(title: Text('微信朋友圈图片效果')), + body: GridView.builder( + itemCount: imageUrls.length, + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3), + itemBuilder: (context, index) { + return GestureDetector( + onTap: () { + setState(() { + _isVisible = false; + }); + _openFullScreen(context, index); + }, + child: Hero( + tag: 'image_$index', + child: SvgPicture.asset( + imageUrls[index], + fit: BoxFit.scaleDown, + strategy: RenderingStrategy.raster, + ), ), - ), - ); - }, + ); + }, + ), ), ), ); @@ -46,6 +77,9 @@ class MomentsPage extends StatelessWidget { pageBuilder: (_, __, ___) => FullScreenImagePage( initialIndex: index, imageUrls: imageUrls, + onBack: () => setState(() { + _isVisible = true; + }), ), transitionsBuilder: (context, animation, _, child) { return FadeTransition(opacity: animation, child: child); @@ -58,8 +92,12 @@ class MomentsPage extends StatelessWidget { class FullScreenImagePage extends StatefulWidget { final int initialIndex; final List imageUrls; + final VoidCallback onBack; - FullScreenImagePage({required this.initialIndex, required this.imageUrls}); + FullScreenImagePage( + {required this.initialIndex, + required this.imageUrls, + required this.onBack}); @override _FullScreenImagePageState createState() => _FullScreenImagePageState(); @@ -85,6 +123,7 @@ class _FullScreenImagePageState extends State { GestureDetector( onVerticalDragUpdate: (details) { if (details.primaryDelta! > 20) { + widget.onBack(); Navigator.pop(context); } }, @@ -124,7 +163,10 @@ class _FullScreenImagePageState extends State { right: 20, child: IconButton( icon: Icon(Icons.close, color: Colors.white), - onPressed: () => Navigator.pop(context), + onPressed: () { + widget.onBack(); + Navigator.pop(context); + }, ), ), ], -- Gitee