import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/store.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/border_text.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:huixiang/view_widget/custom_image.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:huixiang/view_widget/request_permission.dart'; import 'package:huixiang/view_widget/round_button.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import '../view_widget/no_data_view.dart'; class UnionList extends StatefulWidget { final RefreshController refreshController; final List storeList; final Function onRefresh; final Function queryStore; UnionList(this.refreshController,this.storeList,this.onRefresh,this.queryStore); @override State createState() { return _UnionList(); } } class _UnionList extends State { final TextEditingController editingController = TextEditingController(); @override Widget build(BuildContext context) { return Column( children: [ buildSearchItem(), Container( height: MediaQuery.of(context).size.height - 103.h - MediaQuery.of(context).padding.top, child: SmartRefresher( controller: widget.refreshController, enablePullUp: false, enablePullDown: true, physics: BouncingScrollPhysics(), header: MyHeader(), onRefresh: widget.onRefresh, child: (widget.storeList == null || widget.storeList.length == 0) ? NoDataView( src:"assets/image/di_zhi.webp", isShowBtn: false, text: "暂无店铺列表~", fontSize: 16.sp, margin: EdgeInsets.only(top: 120.h), ):ListView.builder( itemCount:widget.storeList == null ? 0 : widget.storeList.length, padding: EdgeInsets.only( top: 8.h, bottom: 100.h, /* + (375.h - 88.h) + 4.h*/ ), physics: NeverScrollableScrollPhysics(), itemBuilder: (context, position) { return InkWell( onTap: () { // if (widget.storeList[position].posType.code == "NORMALSTORE") { // showDeleteDialog(); // } // else // if ( widget.storeList[position].storeName == "一心回乡商城") { // Navigator.of(context).pushNamed( // '/router/shopping_mall_home', // arguments: { // "type": 0, // "id": widget.storeList[position].id, // "tenant": widget.storeList[position].tenantCode, // "storeName": widget.storeList[position].storeName // }, // ); // } // else { Navigator.of(context).pushNamed( '/router/store_order', arguments: { "id": widget.storeList[position].id, "tenant": widget.storeList[position].tenantCode, "storeName": widget.storeList[position].storeName, "distance":widget.storeList[position].distance }, ); } }, child: buildStoreItem(widget.storeList[position], position), ); })), ) ], ); } Widget buildSearchItem() { return Container( height: 36.h, margin: EdgeInsets.fromLTRB(6.w, 0, 14.w, 0), padding: EdgeInsets.fromLTRB(0, 6.h, 0, 6.h), decoration: BoxDecoration( color: Color(0xFFF5FAF7), borderRadius: BorderRadius.circular(4), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ), ], ), child: TextField( textInputAction: TextInputAction.search, onEditingComplete: () { FocusScope.of(context).requestFocus(FocusNode()); widget.queryStore(editingController.text); }, controller: editingController, cursorHeight: 25.h, decoration: InputDecoration( contentPadding: EdgeInsets.symmetric( vertical: 12.h, ), prefixIcon:InkWell( onTap: () { widget.queryStore(editingController.text); }, child: Icon( Icons.search, size: 24, color: Colors.black, ), ), suffixIcon: InkWell( onTap: () { editingController.clear(); }, child: Icon( Icons.close, size: 19, color: Colors.grey, ), ), border: InputBorder.none, ), ), ); } Widget buildStoreItem(Store store, position) { return Container( margin: EdgeInsets.fromLTRB(16.w, 8.h, 16.w, 12.h), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(8)), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(25), offset: Offset(0, 1), blurRadius: 12, spreadRadius: 0, ) ]), width: double.infinity, height: 235.h, child: Stack( children: [ Positioned( top: 0, left: 0, right: 0, child: ClipRRect( child: MImage( store.facade, width: double.infinity, height: 140.h, fit: BoxFit.cover, errorSrc: "assets/image/default_1.webp", fadeSrc: "assets/image/default_1.webp", ), borderRadius: BorderRadius.vertical( top: Radius.circular(4), ), ), ), Positioned( bottom: 0, left: 0, right: 0, child: Container(), ), Positioned( bottom: 16.h, left: 12.w, right: 12.w, child: Container( height: 107.h, child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ MImage( store.logo, width: 57, height: 57, fit: BoxFit.cover, isCircle: true, errorSrc: "assets/image/default_1.webp", fadeSrc: "assets/image/default_1.webp", ), SizedBox( width: 6.w, ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( height: 40.h, ), Text( store.storeName, overflow: TextOverflow.ellipsis, style: TextStyle( color: Color(0xFF0D0D0D), fontSize: 14.sp, fontWeight: MyFontWeight.bold, ), ), SizedBox( height: 5.h, ), Expanded(child: Text( "${S.of(context).dizhi}:${store.address}", maxLines: 2, overflow: TextOverflow.ellipsis, style: TextStyle( color: Color(0xFF4D4D4D), fontSize: 12.sp, fontWeight: MyFontWeight.regular, ), ),) ], )), if(store.distance != null) Container( width: 59.w, height: 18.h, alignment: Alignment.center, margin: EdgeInsets.only(top: 20.h), decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: Color(0xFF32A060), ), child: Visibility( child: Text( (store.distance ?? 0) > 1000 ? S.of(context).gongli( ((store.distance ?? 0) / 1000 * 100).toInt() / 100.0) : S.of(context).mi( ((store.distance ?? 0) * 100).toInt() / 100.0), style: TextStyle( color: Color(0xFFFFFFFF), fontSize: 10.sp, ), ), visible: store.distance != null, ), ), ], ), ), ), ], ), ); } ///扫码提示弹窗 showDeleteDialog() { showDialog( context: context, builder: (context) { return AlertDialog( content: Container( width: MediaQuery.of(context).size.width - 84.w, height: 130.h, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( "您即将进行扫码点餐", style: TextStyle( fontSize: 17.sp, fontWeight: FontWeight.bold, color: Colors.black, ), ), SizedBox( height: 30.h, ), Row( children: [ Expanded( child: InkWell( child: BorderText( text: "取消", textColor: Color(0xFF32A060), fontSize: 16.sp, fontWeight: FontWeight.bold, borderColor: Color(0xFF32A060), radius: 4, padding: EdgeInsets.all(12), borderWidth: 1, ), onTap: () { Navigator.of(context).pop(); }, ), flex: 1, ), SizedBox( width: 16.w, ), Expanded( child: InkWell( child: RoundButton( text: "确定", textColor: Colors.white, radius: 4, padding: EdgeInsets.all(12), backgroup: Color(0xFF32A060), fontSize: 16.sp, fontWeight: FontWeight.bold, ), onTap: () { toScan(); Navigator.of(context).pop(); }, ), flex: 1, ), ], ) ], ), ), ); }, ); } ///扫码 toScan() async { if (await Permission.camera.isPermanentlyDenied) { showCupertinoDialog( context: context, builder: (context) { return RequestPermission( "assets/image/icon_camera_permission_tips.webp", S.of(context).ninxiangjiquanxianweikaiqi, S.of(context).weilekaipaizhaoxuanzhetouxiang, S.of(context).kaiqiquanxian, (result) async { if (result) { await openAppSettings(); } }, heightRatioWithWidth: 0.82, ); }); } else if (await Permission.camera.isGranted) { // http://pos.app.gznl.top/placeorder/?tableId=1315903669597634560&tenantCode=1166&shopId=1300372027722432512 var result = await Navigator.of(context).pushNamed('/router/qr_scan'); // String result = await scanner.scan(); Uri uri = Uri.parse(result); String tableId = uri.queryParameters["tableId"]; String tenantCode = uri.queryParameters["tenantCode"]; String shopId = uri.queryParameters["shopId"]; if (tableId != null && tableId != "" && tenantCode != null && tenantCode != "" && shopId != null && shopId != "") { Navigator.of(context).pushNamed( '/router/store_order', arguments: { "id": shopId, "tenant": tenantCode, "storeName": "", "tableId": int.tryParse(tableId), }, ); } } else { await Permission.camera.request(); } } }