From 55846bc68ae4dcfe545931c2f2fde8c482cb8747 Mon Sep 17 00:00:00 2001 From: fmk Date: Mon, 9 Aug 2021 15:37:57 +0800 Subject: [PATCH 1/8] image --- ios/Runner/AppDelegate.mm | 3 ++- lib/address/address_map_page.dart | 12 +++++++----- lib/main.dart | 2 +- lib/union/union_page.dart | 7 +++---- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/ios/Runner/AppDelegate.mm b/ios/Runner/AppDelegate.mm index 005f3a64..4e2d7e3b 100644 --- a/ios/Runner/AppDelegate.mm +++ b/ios/Runner/AppDelegate.mm @@ -72,7 +72,7 @@ }]; // 消息内容获取 - NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; + __block NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; NSLog(@"notification dic: %@", remoteNotification); FlutterMethodChannel* bridgeAppChannel = [FlutterMethodChannel methodChannelWithName:@"bridge" binaryMessenger:(NSObject *)controller]; @@ -81,6 +81,7 @@ if ([method isEqual:@"action"]) { if (remoteNotification != NULL) { result(remoteNotification[@"custom"]); + remoteNotification = nil; } result(@""); } diff --git a/lib/address/address_map_page.dart b/lib/address/address_map_page.dart index 5b9b153a..2dc06eae 100644 --- a/lib/address/address_map_page.dart +++ b/lib/address/address_map_page.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:io'; +import 'dart:ui'; import 'package:android_intent_plus/android_intent.dart'; import 'package:dio/dio.dart'; @@ -280,12 +281,13 @@ class _AddressMapPage extends State { print("map_wid: ${MediaQuery.of(context).size.width}"); print("map_hei: ${MediaQuery.of(context).size.height}"); + bmfMarker = BMFMarker( position: latLng, - screenPointToLock: BMFPoint(MediaQuery.of(context).size.width / 2, - MediaQuery.of(context).size.height / 4), + screenPointToLock: BMFPoint(window.physicalSize.width / 2, + window.physicalSize.height / 4), isLockedToScreen: true, - centerOffset: BMFPoint(0.5, 0.9), + centerOffset: BMFPoint(1, 1), enabled: false, icon: "assets/image/icon_map_marker.png", draggable: false, @@ -294,8 +296,8 @@ class _AddressMapPage extends State { } bmfMarker.updateIsLockedToScreen( true, - BMFPoint(MediaQuery.of(context).size.width / 2, - MediaQuery.of(context).size.height / 4)); + BMFPoint(window.physicalSize.width / 2, + window.physicalSize.height / 4)); } saveLatLng(BMFCoordinate latLng) async { diff --git a/lib/main.dart b/lib/main.dart index c18695fe..d837bc2d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -120,7 +120,7 @@ initSdk() async { if(Platform.isIOS){ LocationFlutterPlugin.setApiKey("ylW2QPlsbERkho7jOgU4GQSeawmdUIoR"); BMFMapSDK.setApiKeyAndCoordType( - '7IACaFNxOX2EMauupIZisjI8XSxe09ER', BMF_COORD_TYPE.BD09LL); + '7IACaFNxOX2EMauupIZisjI8XSxe09ER', BMF_COORD_TYPE.COMMON); } else if(Platform.isAndroid) { BMFMapSDK.setCoordType(BMF_COORD_TYPE.COMMON); } diff --git a/lib/union/union_page.dart b/lib/union/union_page.dart index 74bd2220..ae9353f4 100644 --- a/lib/union/union_page.dart +++ b/lib/union/union_page.dart @@ -25,7 +25,6 @@ import 'package:huixiang/view_widget/request_permission.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'dart:typed_data'; import 'package:flutter/rendering.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart'; @@ -624,9 +623,6 @@ class _UnionPage extends State ), ], ), - SizedBox( - height: 4.h, - ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, @@ -665,6 +661,9 @@ class _UnionPage extends State ), ], ), + SizedBox( + height: 4.h, + ), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, From 46d471ef8fa128d88ecd03c37fde8afbae429c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=93=88=E5=93=88=E5=93=88?= Date: Mon, 9 Aug 2021 15:51:04 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=81OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/address/address_map_page.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/address/address_map_page.dart b/lib/address/address_map_page.dart index 2dc06eae..ec5beee9 100644 --- a/lib/address/address_map_page.dart +++ b/lib/address/address_map_page.dart @@ -83,7 +83,7 @@ class _AddressMapPage extends State { .then((value) { saveLatLng(value); if (_mapController != null) { - this.latLng = value; + this.latLng = Platform.isIOS ? value : latLng; addMarker(); _mapController.updateMapOptions( BMFMapOptions( @@ -284,10 +284,10 @@ class _AddressMapPage extends State { bmfMarker = BMFMarker( position: latLng, - screenPointToLock: BMFPoint(window.physicalSize.width / 2, - window.physicalSize.height / 4), + screenPointToLock: BMFPoint((Platform.isIOS ? MediaQuery.of(context).size.width : window.physicalSize.width) / 2, + Platform.isIOS ? MediaQuery.of(context).size.height : window.physicalSize.height / 4), isLockedToScreen: true, - centerOffset: BMFPoint(1, 1), + centerOffset: BMFPoint(0.5, 0.95), enabled: false, icon: "assets/image/icon_map_marker.png", draggable: false, @@ -296,8 +296,8 @@ class _AddressMapPage extends State { } bmfMarker.updateIsLockedToScreen( true, - BMFPoint(window.physicalSize.width / 2, - window.physicalSize.height / 4)); + BMFPoint((Platform.isIOS ? MediaQuery.of(context).size.width : window.physicalSize.width) / 2, + (Platform.isIOS ? MediaQuery.of(context).size.height : window.physicalSize.height) / 4)); } saveLatLng(BMFCoordinate latLng) async { From cff1e75b11cdd3fb61bc9e96b6dceb18603afe14 Mon Sep 17 00:00:00 2001 From: fmk Date: Mon, 9 Aug 2021 16:32:32 +0800 Subject: [PATCH 3/8] image --- lib/address/address_map_page.dart | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/lib/address/address_map_page.dart b/lib/address/address_map_page.dart index ec5beee9..4e4ddf23 100644 --- a/lib/address/address_map_page.dart +++ b/lib/address/address_map_page.dart @@ -138,7 +138,7 @@ class _AddressMapPage extends State { aMapFlutterLocation.prepareLoc(androidMap, iosMap); } - List
poiList; + List poiList; searchPoi(BMFCoordinate latLng) async { keyWord = textEditingController.text; @@ -148,23 +148,7 @@ class _AddressMapPage extends State { callback: (BMFPoiSearchResult result, BMFSearchErrorCode errorCode) { // if ((DateTime.now().millisecondsSinceEpoch - time) > 2000) { result.poiInfoList.map((e) => print("sssssssssss:${e.toMap()}")); - poiList = result.poiInfoList - .map((e) => Address.fromJson({ - "address": e.address, - "area": e.name, - "city": e.city, - "province": e.province, - "latitude": e.pt.latitude, - "longitude": e.pt.longitude, - "cityInfo": e.name, - "id": "", - "mid": "", - "phone": "", - "tag": "", - "username": "", - "isDefault": true, - })) - .toList(); + poiList = result.poiInfoList; print("object112221: ${poiList.length}"); setState(() { time = DateTime.now().millisecondsSinceEpoch; @@ -408,7 +392,7 @@ class _AddressMapPage extends State { itemBuilder: (context, position) { return InkWell( onTap: () { - Navigator.of(context).pop(poiList[position].toJson()); + Navigator.of(context).pop(poiList[position].toMap()); }, child: addressItem(poiList[position]), ); @@ -429,7 +413,7 @@ class _AddressMapPage extends State { ); } - Widget addressItem(Address address) { + Widget addressItem(BMFPoiInfo address) { return Container( margin: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), child: Column( @@ -437,7 +421,7 @@ class _AddressMapPage extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - address.cityInfo ?? "", + address.address ?? "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 16.sp, From 6916c120a84cbf877070a36010fb5ea8da361719 Mon Sep 17 00:00:00 2001 From: fmk Date: Mon, 9 Aug 2021 18:02:07 +0800 Subject: [PATCH 4/8] image --- lib/address/address_map_page.dart | 9 +++++---- lib/main.dart | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/address/address_map_page.dart b/lib/address/address_map_page.dart index 4e4ddf23..63cb0712 100644 --- a/lib/address/address_map_page.dart +++ b/lib/address/address_map_page.dart @@ -156,7 +156,7 @@ class _AddressMapPage extends State { // } }); bmfPoiNearbySearch.poiNearbySearch(BMFPoiNearbySearchOption( - keywords: ["all"], + keywords: ["附近"], radius: 100000, location: latLng, pageSize: 20, @@ -365,8 +365,8 @@ class _AddressMapPage extends State { startLocation(); }, child: Container( - width: 32.w, - height: 32.h, + width: 32, + height: 32, padding: EdgeInsets.all(8), decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), @@ -414,6 +414,7 @@ class _AddressMapPage extends State { } Widget addressItem(BMFPoiInfo address) { + print("addresss:${address.toMap()}"); return Container( margin: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), child: Column( @@ -421,7 +422,7 @@ class _AddressMapPage extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - address.address ?? "", + address.name ?? "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 16.sp, diff --git a/lib/main.dart b/lib/main.dart index d837bc2d..b0a4e8e7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -120,7 +120,7 @@ initSdk() async { if(Platform.isIOS){ LocationFlutterPlugin.setApiKey("ylW2QPlsbERkho7jOgU4GQSeawmdUIoR"); BMFMapSDK.setApiKeyAndCoordType( - '7IACaFNxOX2EMauupIZisjI8XSxe09ER', BMF_COORD_TYPE.COMMON); + 'ylW2QPlsbERkho7jOgU4GQSeawmdUIoR', BMF_COORD_TYPE.COMMON); } else if(Platform.isAndroid) { BMFMapSDK.setCoordType(BMF_COORD_TYPE.COMMON); } From fb612aadb7dc587c28b32bbd3a52636d98f95fa4 Mon Sep 17 00:00:00 2001 From: fmk Date: Mon, 9 Aug 2021 18:35:56 +0800 Subject: [PATCH 5/8] image --- lib/address/address_map_page.dart | 89 +++++++++++++++++++++---------- 1 file changed, 60 insertions(+), 29 deletions(-) diff --git a/lib/address/address_map_page.dart b/lib/address/address_map_page.dart index 63cb0712..5bfdc850 100644 --- a/lib/address/address_map_page.dart +++ b/lib/address/address_map_page.dart @@ -138,31 +138,54 @@ class _AddressMapPage extends State { aMapFlutterLocation.prepareLoc(androidMap, iosMap); } - List poiList; + List
poiList; searchPoi(BMFCoordinate latLng) async { keyWord = textEditingController.text; - - BMFPoiNearbySearch bmfPoiNearbySearch = BMFPoiNearbySearch(); - bmfPoiNearbySearch.onGetPoiNearbySearchResult( - callback: (BMFPoiSearchResult result, BMFSearchErrorCode errorCode) { - // if ((DateTime.now().millisecondsSinceEpoch - time) > 2000) { - result.poiInfoList.map((e) => print("sssssssssss:${e.toMap()}")); - poiList = result.poiInfoList; - print("object112221: ${poiList.length}"); - setState(() { - time = DateTime.now().millisecondsSinceEpoch; - }); - // } - }); - bmfPoiNearbySearch.poiNearbySearch(BMFPoiNearbySearchOption( - keywords: ["附近"], - radius: 100000, - location: latLng, - pageSize: 20, - pageIndex: 0, - isRadiusLimit: true, - )); + print("keyWord: ${keyWord}"); + var addressPoi = await apiService.searchPoi( + "${latLng.latitude}", "${latLng.longitude}", keyWord, 20, 1); + List poi = addressPoi['pois']; + poiList = poi + .map((e) => Address.fromJson({ + "address": e["address"] is List ? "" : e["address"], + "area": e["adname"], + "city": e["cityname"], + "province": e["pname"], + "latitude": e["location"].toString().split(",")[0], + "longitude": e["location"].toString().split(",")[1], + "cityInfo": e["name"], + "id": "", + "mid": "", + "phone": "", + "tag": "", + "username": "", + "isDefault": true, + })) + .toList(); + setState(() {}); + + // BMFPoiNearbySearch bmfPoiNearbySearch = BMFPoiNearbySearch(); + // bmfPoiNearbySearch.onGetPoiNearbySearchResult( + // callback: (BMFPoiSearchResult result, BMFSearchErrorCode errorCode) { + // // if ((DateTime.now().millisecondsSinceEpoch - time) > 2000) { + // result.poiInfoList.map((e) => print("sssssssssss:${e.toMap()}")); + // poiList = result.poiInfoList; + // print("object112221: ${poiList.length}"); + // setState(() { + // time = DateTime.now().millisecondsSinceEpoch; + // }); + // // } + // }); + // bmfPoiNearbySearch.poiNearbySearch(BMFPoiNearbySearchOption( + // keywords: [" "], + // tags: ["小区","住宅","地标","建筑"], + // radius: 100000, + // location: latLng, + // pageSize: 20, + // pageIndex: 0, + // isRadiusLimit: true, + // )); } int time = 0; @@ -240,11 +263,21 @@ class _AddressMapPage extends State { } BMFMapController _mapController; + BMFCoordinate bmfCoordinate; void onMapCreated(BMFMapController controller) { controller.setMapRegionDidChangeCallback(callback: (status) { - center = status.targetGeoPt; - searchPoi(center); + BMFMapStatus bmfMapStatus = status; + print("status: ${bmfMapStatus.toMap()}"); + if(bmfCoordinate != null && bmfCoordinate.longitude == status.targetGeoPt.longitude && bmfCoordinate.latitude == status.targetGeoPt.latitude) { + if ((DateTime.now().millisecondsSinceEpoch - time) > 1000) { + center = status.targetGeoPt; + searchPoi(center); + time = DateTime.now().millisecondsSinceEpoch; + } + } else { + bmfCoordinate = status.targetGeoPt; + } }); setState(() { @@ -265,7 +298,6 @@ class _AddressMapPage extends State { print("map_wid: ${MediaQuery.of(context).size.width}"); print("map_hei: ${MediaQuery.of(context).size.height}"); - bmfMarker = BMFMarker( position: latLng, screenPointToLock: BMFPoint((Platform.isIOS ? MediaQuery.of(context).size.width : window.physicalSize.width) / 2, @@ -392,7 +424,7 @@ class _AddressMapPage extends State { itemBuilder: (context, position) { return InkWell( onTap: () { - Navigator.of(context).pop(poiList[position].toMap()); + Navigator.of(context).pop(poiList[position].toJson()); }, child: addressItem(poiList[position]), ); @@ -413,8 +445,7 @@ class _AddressMapPage extends State { ); } - Widget addressItem(BMFPoiInfo address) { - print("addresss:${address.toMap()}"); + Widget addressItem(Address address) { return Container( margin: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), child: Column( @@ -422,7 +453,7 @@ class _AddressMapPage extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - address.name ?? "", + address.cityInfo ?? "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 16.sp, From f349fc5048ab1e13eac3d2a7d4b207350cb5e81d Mon Sep 17 00:00:00 2001 From: fmk Date: Mon, 9 Aug 2021 19:02:14 +0800 Subject: [PATCH 6/8] image --- assets/image/2x/icon_address_location.png | Bin 7358 -> 13393 bytes assets/image/icon_address_location.png | Bin 3397 -> 13393 bytes lib/address/address_map_page.dart | 58 ++++++++++++++-------- lib/mine/vip_card_page.dart | 3 +- lib/mine/vip_detail_page.dart | 2 +- lib/retrofit/retrofit_api.dart | 8 +-- pubspec.lock | 4 +- 7 files changed, 45 insertions(+), 30 deletions(-) diff --git a/assets/image/2x/icon_address_location.png b/assets/image/2x/icon_address_location.png index 4985477d4e81f48d7d0749a1f13d7f992e3b9b53..a53449d199bc35ca4f83968ac63ac86a4ec4d4d2 100644 GIT binary patch literal 13393 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 UwD&v*cvT1_FRda~Ct(uuKglb#lmGw# literal 7358 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 diff --git a/assets/image/icon_address_location.png b/assets/image/icon_address_location.png index df185b364c39a4d92f3e52f173894ee654b50d60..a53449d199bc35ca4f83968ac63ac86a4ec4d4d2 100644 GIT binary patch literal 13393 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 UwD&v*cvT1_FRda~Ct(uuKglb#lmGw# literal 3397 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 bIw1ZFQFE4vpUXac00000NkvXXu0mjfUyym_ diff --git a/lib/address/address_map_page.dart b/lib/address/address_map_page.dart index 5bfdc850..abc6eb10 100644 --- a/lib/address/address_map_page.dart +++ b/lib/address/address_map_page.dart @@ -148,20 +148,20 @@ class _AddressMapPage extends State { List poi = addressPoi['pois']; poiList = poi .map((e) => Address.fromJson({ - "address": e["address"] is List ? "" : e["address"], - "area": e["adname"], - "city": e["cityname"], - "province": e["pname"], - "latitude": e["location"].toString().split(",")[0], - "longitude": e["location"].toString().split(",")[1], - "cityInfo": e["name"], - "id": "", - "mid": "", - "phone": "", - "tag": "", - "username": "", - "isDefault": true, - })) + "address": e["address"] is List ? "" : e["address"], + "area": e["adname"], + "city": e["cityname"], + "province": e["pname"], + "latitude": e["location"].toString().split(",")[0], + "longitude": e["location"].toString().split(",")[1], + "cityInfo": e["name"], + "id": "", + "mid": "", + "phone": "", + "tag": "", + "username": "", + "isDefault": true, + })) .toList(); setState(() {}); @@ -269,7 +269,9 @@ class _AddressMapPage extends State { controller.setMapRegionDidChangeCallback(callback: (status) { BMFMapStatus bmfMapStatus = status; print("status: ${bmfMapStatus.toMap()}"); - if(bmfCoordinate != null && bmfCoordinate.longitude == status.targetGeoPt.longitude && bmfCoordinate.latitude == status.targetGeoPt.latitude) { + if (bmfCoordinate != null && + bmfCoordinate.longitude == status.targetGeoPt.longitude && + bmfCoordinate.latitude == status.targetGeoPt.latitude) { if ((DateTime.now().millisecondsSinceEpoch - time) > 1000) { center = status.targetGeoPt; searchPoi(center); @@ -283,7 +285,6 @@ class _AddressMapPage extends State { setState(() { _mapController = controller; _mapController.showUserLocation(true); - _loadCustomData(); addMarker(); }); @@ -300,20 +301,33 @@ class _AddressMapPage extends State { bmfMarker = BMFMarker( position: latLng, - screenPointToLock: BMFPoint((Platform.isIOS ? MediaQuery.of(context).size.width : window.physicalSize.width) / 2, - Platform.isIOS ? MediaQuery.of(context).size.height : window.physicalSize.height / 4), + screenPointToLock: BMFPoint( + (Platform.isIOS + ? MediaQuery.of(context).size.width + : window.physicalSize.width) / + 2, + Platform.isIOS + ? MediaQuery.of(context).size.height + : window.physicalSize.height / 4), isLockedToScreen: true, - centerOffset: BMFPoint(0.5, 0.95), + centerOffset: BMFPoint(0.5, 0.7), enabled: false, - icon: "assets/image/icon_map_marker.png", + icon: "assets/image/icon_address_location.png", draggable: false, ); _mapController.addMarker(bmfMarker); } bmfMarker.updateIsLockedToScreen( true, - BMFPoint((Platform.isIOS ? MediaQuery.of(context).size.width : window.physicalSize.width) / 2, - (Platform.isIOS ? MediaQuery.of(context).size.height : window.physicalSize.height) / 4)); + BMFPoint( + (Platform.isIOS + ? MediaQuery.of(context).size.width + : window.physicalSize.width) / + 2, + (Platform.isIOS + ? MediaQuery.of(context).size.height + : window.physicalSize.height) / + 4)); } saveLatLng(BMFCoordinate latLng) async { diff --git a/lib/mine/vip_card_page.dart b/lib/mine/vip_card_page.dart index 752fe1a6..ec55d424 100644 --- a/lib/mine/vip_card_page.dart +++ b/lib/mine/vip_card_page.dart @@ -95,6 +95,7 @@ class _VipCardPage extends State { } String assetsByName(String storeName) { + if (storeName == null) return "assets/image/icon_vip_bj.png"; if (storeName.contains("百年川椒")) { return "assets/image/icon_vip_bj.png"; } else if (storeName.contains("海峡姐妹")) { @@ -167,7 +168,7 @@ class _VipCardPage extends State { children: [ Expanded( child: Text( - vipCard.storeName, + vipCard.storeName ?? "", overflow: TextOverflow.ellipsis, maxLines: 1, style: TextStyle( diff --git a/lib/mine/vip_detail_page.dart b/lib/mine/vip_detail_page.dart index 91202e74..ef0df241 100644 --- a/lib/mine/vip_detail_page.dart +++ b/lib/mine/vip_detail_page.dart @@ -215,7 +215,7 @@ class _VipDetailPage extends State { children: [ Expanded( child: Text( - vipCard != null ? vipCard.storeName : "", + vipCard != null ? vipCard.storeName ?? "" : "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart index 3f560aa5..700e9905 100644 --- a/lib/retrofit/retrofit_api.dart +++ b/lib/retrofit/retrofit_api.dart @@ -14,11 +14,11 @@ import 'package:shared_preferences/shared_preferences.dart'; part 'retrofit_api.g.dart'; -// const base_url = "https://pos.platform.lotus-wallet.com/app/"; ///正式 -// const baseUrl = "https://pos.platform.lotus-wallet.com/app/"; ///正式 +const base_url = "https://pos.platform.lotus-wallet.com/app/"; ///正式 +const baseUrl = "https://pos.platform.lotus-wallet.com/app/"; ///正式 -const base_url = "http://192.168.10.236:8766/app/"; -const baseUrl = "http://192.168.10.236:8766/app/";/// 本地 +// const base_url = "http://192.168.10.236:8766/app/"; +// const baseUrl = "http://192.168.10.236:8766/app/";/// 本地 @RestApi(baseUrl: baseUrl) abstract class ApiService { diff --git a/pubspec.lock b/pubspec.lock index 4ce17977..7914582b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -35,7 +35,7 @@ packages: name: async url: "https://pub.flutter-io.cn" source: hosted - version: "2.5.0" + version: "2.6.1" barcode: dependency: transitive description: @@ -893,7 +893,7 @@ packages: name: test_api url: "https://pub.flutter-io.cn" source: hosted - version: "0.2.19" + version: "0.3.0" timing: dependency: transitive description: From 2d2111e6f7d136d27366466d4357c361a10ac959 Mon Sep 17 00:00:00 2001 From: fmk Date: Mon, 9 Aug 2021 19:02:35 +0800 Subject: [PATCH 7/8] image --- lib/retrofit/retrofit_api.g.dart | 820 +++++++++++++++++++++++++++++++ 1 file changed, 820 insertions(+) create mode 100644 lib/retrofit/retrofit_api.g.dart diff --git a/lib/retrofit/retrofit_api.g.dart b/lib/retrofit/retrofit_api.g.dart new file mode 100644 index 00000000..5b770fec --- /dev/null +++ b/lib/retrofit/retrofit_api.g.dart @@ -0,0 +1,820 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'retrofit_api.dart'; + +// ************************************************************************** +// RetrofitGenerator +// ************************************************************************** + +class _ApiService implements ApiService { + _ApiService(this._dio, {this.baseUrl}) { + ArgumentError.checkNotNull(_dio, '_dio'); + baseUrl ??= 'https://pos.platform.lotus-wallet.com/app/'; + } + + final Dio _dio; + + String baseUrl; + + @override + Future upload(data, folderId) async { + ArgumentError.checkNotNull(data, 'data'); + ArgumentError.checkNotNull(folderId, 'folderId'); + const _extra = {}; + final queryParameters = {}; + final _data = FormData(); + _data.files.add(MapEntry( + 'file', + MultipartFile.fromFileSync(data.path, + filename: data.path.split(Platform.pathSeparator).last))); + if (folderId != null) { + _data.fields.add(MapEntry('folderId', folderId.toString())); + } + final _result = await _dio.request>('/file/upload', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future searchPoi(lat, lng, keywords, size, page) async { + ArgumentError.checkNotNull(lat, 'lat'); + ArgumentError.checkNotNull(lng, 'lng'); + ArgumentError.checkNotNull(keywords, 'keywords'); + ArgumentError.checkNotNull(size, 'size'); + ArgumentError.checkNotNull(page, 'page'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request( + 'https://restapi.amap.com/v3/place/around?key=542b46afa8e4b88fe1eb3c4d0ba0872f&location=$lat,$lng&keywords=$keywords&offset={size}&page={page}&extensions=all', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = _result.data; + return value; + } + + @override + Future memberLogin(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/auth/platform/memberLogin', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future sendVerify(mobile) async { + ArgumentError.checkNotNull(mobile, 'mobile'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/auth/sendVerify/$mobile', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future creditGoods(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/creditGoods/list', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future goodsCategory(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/creditGoodsCategory/page', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future creditGoodsById(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/creditGoods/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryInfo() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/member/info', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future editInfo(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/member/editMemberInfo', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future signInInfo() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/member/signInInfo', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future signIn() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/member/signIn', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future recharge(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/wallet/recharge', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future receiveCoupon(couponId) async { + ArgumentError.checkNotNull(couponId, 'couponId'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/coupon/receive?couponId=$couponId', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future creditOrderList(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/creditOrder/list', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future creditOrder(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/creditOrder/create', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future addAddress(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/address/add', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future deleteAddress(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/address/delete', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryAddress(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/address/detail/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryMemberAddress() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/address/queryMemberAddress', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future updateAddress(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/address/update', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryCoupon(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/coupon/centreList', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryCard(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/coupon/packageList', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryStore(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/store/list', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future informationList(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/information/list', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future informationInfo(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/information/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future creditOrderReceive(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/creditOrder/receive/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryHome() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/home/home', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryStoreInfo(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/store/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryArticle(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/information/list', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryBanner(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/banner/page', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryHomeBrand() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/home/brand', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future minLogin(storeId) async { + ArgumentError.checkNotNull(storeId, 'storeId'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/auth/mini/login/$storeId', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryBillInfo(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/member/listBill', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future rankList() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/member/rankList', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future orderList(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/order/list', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future orderDetail(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/order/orderDetail?id=$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future continuePay(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>( + '/order/continuePay', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future receiveToCard(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/creditOrder/receive/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future vipList() async { + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/member/vipList', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future vipDetail(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>( + '/member/vipDetail/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future msgList(param) async { + ArgumentError.checkNotNull(param, 'param'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + _data.addAll(param ?? {}); + final _result = await _dio.request>('/app-msg/list', + queryParameters: queryParameters, + options: RequestOptions( + method: 'POST', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } + + @override + Future queryMsg(id) async { + ArgumentError.checkNotNull(id, 'id'); + const _extra = {}; + final queryParameters = {}; + final _data = {}; + final _result = await _dio.request>('/app-msg/$id', + queryParameters: queryParameters, + options: RequestOptions( + method: 'GET', + headers: {}, + extra: _extra, + baseUrl: baseUrl), + data: _data); + final value = BaseData.fromJson(_result.data); + return value; + } +} From 8dd285a0f844197e8a3dc802f1e7dc5f99ee29f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=93=88=E5=93=88=E5=93=88?= Date: Mon, 9 Aug 2021 22:21:52 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/address/address_map_page.dart | 2 +- lib/home/home_page.dart | 2 +- lib/integral/integral_page.dart | 4 +++- lib/login/login_page.dart | 2 +- lib/mine/mine_page.dart | 2 +- lib/order/store_selector_page.dart | 2 +- lib/union/union_page.dart | 2 +- 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/address/address_map_page.dart b/lib/address/address_map_page.dart index abc6eb10..2a96c872 100644 --- a/lib/address/address_map_page.dart +++ b/lib/address/address_map_page.dart @@ -199,7 +199,7 @@ class _AddressMapPage extends State { if (await Permission.location.isPermanentlyDenied) { requestDialog(); } else if (await Permission.location.isGranted) { - SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai); + SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai, animationDurationTemp: Duration(seconds: 1)); aMapFlutterLocation.startLocation(); Future.delayed(Duration(seconds: 6), () { SmartDialog.dismiss(); diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart index 2a8160ce..b5e766c0 100644 --- a/lib/home/home_page.dart +++ b/lib/home/home_page.dart @@ -83,7 +83,7 @@ class _HomePage extends State with AutomaticKeepAliveClientMixin { Founder founder; queryHome() async { - SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai); + SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai, animationDurationTemp: Duration(seconds: 1)); BaseData baseData = await apiService.queryBanner({ "model": {"type": "HOME_PAGE"}, }).catchError((onError) { diff --git a/lib/integral/integral_page.dart b/lib/integral/integral_page.dart index f007ee62..656a85b5 100644 --- a/lib/integral/integral_page.dart +++ b/lib/integral/integral_page.dart @@ -43,7 +43,7 @@ class _IntegralPage extends State { token: value.getString("token"), showLoading: false); userinfo = UserInfo.fromJson(jsonDecode(value.getString("user"))); - SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai); + SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai, animationDurationTemp: Duration(seconds: 1)); querySignInfo(); }); } @@ -511,6 +511,8 @@ class _IntegralPage extends State { SmartDialog.show( widget: SignInWidget("${signInfo.signInList.length + 1}", "${signInfo.rewardList[signInfo.signInList.length]}")); + } else { + SmartDialog.dismiss(); } } diff --git a/lib/login/login_page.dart b/lib/login/login_page.dart index 2ed589eb..e891ef0b 100644 --- a/lib/login/login_page.dart +++ b/lib/login/login_page.dart @@ -274,7 +274,7 @@ class _MyLoginPageState extends State with TickerProviderStateMixin { "capcha": code, "mobile": mobile, }; - SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai); + SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai, animationDurationTemp: Duration(seconds: 1)); BaseData value = await client.memberLogin(param).catchError((error) { print(error); SmartDialog.showToast("$error", alignment: Alignment.center); diff --git a/lib/mine/mine_page.dart b/lib/mine/mine_page.dart index 368ee822..331e035f 100644 --- a/lib/mine/mine_page.dart +++ b/lib/mine/mine_page.dart @@ -99,7 +99,7 @@ class _MinePage extends State with AutomaticKeepAliveClientMixin { List ranks = []; queryUserInfo() async { - SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai); + SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai, animationDurationTemp: Duration(seconds: 1)); BaseData rankData = await apiService.rankList(); if (rankData != null && rankData.isSuccess) { ranks.clear(); diff --git a/lib/order/store_selector_page.dart b/lib/order/store_selector_page.dart index 3dd8027f..5282beb3 100644 --- a/lib/order/store_selector_page.dart +++ b/lib/order/store_selector_page.dart @@ -119,7 +119,7 @@ class _StoreSelectorPage extends State { if (await Permission.location.isPermanentlyDenied) { requestDialog(); } else if (await Permission.location.isGranted) { - SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai); + SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai, animationDurationTemp: Duration(seconds: 1)); aMapFlutterLocation.startLocation(); Future.delayed(Duration(seconds: 6), () { SmartDialog.dismiss(); diff --git a/lib/union/union_page.dart b/lib/union/union_page.dart index ae9353f4..7d6aea9c 100644 --- a/lib/union/union_page.dart +++ b/lib/union/union_page.dart @@ -365,7 +365,7 @@ class _UnionPage extends State requestDialog(); refreshController.refreshCompleted(); } else if (await Permission.location.isGranted) { - SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai); + SmartDialog.showLoading(msg: S.of(context).zhengzaijiazai, animationDurationTemp: Duration(seconds: 1)); aMapFlutterLocation.startLocation(); Future.delayed(Duration(seconds: 6), () { SmartDialog.dismiss();