提交 47bd586f authored 作者: yueweilu's avatar yueweilu

1、图片预览

2、展示优化
上级 d5e98ffd
library image_view;
import 'package:extended_image/extended_image.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
part 'view.dart';
\ No newline at end of file
part of image_view;
class ImageViewPage extends StatefulWidget {
final List<String>images;
const ImageViewPage({
Key? key,
required this.images
}) : super(key: key);
@override
State<ImageViewPage> createState() => _ImageViewPageState();
}
class _ImageViewPageState extends State<ImageViewPage> {
final List<int> _cachedIndexes = <int>[];
void _preloadImage(int index) {
if (_cachedIndexes.contains(index)) {
return;
}
if (0 <= index && index < widget.images.length) {
final String url = widget.images[index];
precacheImage(ExtendedNetworkImageProvider(url, cache: true), context);
_cachedIndexes.add(index);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
extendBody: true,
body: Container(
color: Colors.black,
child: ExtendedImageGesturePageView.builder(
controller: ExtendedPageController(
initialPage: 0,
pageSpacing: 50,
),
onPageChanged: (int page) {
// _preloadImage(page - 1);
// _preloadImage(page + 1);
},
itemCount: widget.images.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: (){
context.pop();
},
child: ExtendedImage.network(
widget.images[index],
fit: BoxFit.contain,
mode: ExtendedImageMode.gesture,
initGestureConfigHandler: (ExtendedImageState state) {
return GestureConfig(
//you must set inPageView true if you want to use ExtendedImageGesturePageView
inPageView: true,
initialScale: 1.0,
maxScale: 5.0,
animationMaxScale: 6.0,
initialAlignment: InitialAlignment.center,
);
},
),
);
},
),
),
);
}
}
...@@ -5,9 +5,11 @@ import 'package:flutter/material.dart'; ...@@ -5,9 +5,11 @@ import 'package:flutter/material.dart';
import 'package:flutter_book/widgets/index.dart'; import 'package:flutter_book/widgets/index.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
import '../../apis/index.dart'; import '../../apis/index.dart';
import '../../models/index.dart'; import '../../models/index.dart';
import '../../routes/index.dart';
import '../../theme.dart'; import '../../theme.dart';
import '../../utils/index.dart'; import '../../utils/index.dart';
import '../read_web/index.dart'; import '../read_web/index.dart';
......
...@@ -116,8 +116,13 @@ class _BuildDiscussState extends State<BuildDiscuss> { ...@@ -116,8 +116,13 @@ class _BuildDiscussState extends State<BuildDiscuss> {
), ),
type ==0? Column( type ==0? Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [ children: [
Text(_showText(model),style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3),), Text(_showText(model),style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3),),
Text(_showStatus(model),style: TextStyle(fontSize: 13.w,height: 1.5,color: AppTheme.primary),),
],
),
Gaps.vGaps10, Gaps.vGaps10,
_buildImageGridView() _buildImageGridView()
], ],
...@@ -176,20 +181,33 @@ class _BuildDiscussState extends State<BuildDiscuss> { ...@@ -176,20 +181,33 @@ class _BuildDiscussState extends State<BuildDiscuss> {
String _showText(DiscussModel discussModel){ String _showText(DiscussModel discussModel){
String text = '';
// 是我的
if(discussModel.isMy == 1){
text = '${discussModel.content?.text?.content}';
}
else {
if(discussModel.content?.text?.privacyStatus ==1){
text = '${discussModel.content?.text?.content}';
}
}
return text;
}
String _showStatus(DiscussModel discussModel){
String text = ''; String text = '';
// 是我的 // 是我的
if(discussModel.isMy == 1){ if(discussModel.isMy == 1){
// 审核中 // 审核中
if(discussModel.content?.text?.privacyStatus ==0 ||discussModel.content?.text?.privacyStatus ==2){ if(discussModel.content?.text?.privacyStatus ==0 ||discussModel.content?.text?.privacyStatus ==2){
text = '${discussModel.content?.text?.content}(审核中)'; text = '(审核中)';
} }
// 审核未通过 // 审核未通过
else if(discussModel.content?.text?.privacyStatus ==-1){ else if(discussModel.content?.text?.privacyStatus ==-1){
text = '${discussModel.content?.text?.content}(审核未通过)'; text = '(审核未通过)';
} }
// 审核通过 // 审核通过
else { else {
text = '${discussModel.content?.text?.content}'; text = '';
} }
} }
else { else {
...@@ -203,7 +221,7 @@ class _BuildDiscussState extends State<BuildDiscuss> { ...@@ -203,7 +221,7 @@ class _BuildDiscussState extends State<BuildDiscuss> {
} }
// 审核通过 // 审核通过
else { else {
text = '${discussModel.content?.text?.content}'; text = '';
} }
} }
return text; return text;
...@@ -233,7 +251,12 @@ class _BuildDiscussState extends State<BuildDiscuss> { ...@@ -233,7 +251,12 @@ class _BuildDiscussState extends State<BuildDiscuss> {
), ),
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
MediaModel? mediaModel = widget.model.content?.image?[index]; MediaModel? mediaModel = widget.model.content?.image?[index];
return Stack( List<String>images = widget.model.content?.image?.map((MediaModel model) => model.content??'').toList()??[];
return GestureDetector(
onTap: (){
context.pushNamed(Routes.imageView,extra:images);
},
child: Stack(
children: [ children: [
Positioned( Positioned(
left: 0, left: 0,
...@@ -257,6 +280,7 @@ class _BuildDiscussState extends State<BuildDiscuss> { ...@@ -257,6 +280,7 @@ class _BuildDiscussState extends State<BuildDiscuss> {
), ),
), ),
], ],
),
); );
// return Container( // return Container(
// color: Colors.red, // color: Colors.red,
......
...@@ -22,7 +22,7 @@ class _BuildListPageState extends State<BuildListPage> with AutomaticKeepAliveCl ...@@ -22,7 +22,7 @@ class _BuildListPageState extends State<BuildListPage> with AutomaticKeepAliveCl
init: UserDiscussDesController(widget.tag,widget.model), init: UserDiscussDesController(widget.tag,widget.model),
builder: (controller) =>CustomPullScrollView( builder: (controller) =>CustomPullScrollView(
controller: controller.refreshController, controller: controller.refreshController,
// onRefresh: controller.onRefresh, onRefresh: controller.onRefresh,
onLoading: controller.onLoading, onLoading: controller.onLoading,
child: ListView.builder( child: ListView.builder(
itemBuilder: (BuildContext context,int index){ itemBuilder: (BuildContext context,int index){
......
...@@ -23,6 +23,7 @@ class _BuildListPageState extends State<BuildListPage> with AutomaticKeepAliveCl ...@@ -23,6 +23,7 @@ class _BuildListPageState extends State<BuildListPage> with AutomaticKeepAliveCl
builder: (controller) =>CustomPullScrollView( builder: (controller) =>CustomPullScrollView(
controller: controller.refreshController, controller: controller.refreshController,
onLoading: controller.onLoading, onLoading: controller.onLoading,
onRefresh: controller.onRefresh,
child: ListView.builder( child: ListView.builder(
itemBuilder: (BuildContext context,int index){ itemBuilder: (BuildContext context,int index){
NoteModel model = controller.notes[index]; NoteModel model = controller.notes[index];
......
...@@ -72,6 +72,7 @@ class BuildNote extends StatelessWidget { ...@@ -72,6 +72,7 @@ class BuildNote extends StatelessWidget {
// color: Colors.red, // color: Colors.red,
color:Colours.c3 color:Colours.c3
),), ),),
Text(_showStatus(model),style: TextStyle(fontSize: 14.w,height: 1.5,color: AppTheme.primary),),
], ],
), ),
Gaps.vGaps13, Gaps.vGaps13,
...@@ -100,20 +101,33 @@ class BuildNote extends StatelessWidget { ...@@ -100,20 +101,33 @@ class BuildNote extends StatelessWidget {
String _showText(NoteModel discussModel){ String _showText(NoteModel discussModel){
String text = '';
// 是我的
if(discussModel.isMy == 1){
text = '${discussModel.noteContent?.text?.content}';
}
else {
if(discussModel.noteContent?.text?.privacyStatus ==1){
text = '${discussModel.noteContent?.text?.content}';
}
}
return text;
}
String _showStatus(NoteModel discussModel){
String text = ''; String text = '';
// 是我的 // 是我的
if(discussModel.isMy == 1){ if(discussModel.isMy == 1){
// 审核中 // 审核中
if(discussModel.noteContent?.text?.privacyStatus ==0 ||discussModel.noteContent?.text?.privacyStatus ==2){ if(discussModel.noteContent?.text?.privacyStatus ==0 ||discussModel.noteContent?.text?.privacyStatus ==2){
text = '${discussModel.noteContent?.text?.content}(审核中)'; text = '(审核中)';
} }
// 审核未通过 // 审核未通过
else if(discussModel.noteContent?.text?.privacyStatus ==-1){ else if(discussModel.noteContent?.text?.privacyStatus ==-1){
text = '${discussModel.noteContent?.text?.content}(审核未通过)'; text = '(审核未通过)';
} }
// 审核通过 // 审核通过
else { else {
text = '${discussModel.noteContent?.text?.content}'; text = '';
} }
} }
else { else {
...@@ -127,12 +141,11 @@ class BuildNote extends StatelessWidget { ...@@ -127,12 +141,11 @@ class BuildNote extends StatelessWidget {
} }
// 审核通过 // 审核通过
else { else {
text = '${discussModel.noteContent?.text?.content}'; text = '';
} }
} }
return text; return text;
} }
// 图片 // 图片
Widget _buildImageGridView(){ Widget _buildImageGridView(){
return GridView.builder( return GridView.builder(
...@@ -147,7 +160,12 @@ class BuildNote extends StatelessWidget { ...@@ -147,7 +160,12 @@ class BuildNote extends StatelessWidget {
), ),
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
MediaModel? mediaModel = model.noteContent?.image?[index]; MediaModel? mediaModel = model.noteContent?.image?[index];
return Stack( List<String>images = model.noteContent?.image?.map((MediaModel model) => model.content??'').toList()??[];
return GestureDetector(
onTap: (){
context.pushNamed(Routes.imageView,extra:images);
},
child: Stack(
children: [ children: [
Positioned( Positioned(
left: 0, left: 0,
...@@ -171,6 +189,7 @@ class BuildNote extends StatelessWidget { ...@@ -171,6 +189,7 @@ class BuildNote extends StatelessWidget {
), ),
), ),
], ],
),
); );
}, },
itemCount: model.noteContent?.image?.length, itemCount: model.noteContent?.image?.length,
......
...@@ -57,7 +57,7 @@ class UserOrderAwaitingController extends GetxController { ...@@ -57,7 +57,7 @@ class UserOrderAwaitingController extends GetxController {
orderAwaitings = [ orderAwaitings = [
OrderCompletedModel(name: '订单编号',value: model.ordersnum.toString()), OrderCompletedModel(name: '订单编号',value: model.ordersnum.toString()),
OrderCompletedModel(name: '支付方式',value: payWay), OrderCompletedModel(name: '支付方式',value: payWay),
OrderCompletedModel(name: '支付时间',value: model.payTime.toString()), OrderCompletedModel(name: '下单时间',value: model.createTime.toString()),
]; ];
update(); update();
......
...@@ -38,7 +38,7 @@ class UserOrderCancelDetailController extends GetxController { ...@@ -38,7 +38,7 @@ class UserOrderCancelDetailController extends GetxController {
double.parse(model.finalTotalPrice.toString())).toString()), double.parse(model.finalTotalPrice.toString())).toString()),
OrderCompletedModel(name: '订单编号',value: model.ordersnum.toString()), OrderCompletedModel(name: '订单编号',value: model.ordersnum.toString()),
OrderCompletedModel(name: '支付方式',value: payWay), OrderCompletedModel(name: '支付方式',value: payWay),
OrderCompletedModel(name: '支付时间',value: model.payTime.toString()), // OrderCompletedModel(name: '支付时间',value: model.payTime.toString()),
OrderCompletedModel(name: '下单时间',value: model.createTime.toString()), OrderCompletedModel(name: '下单时间',value: model.createTime.toString()),
// OrderCompletedModel(name: '退款时间',value: model.refundTime.toString()), // OrderCompletedModel(name: '退款时间',value: model.refundTime.toString()),
]; ];
......
...@@ -119,7 +119,7 @@ class UserOrderCoinAwaitingController extends GetxController { ...@@ -119,7 +119,7 @@ class UserOrderCoinAwaitingController extends GetxController {
orderAwaitings = [ orderAwaitings = [
OrderCompletedModel(name: '订单编号',value: model.ordersnum.toString()), OrderCompletedModel(name: '订单编号',value: model.ordersnum.toString()),
OrderCompletedModel(name: '支付方式',value: payWay), OrderCompletedModel(name: '支付方式',value: payWay),
OrderCompletedModel(name: '支付时间',value: model.payTime.toString()), OrderCompletedModel(name: '下单时间',value: model.createTime.toString()),
]; ];
data.add(CoinModel(identifying:model.goodsId)); data.add(CoinModel(identifying:model.goodsId));
......
...@@ -2,6 +2,7 @@ library routes; ...@@ -2,6 +2,7 @@ library routes;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_book/pages/ad/index.dart'; import 'package:flutter_book/pages/ad/index.dart';
import 'package:flutter_book/pages/answer/index.dart'; import 'package:flutter_book/pages/answer/index.dart';
import 'package:flutter_book/pages/book_detail/index.dart'; import 'package:flutter_book/pages/book_detail/index.dart';
...@@ -52,6 +53,7 @@ import '../models/index.dart'; ...@@ -52,6 +53,7 @@ import '../models/index.dart';
import '../pages/ad_detail/index.dart'; import '../pages/ad_detail/index.dart';
import '../pages/bai_dict/index.dart'; import '../pages/bai_dict/index.dart';
import '../pages/bai_ke/index.dart'; import '../pages/bai_ke/index.dart';
import '../pages/image_view/index.dart';
import '../pages/read_web/index.dart'; import '../pages/read_web/index.dart';
import '../pages/user_edit_note/index.dart'; import '../pages/user_edit_note/index.dart';
import '../pages/user_order/index.dart'; import '../pages/user_order/index.dart';
...@@ -66,3 +68,4 @@ import '../store/index.dart'; ...@@ -66,3 +68,4 @@ import '../store/index.dart';
part 'observers.dart'; part 'observers.dart';
part 'routes.dart'; part 'routes.dart';
part 'transitions.dart';
\ No newline at end of file
...@@ -130,6 +130,8 @@ abstract class Routes { ...@@ -130,6 +130,8 @@ abstract class Routes {
static const orderRefunded= 'order_refunded'; static const orderRefunded= 'order_refunded';
// 搜索订单 // 搜索订单
static const orderSearch= 'order_search'; static const orderSearch= 'order_search';
// 图片预览
static const imageView = 'image_view';
...@@ -689,6 +691,18 @@ abstract class Routes { ...@@ -689,6 +691,18 @@ abstract class Routes {
) )
) )
), ),
GoRoute( // 知识测评
path: '/$imageView',
name: imageView,
pageBuilder: (context, state) =>BottomToTopTransitionPage(
name: state.uri.toString(),
key: state.pageKey,
child: ImageViewPage(
images: state.extra as List<String>,
)
)
),
] ]
); );
......
/// @Description: 路由动画
/// @Author: 歪脖子
/// @Date: 2023-10-13 13:05
part of routes;
class BottomToTopTransitionPage<T> extends CustomTransitionPage<T> {
BottomToTopTransitionPage({
super.key,
super.name,
required super.child,
}) : super(
opaque: true,
barrierColor: Colors.black,
barrierDismissible: true,
fullscreenDialog: true,
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return SlideTransition(
position: CurveTween(curve: Curves.fastOutSlowIn)
.animate(animation)
.drive<Offset>(
Tween(begin: const Offset(0, 1.0), end: Offset.zero),
),
child: SafeArea(
bottom: false,
child: Material(
type: MaterialType.transparency,
// clipBehavior: Clip.hardEdge,
// shape: Theme.of(context).bottomSheetTheme.shape,
child: MediaQuery.removePadding(
context: context,
// removeTop: true,
// removeLeft: true,
// removeRight: true,
child: child,
),
),
),
);
},
);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论