diff --git a/lib/common/widgets/article_content.dart b/lib/common/widgets/article_content.dart index fc9492c8..b3671e15 100644 --- a/lib/common/widgets/article_content.dart +++ b/lib/common/widgets/article_content.dart @@ -1,6 +1,5 @@ import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/models/dynamics/article_content_model.dart'; -import 'package:PiliPalaX/pages/preview/view.dart'; import 'package:PiliPalaX/utils/extension.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; @@ -58,16 +57,20 @@ Widget articleContent({ return LayoutBuilder( builder: (_, constraints) => GestureDetector( onTap: () { - showDialog( - useSafeArea: false, - context: context, - builder: (context) { - return ImagePreview( - initialPage: imgList.indexOf(item.pic!.pics!.first.url!), - imgList: imgList, - ); - }, + context.imageView( + initialPage: imgList.indexOf(item.pic!.pics!.first.url!), + imgList: imgList, ); + // showDialog( + // useSafeArea: false, + // context: context, + // builder: (context) { + // return ImagePreview( + // initialPage: imgList.indexOf(item.pic!.pics!.first.url!), + // imgList: imgList, + // ); + // }, + // ); }, child: NetworkImgLayer( width: constraints.maxWidth, diff --git a/lib/common/widgets/html_render.dart b/lib/common/widgets/html_render.dart index 9c391a64..31d9e250 100644 --- a/lib/common/widgets/html_render.dart +++ b/lib/common/widgets/html_render.dart @@ -1,4 +1,4 @@ -import 'package:PiliPalaX/pages/preview/view.dart'; +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'network_img_layer.dart'; @@ -47,16 +47,19 @@ Widget htmlRender({ // ); return GestureDetector( onTap: () { - showDialog( - useSafeArea: false, - context: context, - builder: (context) { - return ImagePreview( - initialPage: 0, - imgList: [imgUrl], - ); - }, + context.imageView( + imgList: [imgUrl], ); + // showDialog( + // useSafeArea: false, + // context: context, + // builder: (context) { + // return ImagePreview( + // initialPage: 0, + // imgList: [imgUrl], + // ); + // }, + // ); }, child: NetworkImgLayer( width: isEmote ? 22 : constrainedWidth, diff --git a/lib/common/widgets/imageview.dart b/lib/common/widgets/imageview.dart index baa923d3..54a2641a 100644 --- a/lib/common/widgets/imageview.dart +++ b/lib/common/widgets/imageview.dart @@ -3,7 +3,7 @@ import 'dart:math'; import 'package:PiliPalaX/common/widgets/badge.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/common/widgets/nine_grid_view.dart'; -import 'package:PiliPalaX/pages/preview/view.dart'; +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/material.dart'; class ImageModel { @@ -55,16 +55,20 @@ Widget image( itemCount: picArr.length, itemBuilder: (context, index) => GestureDetector( onTap: () { - showDialog( - useSafeArea: false, - context: context, - builder: (context) { - return ImagePreview( - initialPage: index, - imgList: picArr.map((item) => item.url).toList(), - ); - }, + context.imageView( + initialPage: index, + imgList: picArr.map((item) => item.url).toList(), ); + // showDialog( + // useSafeArea: false, + // context: context, + // builder: (context) { + // return ImagePreview( + // initialPage: index, + // imgList: picArr.map((item) => item.url).toList(), + // ); + // }, + // ); }, child: Stack( children: [ diff --git a/lib/pages/member/new/widget/user_info_card.dart b/lib/pages/member/new/widget/user_info_card.dart index e43452e9..c32bd7bc 100644 --- a/lib/pages/member/new/widget/user_info_card.dart +++ b/lib/pages/member/new/widget/user_info_card.dart @@ -1,9 +1,6 @@ -import 'dart:ui'; - import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/models/space/card.dart' as space; import 'package:PiliPalaX/models/space/images.dart' as space; -import 'package:PiliPalaX/pages/preview/view.dart'; import 'package:PiliPalaX/utils/extension.dart'; import 'package:PiliPalaX/utils/storage.dart'; import 'package:PiliPalaX/utils/utils.dart'; @@ -74,16 +71,19 @@ class UserInfoCard extends StatelessWidget { : images.imgUrl?.http2https; return GestureDetector( onTap: () { - showDialog( - useSafeArea: false, - context: context, - builder: (context) { - return ImagePreview( - initialPage: 0, - imgList: [imgUrl ?? ''], - ); - }, + context.imageView( + imgList: [imgUrl ?? ''], ); + // showDialog( + // useSafeArea: false, + // context: context, + // builder: (context) { + // return ImagePreview( + // initialPage: 0, + // imgList: [imgUrl ?? ''], + // ); + // }, + // ); }, child: CachedNetworkImage( imageUrl: imgUrl ?? '', @@ -418,16 +418,19 @@ class UserInfoCard extends StatelessWidget { _buildAvatar(BuildContext context) => GestureDetector( onTap: () { - showDialog( - useSafeArea: false, - context: context, - builder: (context) { - return ImagePreview( - initialPage: 0, - imgList: [card.face ?? ''], - ); - }, + context.imageView( + imgList: [card.face ?? ''], ); + // showDialog( + // useSafeArea: false, + // context: context, + // builder: (context) { + // return ImagePreview( + // initialPage: 0, + // imgList: [card.face ?? ''], + // ); + // }, + // ); }, child: Container( decoration: BoxDecoration( diff --git a/lib/pages/member/widgets/profile.dart b/lib/pages/member/widgets/profile.dart index 87c712a4..493e242d 100644 --- a/lib/pages/member/widgets/profile.dart +++ b/lib/pages/member/widgets/profile.dart @@ -1,4 +1,4 @@ -import 'package:PiliPalaX/pages/preview/view.dart'; +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; @@ -27,15 +27,20 @@ class ProfilePanel extends StatelessWidget { child: Stack( children: [ GestureDetector( - onTap: () => showDialog( - useSafeArea: false, - context: context, - builder: (context) { - return ImagePreview(initialPage: 0, imgList: [ - !loadingStatus ? memberInfo.face : ctr.face.value - ]); - }, + onTap: () => context.imageView( + imgList: [ + !loadingStatus ? memberInfo.face : ctr.face.value + ], ), + // showDialog( + // useSafeArea: false, + // context: context, + // builder: (context) { + // return ImagePreview(initialPage: 0, imgList: [ + // !loadingStatus ? memberInfo.face : ctr.face.value + // ]); + // }, + // ), child: NetworkImgLayer( width: 90, height: 90, diff --git a/lib/pages/preview/view.dart b/lib/pages/preview/view.dart index f88362b0..f89692b2 100644 --- a/lib/pages/preview/view.dart +++ b/lib/pages/preview/view.dart @@ -16,12 +16,12 @@ import 'package:status_bar_control/status_bar_control.dart'; typedef DoubleClickAnimationListener = void Function(); class ImagePreview extends StatefulWidget { - final int initialPage; - final List imgList; + final int? initialPage; + final List? imgList; const ImagePreview({ super.key, - required this.initialPage, - required this.imgList, + this.initialPage, + this.imgList, }); @override @@ -44,16 +44,22 @@ class _ImagePreviewState extends State void initState() { super.initState(); - _imgList = widget.imgList.map((url) => url.http2https).toList(); + _imgList = widget.imgList?.map((url) => url.http2https).toList() ?? + (Get.arguments['imgList'] as List) + .map((url) => url.http2https) + .toList(); _thumbList = List.generate(_imgList.length, (_) => true); _quality = GStorage.setting.get(SettingBoxKey.previewQuality, defaultValue: 80); - _previewController.initialPage.value = widget.initialPage; - _previewController.currentPage.value = widget.initialPage + 1; + _previewController.initialPage.value = + widget.initialPage ?? Get.arguments['initialPage']; + _previewController.currentPage.value = + (widget.initialPage ?? Get.arguments['initialPage']) + 1; _previewController.imgList.value = _imgList; - _previewController.currentImgUrl = _imgList[widget.initialPage]; + _previewController.currentImgUrl = + _imgList[widget.initialPage ?? Get.arguments['initialPage']]; // animationController = AnimationController( // vsync: this, duration: const Duration(milliseconds: 400)); setStatusBar(); diff --git a/lib/utils/extension.dart b/lib/utils/extension.dart index f3691849..4ad2cd42 100644 --- a/lib/utils/extension.dart +++ b/lib/utils/extension.dart @@ -1,5 +1,7 @@ +import 'package:PiliPalaX/pages/preview/view.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:get/get_navigation/src/dialog/dialog_route.dart'; extension ImageExtension on num { int cacheSize(BuildContext context) { @@ -61,4 +63,29 @@ extension BuildContextExt on BuildContext { ? const Color(0xFFFF6699) : const Color(0xFFD44E7D); } + + void imageView({ + int? initialPage, + required List imgList, + }) { + Navigator.of(this).push( + GetDialogRoute( + pageBuilder: (buildContext, animation, secondaryAnimation) { + return ImagePreview( + initialPage: initialPage ?? 0, + imgList: imgList, + ); + }, + transitionDuration: const Duration(milliseconds: 300), + transitionBuilder: (context, animation, secondaryAnimation, child) { + var tween = Tween(begin: 0.0, end: 1.0) + .chain(CurveTween(curve: Curves.linear)); + return FadeTransition( + opacity: animation.drive(tween), + child: child, + ); + }, + ), + ); + } }