Commit 0706e987ac5e717eb1358d798ca51195dc12a21b

Authored by wdn127929
1 parent b7ea698e

高德地图选择店铺位置

@@ -58,6 +58,9 @@ @@ -58,6 +58,9 @@
58 <meta-data 58 <meta-data
59 android:name="flutterEmbedding" 59 android:name="flutterEmbedding"
60 android:value="2" /> 60 android:value="2" />
  61 + <meta-data
  62 + android:name="com.amap.api.v2.apikey"
  63 + android:value="dbced781d0acd36184d5b4b54da7188d"/>
61 64
62 </application> 65 </application>
63 </manifest> 66 </manifest>
1 PODS: 1 PODS:
  2 + - AMap3DMap (7.5.0):
  3 + - AMapFoundation (~> 1.6.3)
  4 + - amap_core_fluttify (0.0.1):
  5 + - AMapFoundation (~> 1.6)
  6 + - Flutter
  7 + - foundation_fluttify
  8 + - amap_location_fluttify (0.0.1):
  9 + - amap_core_fluttify
  10 + - AMapLocation (~> 2.6.5)
  11 + - Flutter
  12 + - foundation_fluttify
  13 + - amap_map_fluttify (0.0.1):
  14 + - AMap3DMap (~> 7.5.0)
  15 + - amap_core_fluttify
  16 + - Flutter
  17 + - foundation_fluttify
  18 + - url_launcher
  19 + - amap_search_fluttify (0.0.1):
  20 + - amap_core_fluttify
  21 + - AMapSearch (~> 7.3.0)
  22 + - Flutter
  23 + - foundation_fluttify
  24 + - AMapFoundation (1.6.4)
  25 + - AMapLocation (2.6.7):
  26 + - AMapFoundation (~> 1.6.4)
  27 + - AMapSearch (7.3.0):
  28 + - AMapFoundation (~> 1.6.3)
2 - audioplayers (0.0.1): 29 - audioplayers (0.0.1):
3 - Flutter 30 - Flutter
4 - Bugly (2.5.71) 31 - Bugly (2.5.71)
@@ -7,6 +34,8 @@ PODS: @@ -7,6 +34,8 @@ PODS:
7 - Reachability 34 - Reachability
8 - contacts_service (0.2.2): 35 - contacts_service (0.2.2):
9 - Flutter 36 - Flutter
  37 + - core_location_fluttify (0.0.1):
  38 + - Flutter
10 - device_info (0.0.1): 39 - device_info (0.0.1):
11 - Flutter 40 - Flutter
12 - easy_contact_picker (0.0.1): 41 - easy_contact_picker (0.0.1):
@@ -31,6 +60,8 @@ PODS: @@ -31,6 +60,8 @@ PODS:
31 - FMDB (2.7.5): 60 - FMDB (2.7.5):
32 - FMDB/standard (= 2.7.5) 61 - FMDB/standard (= 2.7.5)
33 - FMDB/standard (2.7.5) 62 - FMDB/standard (2.7.5)
  63 + - foundation_fluttify (0.0.1):
  64 + - Flutter
34 - image_picker (0.0.1): 65 - image_picker (0.0.1):
35 - Flutter 66 - Flutter
36 - install_plugin (0.0.1): 67 - install_plugin (0.0.1):
@@ -68,9 +99,14 @@ PODS: @@ -68,9 +99,14 @@ PODS:
68 - WechatOpenSDK (1.8.7.1) 99 - WechatOpenSDK (1.8.7.1)
69 100
70 DEPENDENCIES: 101 DEPENDENCIES:
  102 + - amap_core_fluttify (from `.symlinks/plugins/amap_core_fluttify/ios`)
  103 + - amap_location_fluttify (from `.symlinks/plugins/amap_location_fluttify/ios`)
  104 + - amap_map_fluttify (from `.symlinks/plugins/amap_map_fluttify/ios`)
  105 + - amap_search_fluttify (from `.symlinks/plugins/amap_search_fluttify/ios`)
71 - audioplayers (from `.symlinks/plugins/audioplayers/ios`) 106 - audioplayers (from `.symlinks/plugins/audioplayers/ios`)
72 - connectivity (from `.symlinks/plugins/connectivity/ios`) 107 - connectivity (from `.symlinks/plugins/connectivity/ios`)
73 - contacts_service (from `.symlinks/plugins/contacts_service/ios`) 108 - contacts_service (from `.symlinks/plugins/contacts_service/ios`)
  109 + - core_location_fluttify (from `.symlinks/plugins/core_location_fluttify/ios`)
74 - device_info (from `.symlinks/plugins/device_info/ios`) 110 - device_info (from `.symlinks/plugins/device_info/ios`)
75 - easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`) 111 - easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`)
76 - Flutter (from `Flutter`) 112 - Flutter (from `Flutter`)
@@ -80,6 +116,7 @@ DEPENDENCIES: @@ -80,6 +116,7 @@ DEPENDENCIES:
80 - flutter_statusbarcolor (from `.symlinks/plugins/flutter_statusbarcolor/ios`) 116 - flutter_statusbarcolor (from `.symlinks/plugins/flutter_statusbarcolor/ios`)
81 - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) 117 - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
82 - fluwx (from `.symlinks/plugins/fluwx/ios`) 118 - fluwx (from `.symlinks/plugins/fluwx/ios`)
  119 + - foundation_fluttify (from `.symlinks/plugins/foundation_fluttify/ios`)
83 - image_picker (from `.symlinks/plugins/image_picker/ios`) 120 - image_picker (from `.symlinks/plugins/image_picker/ios`)
84 - install_plugin (from `.symlinks/plugins/install_plugin/ios`) 121 - install_plugin (from `.symlinks/plugins/install_plugin/ios`)
85 - package_info (from `.symlinks/plugins/package_info/ios`) 122 - package_info (from `.symlinks/plugins/package_info/ios`)
@@ -98,6 +135,10 @@ DEPENDENCIES: @@ -98,6 +135,10 @@ DEPENDENCIES:
98 135
99 SPEC REPOS: 136 SPEC REPOS:
100 trunk: 137 trunk:
  138 + - AMap3DMap
  139 + - AMapFoundation
  140 + - AMapLocation
  141 + - AMapSearch
101 - Bugly 142 - Bugly
102 - FlutterIJK 143 - FlutterIJK
103 - FMDB 144 - FMDB
@@ -106,12 +147,22 @@ SPEC REPOS: @@ -106,12 +147,22 @@ SPEC REPOS:
106 - WechatOpenSDK 147 - WechatOpenSDK
107 148
108 EXTERNAL SOURCES: 149 EXTERNAL SOURCES:
  150 + amap_core_fluttify:
  151 + :path: ".symlinks/plugins/amap_core_fluttify/ios"
  152 + amap_location_fluttify:
  153 + :path: ".symlinks/plugins/amap_location_fluttify/ios"
  154 + amap_map_fluttify:
  155 + :path: ".symlinks/plugins/amap_map_fluttify/ios"
  156 + amap_search_fluttify:
  157 + :path: ".symlinks/plugins/amap_search_fluttify/ios"
109 audioplayers: 158 audioplayers:
110 :path: ".symlinks/plugins/audioplayers/ios" 159 :path: ".symlinks/plugins/audioplayers/ios"
111 connectivity: 160 connectivity:
112 :path: ".symlinks/plugins/connectivity/ios" 161 :path: ".symlinks/plugins/connectivity/ios"
113 contacts_service: 162 contacts_service:
114 :path: ".symlinks/plugins/contacts_service/ios" 163 :path: ".symlinks/plugins/contacts_service/ios"
  164 + core_location_fluttify:
  165 + :path: ".symlinks/plugins/core_location_fluttify/ios"
115 device_info: 166 device_info:
116 :path: ".symlinks/plugins/device_info/ios" 167 :path: ".symlinks/plugins/device_info/ios"
117 easy_contact_picker: 168 easy_contact_picker:
@@ -130,6 +181,8 @@ EXTERNAL SOURCES: @@ -130,6 +181,8 @@ EXTERNAL SOURCES:
130 :path: ".symlinks/plugins/fluttertoast/ios" 181 :path: ".symlinks/plugins/fluttertoast/ios"
131 fluwx: 182 fluwx:
132 :path: ".symlinks/plugins/fluwx/ios" 183 :path: ".symlinks/plugins/fluwx/ios"
  184 + foundation_fluttify:
  185 + :path: ".symlinks/plugins/foundation_fluttify/ios"
133 image_picker: 186 image_picker:
134 :path: ".symlinks/plugins/image_picker/ios" 187 :path: ".symlinks/plugins/image_picker/ios"
135 install_plugin: 188 install_plugin:
@@ -162,10 +215,19 @@ EXTERNAL SOURCES: @@ -162,10 +215,19 @@ EXTERNAL SOURCES:
162 :path: ".symlinks/plugins/webview_flutter/ios" 215 :path: ".symlinks/plugins/webview_flutter/ios"
163 216
164 SPEC CHECKSUMS: 217 SPEC CHECKSUMS:
  218 + AMap3DMap: fc7c911f5cf079d544ad7faec256c9554cbbb202
  219 + amap_core_fluttify: bc2e4245c6a6d869727ed16b009a9fa3dbefcf4a
  220 + amap_location_fluttify: b273a9b719a7f877ba426d1c6aeadd520e0bf7b6
  221 + amap_map_fluttify: 176c1c6f07f59564a0e7da0e30dada7da56b99aa
  222 + amap_search_fluttify: 1654f7c14dd5e690561812dc76576d4fdabeacfb
  223 + AMapFoundation: 3638198dfa40be54648570c3520edefad288286b
  224 + AMapLocation: a46c30d9930d0f3a3bd21139d8f845d10ac3f01d
  225 + AMapSearch: a048bcca3bf0b8083345070e1f193f814bd8dc01
165 audioplayers: 84f968cea3f2deab00ec4f8ff53358b3c0b3992c 226 audioplayers: 84f968cea3f2deab00ec4f8ff53358b3c0b3992c
166 Bugly: fd066c75c4a0eca1440f9b6a84bd37d51bfc85ac 227 Bugly: fd066c75c4a0eca1440f9b6a84bd37d51bfc85ac
167 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467 228 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
168 contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca 229 contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca
  230 + core_location_fluttify: 24cc9dcd986ac7059916632d2cb3babb1568ff61
169 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 231 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
170 easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730 232 easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
171 Flutter: 0e3d915762c693b495b44d77113d4970485de6ec 233 Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
@@ -177,6 +239,7 @@ SPEC CHECKSUMS: @@ -177,6 +239,7 @@ SPEC CHECKSUMS:
177 fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b 239 fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b
178 fluwx: 07a55ed66bf3a4961e836a2a411b02dcada32902 240 fluwx: 07a55ed66bf3a4961e836a2a411b02dcada32902
179 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a 241 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
  242 + foundation_fluttify: 0c45145e3fad1fb99188e4979daed5b24cd9b278
180 image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09 243 image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09
181 install_plugin: a13e7ddd2bab0c701b48cd359c26d0394125b6fb 244 install_plugin: a13e7ddd2bab0c701b48cd359c26d0394125b6fb
182 package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 245 package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
@@ -175,6 +175,7 @@ @@ -175,6 +175,7 @@
175 9705A1C41CF9048500538489 /* Embed Frameworks */, 175 9705A1C41CF9048500538489 /* Embed Frameworks */,
176 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 176 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
177 9B9871E299FA5648CFE77D1A /* [CP] Embed Pods Frameworks */, 177 9B9871E299FA5648CFE77D1A /* [CP] Embed Pods Frameworks */,
  178 + 90026E17DA6CEBB932F17F57 /* [CP] Copy Pods Resources */,
178 ); 179 );
179 buildRules = ( 180 buildRules = (
180 ); 181 );
@@ -257,6 +258,24 @@ @@ -257,6 +258,24 @@
257 shellPath = /bin/sh; 258 shellPath = /bin/sh;
258 shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 259 shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
259 }; 260 };
  261 + 90026E17DA6CEBB932F17F57 /* [CP] Copy Pods Resources */ = {
  262 + isa = PBXShellScriptBuildPhase;
  263 + buildActionMask = 2147483647;
  264 + files = (
  265 + );
  266 + inputPaths = (
  267 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh",
  268 + "${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle",
  269 + );
  270 + name = "[CP] Copy Pods Resources";
  271 + outputPaths = (
  272 + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle",
  273 + );
  274 + runOnlyForDeploymentPostprocessing = 0;
  275 + shellPath = /bin/sh;
  276 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
  277 + showEnvVarsInLog = 0;
  278 + };
260 9740EEB61CF901F6004384FC /* Run Script */ = { 279 9740EEB61CF901F6004384FC /* Run Script */ = {
261 isa = PBXShellScriptBuildPhase; 280 isa = PBXShellScriptBuildPhase;
262 buildActionMask = 2147483647; 281 buildActionMask = 2147483647;
@@ -42,6 +42,8 @@ @@ -42,6 +42,8 @@
42 <string>weixinULAPI</string> 42 <string>weixinULAPI</string>
43 <string>wechat</string> 43 <string>wechat</string>
44 <string>weixin</string> 44 <string>weixin</string>
  45 + <string>iosamap</string>
  46 + <string>amapuri</string>
45 </array> 47 </array>
46 <key>LSRequiresIPhoneOS</key> 48 <key>LSRequiresIPhoneOS</key>
47 <true/> 49 <true/>
@@ -92,6 +94,6 @@ @@ -92,6 +94,6 @@
92 <key>XG_ACCESS_KEY</key> 94 <key>XG_ACCESS_KEY</key>
93 <string>INUIMFK21WGH</string> 95 <string>INUIMFK21WGH</string>
94 <key>io.flutter.embedded_views_preview</key> 96 <key>io.flutter.embedded_views_preview</key>
95 - <true/> 97 + <string>YES</string>
96 </dict> 98 </dict>
97 </plist> 99 </plist>
1 import 'dart:io'; 1 import 'dart:io';
2 2
  3 +import 'package:amap_map_fluttify/amap_map_fluttify.dart';
3 import 'package:common_utils/common_utils.dart'; 4 import 'package:common_utils/common_utils.dart';
4 import 'package:dio/dio.dart'; 5 import 'package:dio/dio.dart';
5 import 'package:fluro/fluro.dart'; 6 import 'package:fluro/fluro.dart';
@@ -67,9 +68,9 @@ Future<void> main() async { @@ -67,9 +68,9 @@ Future<void> main() async {
67 ChangeNotifierProvider<CouponProvider>( 68 ChangeNotifierProvider<CouponProvider>(
68 create: (_) => CouponProvider(), 69 create: (_) => CouponProvider(),
69 ), 70 ),
70 - // ChangeNotifierProvider<UploadImageProvider>(  
71 - // create: (_) => UploadImageProvider(),  
72 - // ), 71 + ChangeNotifierProvider<UploadImageProvider>(
  72 + create: (_) => UploadImageProvider(),
  73 + ),
73 ChangeNotifierProvider<BaseIndoProvider>( 74 ChangeNotifierProvider<BaseIndoProvider>(
74 create: (_) => BaseIndoProvider(), 75 create: (_) => BaseIndoProvider(),
75 ), 76 ),
@@ -77,7 +78,12 @@ Future<void> main() async { @@ -77,7 +78,12 @@ Future<void> main() async {
77 child: MyApp(), 78 child: MyApp(),
78 )); 79 ));
79 }); 80 });
  81 + await AmapService.instance.init(
  82 + iosKey: 'e373581528f8fd901c01dfbda236159e',
  83 + androidKey: 'dbced781d0acd36184d5b4b54da7188d');
80 84
  85 + /// 如果你觉得引擎的日志太多, 可以关闭Fluttify引擎的日志
  86 + await enableFluttifyLog(false); // 关闭log
81 FlutterBugly.init(androidAppId: "f71a313f42", iOSAppId: "3089e4587e"); 87 FlutterBugly.init(androidAppId: "f71a313f42", iOSAppId: "3089e4587e");
82 }); 88 });
83 } 89 }
@@ -113,7 +119,7 @@ class MyAppState extends State<MyApp> { @@ -113,7 +119,7 @@ class MyAppState extends State<MyApp> {
113 doOnIOS: true, 119 doOnIOS: true,
114 universalLink: "https://xt04.colorcun.com/link/OneKey/"); 120 universalLink: "https://xt04.colorcun.com/link/OneKey/");
115 var result = await isWeChatInstalled; 121 var result = await isWeChatInstalled;
116 - if (result != null && result) { 122 + if (result != null && result) {
117 App.isInstallWx = true; 123 App.isInstallWx = true;
118 } else { 124 } else {
119 App.isInstallWx = false; 125 App.isInstallWx = false;
  1 +import 'dart:io';
  2 +
1 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
2 import 'package:flutter_screenutil/flutter_screenutil.dart'; 4 import 'package:flutter_screenutil/flutter_screenutil.dart';
  5 +import 'package:image_picker/image_picker.dart';
  6 +import 'package:one_key/models/upload_img_model.dart';
3 import 'package:one_key/pages/create_store/video_widget.dart'; 7 import 'package:one_key/pages/create_store/video_widget.dart';
  8 +import 'package:one_key/pages/online_check/photo_view_wiget.dart';
4 import 'package:one_key/provider/upload_img_provider.dart'; 9 import 'package:one_key/provider/upload_img_provider.dart';
5 import 'package:one_key/res/colors.dart'; 10 import 'package:one_key/res/colors.dart';
  11 +import 'package:one_key/utils/dialog_util.dart';
  12 +import 'package:one_key/utils/misc.dart';
6 import 'package:one_key/utils/navigator_util.dart'; 13 import 'package:one_key/utils/navigator_util.dart';
  14 +import 'package:one_key/utils/upload_image_util.dart';
  15 +import 'package:one_key/utils/utils.dart';
  16 +import 'package:one_key/widgets/h_empty_view.dart';
7 import 'package:one_key/widgets/round_button.dart'; 17 import 'package:one_key/widgets/round_button.dart';
8 import 'package:one_key/widgets/system_app_bar.dart'; 18 import 'package:one_key/widgets/system_app_bar.dart';
9 import 'package:one_key/widgets/v_empty_view.dart'; 19 import 'package:one_key/widgets/v_empty_view.dart';
  20 +import 'package:permission_handler/permission_handler.dart';
10 import 'package:provider/provider.dart'; 21 import 'package:provider/provider.dart';
11 22
12 class CreateStorePage extends StatefulWidget { 23 class CreateStorePage extends StatefulWidget {
@@ -19,6 +30,9 @@ class CreateStorePage extends StatefulWidget { @@ -19,6 +30,9 @@ class CreateStorePage extends StatefulWidget {
19 class _CreateStorePageState extends State<CreateStorePage> { 30 class _CreateStorePageState extends State<CreateStorePage> {
20 ScrollController _controller; 31 ScrollController _controller;
21 List<Map> roomType = []; 32 List<Map> roomType = [];
  33 + final picker = ImagePicker();
  34 +
  35 + String storeAddress = '选择地址';
22 36
23 @override 37 @override
24 void initState() { 38 void initState() {
@@ -52,7 +66,7 @@ class _CreateStorePageState extends State<CreateStorePage> { @@ -52,7 +66,7 @@ class _CreateStorePageState extends State<CreateStorePage> {
52 return Column( 66 return Column(
53 crossAxisAlignment: CrossAxisAlignment.start, 67 crossAxisAlignment: CrossAxisAlignment.start,
54 children: [ 68 children: [
55 - Text('2.您的店铺名称是?', 69 + Text('1.您的店铺名称是?',
56 style: TextStyle( 70 style: TextStyle(
57 fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)), 71 fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)),
58 VEmptyView(30), 72 VEmptyView(30),
@@ -87,7 +101,239 @@ class _CreateStorePageState extends State<CreateStorePage> { @@ -87,7 +101,239 @@ class _CreateStorePageState extends State<CreateStorePage> {
87 onEditingComplete: () { 101 onEditingComplete: () {
88 FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘 102 FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
89 }, 103 },
90 - keyboardType: TextInputType.number, 104 + keyboardType: TextInputType.text,
  105 + )
  106 + ],
  107 + );
  108 + }
  109 +
  110 + //查看大图
  111 + _showPhotoView(BuildContext context, int index, List imgs,
  112 + {isShow = false, List dashName}) async {
  113 + // if (imgs.length == 1 &&
  114 + // imgs[0] ==
  115 + // 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') {
  116 + // imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png';
  117 + // }
  118 + Utils.setBarStatus(false, color: Colors.black);
  119 + dynamic result = await showGeneralDialog(
  120 + context: context,
  121 + barrierDismissible: false,
  122 + // barrierColor: Colors.red,
  123 + barrierLabel:
  124 + MaterialLocalizations.of(context).modalBarrierDismissLabel,
  125 + transitionDuration: const Duration(milliseconds: 150),
  126 + pageBuilder: (BuildContext context, Animation animation,
  127 + Animation secondaryAnimation) {
  128 + Widget child = Stack(
  129 + children: <Widget>[
  130 + PhotoPreview(
  131 + initialIndex: index,
  132 + photoList: imgs,
  133 + isShow: isShow,
  134 + dashName: dashName)
  135 + ],
  136 + );
  137 + return child;
  138 + });
  139 + Utils.setBarStatus(true, color: Colors.white);
  140 + }
  141 +
  142 + ///#相机拍照,单图选择
  143 + Future _getFromPictureOrCamera(String title, UploadImgModel imgModel,
  144 + imageSource, UploadImageProvider model) async {
  145 + final pickedFile = await picker.getImage(source: imageSource);
  146 + setState(() {
  147 + if (pickedFile != null) {
  148 + imgModel.file = File(pickedFile.path);
  149 + imgModel.process = 0.01;
  150 + } else {
  151 + print('No image selected.');
  152 + }
  153 + });
  154 + if (pickedFile != null) {
  155 + model.imgSizeTouxiang = 64;
  156 + model.touxiang.qiniuUrl = null;
  157 + UploadImageUtil().startUploadOnly(
  158 + context, File(pickedFile.path), title == '头像' ? 0 : 1, true, model);
  159 + }
  160 + }
  161 +
  162 + // ///门头照片
  163 + // Widget _imageWidget(String title, UploadImgModel uploadImgModel,
  164 + // double imgSize, double radius) {
  165 + // return Consumer<UploadImageProvider>(builder: (context, model, _) {
  166 + // return InkWell(
  167 + // onTap: () {
  168 + // Utils.getPickPermission(context, () {
  169 + // _getFromPictureOrCamera(
  170 + // title, uploadImgModel, ImageSource.gallery, model);
  171 + // }, PermissionGroup.photos);
  172 + // },
  173 + // child: Container(
  174 + // height: ScreenUtil().setWidth(imgSize * 2),
  175 + // child: Row(
  176 + // mainAxisAlignment: MainAxisAlignment.spaceBetween,
  177 + // children: [
  178 + // Text(
  179 + // title,
  180 + // textAlign: TextAlign.left,
  181 + // style: TextStyle(
  182 + // color: MyColours.color_333333,
  183 + // fontWeight: FontWeight.bold,
  184 + // fontSize: ScreenUtil().setSp(34)),
  185 + // ),
  186 + // Spacer(),
  187 + // Stack(
  188 + // children: [
  189 + // InkWell(
  190 + // onTap: () {
  191 + // double process;
  192 + // String qiniuUrl;
  193 + // List<String> tempList = [];
  194 +
  195 + // process = model.erweima.process;
  196 + // qiniuUrl = model.erweima.qiniuUrl;
  197 +
  198 + // if (qiniuUrl != null && qiniuUrl != '') {
  199 + // tempList.add(qiniuUrl);
  200 +
  201 + // ///没有上传完成的不可以点击
  202 + // _showPhotoView(context, 0, tempList);
  203 + // } else {
  204 + // Utils.getPickPermission(context, () {
  205 + // _getFromPictureOrCamera(title, uploadImgModel,
  206 + // ImageSource.gallery, model);
  207 + // }, PermissionGroup.photos);
  208 + // }
  209 + // },
  210 + // child: ClipRRect(
  211 + // borderRadius: BorderRadius.circular(
  212 + // ScreenUtil().setWidth(radius)),
  213 + // child: uploadImgModel.file == null
  214 + // ? uploadImgModel.qiniuUrl != null &&
  215 + // uploadImgModel.qiniuUrl != ''
  216 + // ? Image.network(
  217 + // uploadImgModel.qiniuUrl,
  218 + // fit: BoxFit.cover,
  219 + // width: ScreenUtil().setWidth(imgSize * 2),
  220 + // height: ScreenUtil().setWidth(imgSize * 2),
  221 + // )
  222 + // : Image.asset(
  223 + // Utils.getImgPath(
  224 + // title == '头像' ? 'touxiang' : 'erweima'),
  225 + // fit: BoxFit.cover,
  226 + // width: ScreenUtil().setWidth(imgSize * 2),
  227 + // height: ScreenUtil().setWidth(imgSize * 2),
  228 + // )
  229 + // : Image.file(
  230 + // uploadImgModel.file,
  231 + // fit: BoxFit.cover,
  232 + // width: ScreenUtil().setWidth(imgSize * 2),
  233 + // height: ScreenUtil().setWidth(imgSize * 2),
  234 + // ),
  235 + // ),
  236 + // ),
  237 + // (uploadImgModel.file != null) &&
  238 + // uploadImgModel.process != 1 &&
  239 + // uploadImgModel.process != 0.01
  240 + // ? Container(
  241 + // width: ScreenUtil().setWidth(imgSize * 2),
  242 + // height: ScreenUtil().setWidth(imgSize * 2),
  243 + // decoration: BoxDecoration(
  244 + // borderRadius: BorderRadius.circular(radius),
  245 + // color: Color.fromRGBO(0, 0, 0, 0.6)),
  246 + // child: Center(
  247 + // child: Text('上传中',
  248 + // style:
  249 + // TextStyle(color: MyColours.color_999999)),
  250 + // ),
  251 + // )
  252 + // : Container(),
  253 + // ],
  254 + // ),
  255 + // HEmptyView(30),
  256 + // Image.asset(
  257 + // "assets/arr_right_gray.png",
  258 + // width: ScreenUtil().setWidth(14),
  259 + // height: ScreenUtil().setWidth(22),
  260 + // )
  261 + // ],
  262 + // ),
  263 + // ));
  264 + // });
  265 + // }
  266 +
  267 + //店铺地址
  268 + Widget _addressWidget() {
  269 + return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
  270 + Text('2.您的店铺位置在?',
  271 + style: TextStyle(
  272 + fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)),
  273 + VEmptyView(30),
  274 + InkWell(
  275 + onTap: () async {
  276 + Utils.getPickPermission(context, () async {
  277 + Map address = await NavigatorUtil.goMapChoicePointPage(context);
  278 + if (address != null) {
  279 + setState(() {
  280 + storeAddress = address['address'];
  281 + // 'address':
  282 + // 'lat':
  283 + // 'lng
  284 + });
  285 + }
  286 + }, PermissionGroup.location);
  287 + // bool canContacts =
  288 + // await requestPermission(PermissionGroup.locationWhenInUse);
  289 + // print(canContacts);
  290 + },
  291 + child: Text(storeAddress),
  292 + )
  293 + ]);
  294 + }
  295 +
  296 + //职位
  297 + Widget _positionWidget() {
  298 + return Column(
  299 + crossAxisAlignment: CrossAxisAlignment.start,
  300 + children: [
  301 + Text('3.您在店铺中担任什么职位?',
  302 + style: TextStyle(
  303 + fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)),
  304 + VEmptyView(30),
  305 + TextField(
  306 + // textAlignVertical: TextAlignVertical.bottom,
  307 + maxLines: 1,
  308 + // //光标颜色
  309 + // cursorColor:
  310 + // widget.isSelect ? Colors.white : MyColours.color_199095,
  311 + //输入文本的样式
  312 + style: TextStyle(
  313 + fontSize: ScreenUtil().setSp(28),
  314 + ),
  315 + // focusNode: _codeNode,
  316 + decoration: InputDecoration(
  317 + contentPadding: EdgeInsets.symmetric(
  318 + vertical: ScreenUtil().setWidth(6),
  319 + horizontal: ScreenUtil().setWidth(20)),
  320 + border: OutlineInputBorder(),
  321 + hintText: '请输入职位',
  322 + hintStyle: TextStyle(
  323 + color: MyColours.color_999999,
  324 + fontSize: ScreenUtil().setSp(28),
  325 + ),
  326 + // enabledBorder: new UnderlineInputBorder(
  327 + // borderSide: BorderSide.none,
  328 + // ),
  329 + focusedBorder: OutlineInputBorder(
  330 + borderSide: BorderSide(color: MyColours.color_199095)),
  331 + ),
  332 + onChanged: (value) {},
  333 + onEditingComplete: () {
  334 + FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
  335 + },
  336 + keyboardType: TextInputType.text,
91 ) 337 )
92 ], 338 ],
93 ); 339 );
@@ -98,7 +344,7 @@ class _CreateStorePageState extends State<CreateStorePage> { @@ -98,7 +344,7 @@ class _CreateStorePageState extends State<CreateStorePage> {
98 return Column( 344 return Column(
99 crossAxisAlignment: CrossAxisAlignment.start, 345 crossAxisAlignment: CrossAxisAlignment.start,
100 children: [ 346 children: [
101 - Text('3.请上传您店铺环境的照片或者视频', 347 + Text('4.请上传您店铺环境的照片或者视频',
102 style: TextStyle( 348 style: TextStyle(
103 fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)), 349 fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)),
104 VEmptyView(30), 350 VEmptyView(30),
@@ -134,15 +380,26 @@ class _CreateStorePageState extends State<CreateStorePage> { @@ -134,15 +380,26 @@ class _CreateStorePageState extends State<CreateStorePage> {
134 child: Column( 380 child: Column(
135 crossAxisAlignment: CrossAxisAlignment.start, 381 crossAxisAlignment: CrossAxisAlignment.start,
136 children: [ 382 children: [
137 - Text('1.您的店内有哪些包间类型?',  
138 - style: TextStyle(  
139 - fontSize: ScreenUtil().setSp(30),  
140 - fontWeight: FontWeight.bold)),  
141 - VEmptyView(30),  
142 - Column(children: _roomTypeWidget()), 383 + // Text('1.您的店内有哪些包间类型?',
  384 + // style: TextStyle(
  385 + // fontSize: ScreenUtil().setSp(30),
  386 + // fontWeight: FontWeight.bold)),
  387 + // VEmptyView(30),
  388 + // Column(children: _roomTypeWidget()),
143 _storeNameWidget(), 389 _storeNameWidget(),
144 VEmptyView(30), 390 VEmptyView(30),
  391 + _addressWidget(),
  392 + VEmptyView(30),
  393 + _positionWidget(),
  394 + // VEmptyView(30),
  395 + // _imageWidget(
  396 + // '门头照片',
  397 + // _uploadImageProvider.touxiang,
  398 + // _uploadImageProvider.imgSizeTouxiang,
  399 + // 64),
  400 + VEmptyView(30),
145 _storeEnvironmentWidget(), 401 _storeEnvironmentWidget(),
  402 +
146 VEmptyView(30), 403 VEmptyView(30),
147 ]))), 404 ]))),
148 RoundButton( 405 RoundButton(
  1 +import 'package:amap_map_fluttify/amap_map_fluttify.dart';
  2 +import 'package:flutter/cupertino.dart';
  3 +
  4 +import 'package:flutter/material.dart';
  5 +import 'package:amap_search_fluttify/amap_search_fluttify.dart';
  6 +import 'package:flutter_screenutil/flutter_screenutil.dart';
  7 +import 'package:one_key/utils/dialog_util.dart';
  8 +import 'package:one_key/utils/misc.dart';
  9 +import 'package:one_key/utils/navigator_util.dart';
  10 +import 'package:one_key/widgets/system_app_bar.dart';
  11 +import 'package:permission_handler/permission_handler.dart';
  12 +// import 'package:demo/resources/custom_text_style.dart';
  13 +// import 'package:demo/utils/misc.dart';
  14 +
  15 +// import 'package:demo/widgets/network_state/page_loading.dart';
  16 +
  17 +class MapChoicePointPage extends StatefulWidget {
  18 + @override
  19 + _MapChoicePointPageState createState() => _MapChoicePointPageState();
  20 +}
  21 +
  22 +class _MapChoicePointPageState extends State<MapChoicePointPage> {
  23 + AmapController _controller;
  24 + List<Poi> poiList;
  25 + static List<PoiModel> list = new List();
  26 + static List<PoiModel> searchlist = new List();
  27 + PoiModel poiModel;
  28 + String keyword = "";
  29 + String address = "";
  30 + bool isloading = true;
  31 +
  32 + double latitude = 39.684670899;
  33 + double longitude = 118.17630045;
  34 +
  35 + @override
  36 + void initState() {
  37 + super.initState();
  38 + WidgetsBinding.instance.addPostFrameCallback((_) async {
  39 + _requestLocationPermission();
  40 + });
  41 + }
  42 +
  43 + /// 获取定位权限
  44 + _requestLocationPermission() async {
  45 + final location = await AmapLocation.instance.fetchLocation(
  46 + // needAddress: true,
  47 + // mode: LocationAccuracy.High,
  48 + // timeout: Duration(seconds: 10)
  49 + );
  50 +
  51 + if (location.city == null || location.city == '') //网络不好,定位失败
  52 + {
  53 + // App.sp.setString("lat", "39.684670899");
  54 + // App.sp.setString("lng", "118.17630045");
  55 + // App.sp.setString("city", "唐山市");
  56 +
  57 + } else {
  58 + _controller.setCenterCoordinate(
  59 + LatLng(location.latLng.latitude, location.latLng.longitude));
  60 +
  61 + // App.sp.setString("city", location.city);
  62 + // App.sp.setString("address", location.address);
  63 +
  64 + }
  65 + }
  66 +
  67 + @override
  68 + Widget build(BuildContext context) {
  69 + return Scaffold(
  70 + resizeToAvoidBottomPadding: false, //防止底部布局被顶起
  71 + appBar: SystemAppBar(
  72 + '选择位置信息',
  73 + onTap: () {
  74 + Navigator.pop(context);
  75 + },
  76 + ),
  77 +
  78 + body: Column(
  79 + children: <Widget>[
  80 + Theme(
  81 + data: new ThemeData(
  82 + primaryColor: Color(0xFFFFCA28), hintColor: Color(0xFFFFCA28)),
  83 + child: Container(
  84 + color: Color(0xFFFFCA28),
  85 + padding: EdgeInsets.all(5),
  86 + child: Container(
  87 + height: 36,
  88 + margin: EdgeInsets.only(left: 5, right: 5, bottom: 5),
  89 + child: TextField(
  90 + style: TextStyle(fontSize: 16, letterSpacing: 1.0),
  91 + controller: TextEditingController.fromValue(TextEditingValue(
  92 + // 设置内容
  93 + text: keyword,
  94 + selection: TextSelection.fromPosition(TextPosition(
  95 + affinity: TextAffinity.downstream,
  96 + offset: keyword?.length ?? 0)),
  97 + // 保持光标在最后
  98 + )),
  99 + decoration: InputDecoration(
  100 + border: OutlineInputBorder(
  101 + borderRadius: BorderRadius.all(Radius.circular(40)),
  102 + ),
  103 + hintText: '输入关键字',
  104 + hintStyle:
  105 + TextStyle(color: Color(0xFFBEBEBE), fontSize: 14),
  106 + contentPadding:
  107 + const EdgeInsets.symmetric(vertical: 8, horizontal: 1),
  108 + prefixIcon: Icon(
  109 + Icons.search,
  110 + color: Colors.grey,
  111 + size: 20,
  112 + ),
  113 + suffixIcon: IconButton(
  114 + icon: Icon(
  115 + Icons.clear,
  116 + color: Colors.grey,
  117 + size: 20,
  118 + ),
  119 + onPressed: () {
  120 + keyword = "";
  121 + setState(() {});
  122 + },
  123 + ),
  124 + fillColor: Colors.white,
  125 + filled: true,
  126 + ),
  127 +
  128 + inputFormatters: [],
  129 + //内容改变的回调
  130 + onChanged: (text) {
  131 + print('change $text');
  132 + keyword = text;
  133 + },
  134 + //内容提交(按回车)的回调
  135 + onSubmitted: (text) {
  136 + print('submit $text');
  137 + // 触发关闭弹出来的键盘。
  138 + keyword = text;
  139 + setState(() {
  140 + isloading = true;
  141 + FocusScope.of(context).requestFocus(FocusNode());
  142 + });
  143 +
  144 + searchAroundAddress(text.toString());
  145 + },
  146 + //按回车时调用
  147 + onEditingComplete: () {
  148 + print('onEditingComplete');
  149 + },
  150 + ),
  151 + ),
  152 + ),
  153 + ),
  154 + Container(
  155 + height: 300,
  156 + child: Stack(
  157 + children: <Widget>[
  158 + AmapView(
  159 + showZoomControl: false,
  160 + centerCoordinate: LatLng(latitude, longitude),
  161 + maskDelay: Duration(milliseconds: 500),
  162 + zoomLevel: 16,
  163 + onMapCreated: (controller) async {
  164 + _controller = controller;
  165 + // if (await requestPermission(PermissionGroup.location)) {
  166 + // await controller.showMyLocation(true);
  167 + // await controller?.showLocateControl(true);
  168 + // final latLng = await _controller?.getLocation(
  169 + // delay: Duration(seconds: 2));
  170 + // await enableFluttifyLog(false); // 关闭log
  171 + // _loadData(latLng);
  172 + // } else {
  173 + // //无权限
  174 + // _showLocPemWidget();
  175 + // }
  176 + },
  177 + onMapMoveEnd: (MapMove move) async {
  178 + _loadData(move.latLng);
  179 + },
  180 + ),
  181 + Center(
  182 + child: Icon(
  183 + Icons.place,
  184 + size: 36.0,
  185 + color: Color(0xFFFF0000),
  186 + ),
  187 + ),
  188 + ],
  189 + ),
  190 + ),
  191 + Expanded(
  192 + flex: 1,
  193 + child: Visibility(
  194 + visible: !isloading,
  195 + maintainSize: false,
  196 + maintainSemantics: false,
  197 + maintainInteractivity: false,
  198 + replacement: Center(
  199 + child: CupertinoActivityIndicator(),
  200 + ),
  201 + child: ListView.builder(
  202 + itemCount: list.length,
  203 + itemBuilder: (BuildContext context, int position) {
  204 + print("itemBuilder" + list.length.toString());
  205 + PoiModel item = list[position];
  206 + return InkWell(
  207 + child: Column(
  208 + children: <Widget>[
  209 + Container(
  210 + margin:
  211 + EdgeInsets.only(top: 8, bottom: 5, left: 10),
  212 + child: Row(
  213 + children: <Widget>[
  214 + Icon(
  215 + Icons.place,
  216 + size: 20.0,
  217 + color: position == 0
  218 + ? Colors.green
  219 + : Colors.grey,
  220 + ),
  221 + Text(item.title,
  222 + style: TextStyle(
  223 + fontSize: 16,
  224 + color: position == 0
  225 + ? Colors.green
  226 + : Color(0xFF787878)))
  227 + ],
  228 + ),
  229 + ),
  230 + Container(
  231 + margin:
  232 + EdgeInsets.only(top: 5, bottom: 5, left: 18),
  233 + alignment: Alignment.centerLeft,
  234 + child: Text(
  235 + item.address,
  236 + style: TextStyle(
  237 + fontSize: 14,
  238 + color: Color(0xFF646464),
  239 + ),
  240 + ),
  241 + ),
  242 + Divider(
  243 + height: 1,
  244 + )
  245 + ],
  246 + ),
  247 + onTap: () async {
  248 + // await _controller.setCenterCoordinate(
  249 + // LatLng(item.latLng.latitude, item.latLng.longitude),
  250 + // zoomLevel: 16);
  251 + Navigator.pop(context, {
  252 + 'address': item.address,
  253 + 'lat': item.latLng.latitude,
  254 + 'lng': item.latLng.longitude
  255 + });
  256 + },
  257 + );
  258 + }),
  259 + ),
  260 + ),
  261 + ],
  262 + ),
  263 + );
  264 + }
  265 +
  266 + void _loadData(LatLng latLng) async {
  267 + setState(() {
  268 + isloading = true;
  269 + });
  270 +
  271 + /// 逆地理编码(坐标转地址)
  272 + ReGeocode reGeocodeList = await AmapSearch.instance.searchReGeocode(
  273 + latLng,
  274 + );
  275 +
  276 + print(await reGeocodeList.toFutureString());
  277 + address = await reGeocodeList.formatAddress;
  278 +
  279 + final poiList = await AmapSearch.instance.searchKeyword(
  280 + address.toString(),
  281 + city: "西安",
  282 + );
  283 +
  284 + poiModel = new PoiModel("当前位置", address, latLng);
  285 + list.clear();
  286 + list.add(poiModel);
  287 + for (var poi in poiList) {
  288 + String title = await poi.title;
  289 + String cityName = await poi.cityName;
  290 + String provinceName = await poi.provinceName;
  291 + String address = await poi.address;
  292 + LatLng latLng = await poi.latLng;
  293 +
  294 + list.add(new PoiModel(
  295 + title.toString(),
  296 + provinceName.toString() + cityName.toString() + address.toString(),
  297 + latLng));
  298 + }
  299 +
  300 + setState(() {
  301 + isloading = false;
  302 + });
  303 + }
  304 +
  305 + void searchAroundAddress(String text) async {
  306 + final poiList = await AmapSearch.instance.searchKeyword(
  307 + text,
  308 + city: "西安",
  309 + );
  310 +
  311 + list.clear();
  312 + list.add(poiModel);
  313 + for (var poi in poiList) {
  314 + String title = await poi.title;
  315 + LatLng latLng = await poi.latLng;
  316 + String cityName = await poi.cityName;
  317 + String provinceName = await poi.provinceName;
  318 + String address = await poi.address;
  319 + list.add(new PoiModel(
  320 + title.toString(),
  321 + provinceName.toString() + cityName.toString() + address.toString(),
  322 + latLng));
  323 + }
  324 + setState(() {
  325 + isloading = false;
  326 + FocusScope.of(context).requestFocus(FocusNode());
  327 + });
  328 + }
  329 +}
  330 +
  331 +class PoiModel {
  332 + LatLng latLng;
  333 + String title;
  334 + String address;
  335 +
  336 + PoiModel(this.title, this.address, this.latLng);
  337 +}
@@ -5,6 +5,7 @@ import 'package:flutter_screenutil/screenutil.dart'; @@ -5,6 +5,7 @@ import 'package:flutter_screenutil/screenutil.dart';
5 import 'package:one_key/app.dart'; 5 import 'package:one_key/app.dart';
6 import 'package:one_key/res/colors.dart'; 6 import 'package:one_key/res/colors.dart';
7 import 'package:one_key/utils/navigator_util.dart'; 7 import 'package:one_key/utils/navigator_util.dart';
  8 +import 'package:one_key/utils/utils.dart';
8 import 'package:one_key/widgets/h_empty_view.dart'; 9 import 'package:one_key/widgets/h_empty_view.dart';
9 import 'package:one_key/widgets/round_button.dart'; 10 import 'package:one_key/widgets/round_button.dart';
10 import 'package:one_key/widgets/system_app_bar.dart'; 11 import 'package:one_key/widgets/system_app_bar.dart';
@@ -27,6 +28,9 @@ class _BindingPhoneState extends State<BindingPhone> { @@ -27,6 +28,9 @@ class _BindingPhoneState extends State<BindingPhone> {
27 //倒计时数值 28 //倒计时数值
28 var countdownTime = 0; 29 var countdownTime = 0;
29 30
  31 + String phone;
  32 + String code;
  33 +
30 @override 34 @override
31 void initState() { 35 void initState() {
32 super.initState(); 36 super.initState();
@@ -43,6 +47,7 @@ class _BindingPhoneState extends State<BindingPhone> { @@ -43,6 +47,7 @@ class _BindingPhoneState extends State<BindingPhone> {
43 47
44 ///倒计时方法 48 ///倒计时方法
45 startCountdown() { 49 startCountdown() {
  50 + Utils.showToast('短信验证码已发送,请注意查收');
46 countdownTime = 60; 51 countdownTime = 60;
47 final call = (timer) { 52 final call = (timer) {
48 setState(() { 53 setState(() {
@@ -62,7 +67,7 @@ class _BindingPhoneState extends State<BindingPhone> { @@ -62,7 +67,7 @@ class _BindingPhoneState extends State<BindingPhone> {
62 backgroundColor: Colors.white, 67 backgroundColor: Colors.white,
63 appBar: SystemAppBar( 68 appBar: SystemAppBar(
64 '', 69 '',
65 - leftTitle: '上一步', 70 + // leftTitle: '上一步',
66 onTap: () { 71 onTap: () {
67 Navigator.pop(context); 72 Navigator.pop(context);
68 }, 73 },
@@ -132,7 +137,9 @@ class _BindingPhoneState extends State<BindingPhone> { @@ -132,7 +137,9 @@ class _BindingPhoneState extends State<BindingPhone> {
132 ScreenUtil().setWidth(30), 137 ScreenUtil().setWidth(30),
133 ScreenUtil().setWidth(28)), 138 ScreenUtil().setWidth(28)),
134 ), 139 ),
135 - onChanged: (_) {}, 140 + onChanged: (value) {
  141 + phone = value;
  142 + },
136 onEditingComplete: () { 143 onEditingComplete: () {
137 FocusScope.of(context).requestFocus( 144 FocusScope.of(context).requestFocus(
138 FocusNode()); //点击空白处隐藏键盘 145 FocusNode()); //点击空白处隐藏键盘
@@ -186,7 +193,9 @@ class _BindingPhoneState extends State<BindingPhone> { @@ -186,7 +193,9 @@ class _BindingPhoneState extends State<BindingPhone> {
186 ScreenUtil().setWidth(30), 193 ScreenUtil().setWidth(30),
187 ScreenUtil().setWidth(28)), 194 ScreenUtil().setWidth(28)),
188 ), 195 ),
189 - onChanged: (_) {}, 196 + onChanged: (value) {
  197 + code = value;
  198 + },
190 onEditingComplete: () { 199 onEditingComplete: () {
191 FocusScope.of(context).requestFocus( 200 FocusScope.of(context).requestFocus(
192 FocusNode()); //点击空白处隐藏键盘 201 FocusNode()); //点击空白处隐藏键盘
@@ -226,9 +235,23 @@ class _BindingPhoneState extends State<BindingPhone> { @@ -226,9 +235,23 @@ class _BindingPhoneState extends State<BindingPhone> {
226 fontSize: 34, 235 fontSize: 34,
227 isBold: false, 236 isBold: false,
228 onPressed: () { 237 onPressed: () {
  238 + if (phone == null || phone.trim().length == 0) {
  239 + Utils.showToast('请输入手机号码');
  240 + return;
  241 + }
  242 + if (code == null || code.trim().length == 0) {
  243 + Utils.showToast('请输入验证码');
  244 + return;
  245 + }
  246 +
  247 + //接口确认验证码是否正确
  248 +
  249 + // 正确
229 //真正登录成功标志 250 //真正登录成功标志
230 App.sp.setBool("isLogin", true); 251 App.sp.setBool("isLogin", true);
231 NavigatorUtil.goIfNeedCreateStorePage(context); 252 NavigatorUtil.goIfNeedCreateStorePage(context);
  253 + //错误
  254 + // Utils.showToast('您输入的验证码有误,请重新输入');
232 }, 255 },
233 ) 256 )
234 257
@@ -23,7 +23,7 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { @@ -23,7 +23,7 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> {
23 backgroundColor: Colors.white, 23 backgroundColor: Colors.white,
24 appBar: SystemAppBar( 24 appBar: SystemAppBar(
25 '', 25 '',
26 - leftTitle: '上一步', 26 + // leftTitle: '上一步',
27 onTap: () { 27 onTap: () {
28 Navigator.pop(context); 28 Navigator.pop(context);
29 }, 29 },
@@ -33,7 +33,10 @@ class ContactModel { @@ -33,7 +33,10 @@ class ContactModel {
33 uploadLocalContact(BuildContext context) async { 33 uploadLocalContact(BuildContext context) async {
34 bool isUpload = App.sp.getBool("isUpload") ?? false; 34 bool isUpload = App.sp.getBool("isUpload") ?? false;
35 if (isUpload) return; 35 if (isUpload) return;
36 - bool authority = await requestContactPermission(); 36 + bool authority = false;
  37 + if (!await checkContactPermission()) {
  38 + authority = await requestContactPermission();
  39 + }
37 if (authority) { 40 if (authority) {
38 Iterable<Contact> contacts = 41 Iterable<Contact> contacts =
39 await ContactsService.getContacts(withThumbnails: false); 42 await ContactsService.getContacts(withThumbnails: false);
@@ -63,8 +66,7 @@ class ContactModel { @@ -63,8 +66,7 @@ class ContactModel {
63 data: params, 66 data: params,
64 options: Options( 67 options: Options(
65 method: Method.post, 68 method: Method.post,
66 - contentType: "application/x-www-form-urlencoded"  
67 - )) 69 + contentType: "application/x-www-form-urlencoded"))
68 .catchError((error) { 70 .catchError((error) {
69 print(error.toString()); 71 print(error.toString());
70 }); 72 });
@@ -12,6 +12,7 @@ import 'package:one_key/pages/coupon/coupon_history_page.dart'; @@ -12,6 +12,7 @@ import 'package:one_key/pages/coupon/coupon_history_page.dart';
12 import 'package:one_key/pages/coupon/coupon_page.dart'; 12 import 'package:one_key/pages/coupon/coupon_page.dart';
13 import 'package:one_key/pages/coupon/coupon_selecet_page.dart'; 13 import 'package:one_key/pages/coupon/coupon_selecet_page.dart';
14 import 'package:one_key/pages/create_store/create_store.dart'; 14 import 'package:one_key/pages/create_store/create_store.dart';
  15 +import 'package:one_key/pages/create_store/map_choice_point.dart';
15 import 'package:one_key/pages/create_store/play_video.dart'; 16 import 'package:one_key/pages/create_store/play_video.dart';
16 import 'package:one_key/pages/detail/notebook_detail_change_page.dart'; 17 import 'package:one_key/pages/detail/notebook_detail_change_page.dart';
17 import 'package:one_key/pages/home/home_page.dart'; 18 import 'package:one_key/pages/home/home_page.dart';
@@ -312,3 +313,12 @@ var playVideoPageHandler = new Handler( @@ -312,3 +313,12 @@ var playVideoPageHandler = new Handler(
312 String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first); 313 String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first);
313 return PlayVideoPage(url: urlStr); 314 return PlayVideoPage(url: urlStr);
314 }); 315 });
  316 +
  317 +///位置选择页 地图
  318 +var mapChoicePointPageHandler = new Handler(
  319 + handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
  320 + // CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
  321 + // FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
  322 + // String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first);
  323 + return MapChoicePointPage();
  324 +});
@@ -32,6 +32,7 @@ class Routes { @@ -32,6 +32,7 @@ class Routes {
32 static String if_need_create_store = "/if_need_create_store"; //是否选择新建店铺页面 32 static String if_need_create_store = "/if_need_create_store"; //是否选择新建店铺页面
33 static String create_store = "/create_store"; //新建店铺 33 static String create_store = "/create_store"; //新建店铺
34 static String play_video = "/play_video"; //播放视频页 34 static String play_video = "/play_video"; //播放视频页
  35 + static String map_choice_point = "/map_choice_point"; //地图位置选择页
35 36
36 37
37 static void configureRoutes(FluroRouter router) { 38 static void configureRoutes(FluroRouter router) {
@@ -68,7 +69,11 @@ class Routes { @@ -68,7 +69,11 @@ class Routes {
68 router.define(binding_phone, handler: bindingPhonePageHandler); 69 router.define(binding_phone, handler: bindingPhonePageHandler);
69 router.define(if_need_create_store, handler: ifNeedCreateStorePageHandler); 70 router.define(if_need_create_store, handler: ifNeedCreateStorePageHandler);
70 router.define(create_store, handler: createStorePageHandler); 71 router.define(create_store, handler: createStorePageHandler);
71 - router.define(play_video, handler: playVideoPageHandler); 72 + router.define(play_video, handler: playVideoPageHandler);
  73 + router.define(map_choice_point, handler: mapChoicePointPageHandler);
  74 +
  75 +
  76 +
72 77
73 78
74 79
@@ -217,11 +217,15 @@ class NavigatorUtil { @@ -217,11 +217,15 @@ class NavigatorUtil {
217 /// 播放视频页 217 /// 播放视频页
218 static Future<dynamic> goPlayVideoPage(BuildContext context, 218 static Future<dynamic> goPlayVideoPage(BuildContext context,
219 {replace = false, String urlStr}) { 219 {replace = false, String urlStr}) {
220 - return _navigateTo(  
221 - context,  
222 - "${Routes.play_video}?urlStr=${FluroConvertUtils.fluroCnParamsEncode(urlStr)}",  
223 - replace: replace,  
224 - transitionType:TransitionType.materialFullScreenDialog  
225 - ); 220 + return _navigateTo(context,
  221 + "${Routes.play_video}?urlStr=${FluroConvertUtils.fluroCnParamsEncode(urlStr)}",
  222 + replace: replace,
  223 + transitionType: TransitionType.materialFullScreenDialog);
  224 + }
  225 +
  226 + /// 地图选择页
  227 + static Future<dynamic> goMapChoicePointPage(BuildContext context,
  228 + {replace = false, String urlStr}) {
  229 + return _navigateTo(context, "${Routes.map_choice_point}", replace: replace);
226 } 230 }
227 } 231 }
@@ -47,6 +47,8 @@ class Utils { @@ -47,6 +47,8 @@ class Utils {
47 String title = '相册'; 47 String title = '相册';
48 if (permissionGroup == PermissionGroup.camera) { 48 if (permissionGroup == PermissionGroup.camera) {
49 title = '相机'; 49 title = '相机';
  50 + } else if (permissionGroup == PermissionGroup.location) {
  51 + title = '位置';
50 } 52 }
51 PermissionStatus status = await permissionStatus(permissionGroup); 53 PermissionStatus status = await permissionStatus(permissionGroup);
52 if (status == PermissionStatus.neverAskAgain) { 54 if (status == PermissionStatus.neverAskAgain) {
1 # Generated by pub 1 # Generated by pub
2 # See https://dart.dev/tools/pub/glossary#lockfile 2 # See https://dart.dev/tools/pub/glossary#lockfile
3 packages: 3 packages:
  4 + amap_core_fluttify:
  5 + dependency: transitive
  6 + description:
  7 + name: amap_core_fluttify
  8 + url: "https://pub.flutter-io.cn"
  9 + source: hosted
  10 + version: "0.9.5"
  11 + amap_location_fluttify:
  12 + dependency: transitive
  13 + description:
  14 + name: amap_location_fluttify
  15 + url: "https://pub.flutter-io.cn"
  16 + source: hosted
  17 + version: "0.14.0+1"
  18 + amap_map_fluttify:
  19 + dependency: "direct main"
  20 + description:
  21 + name: amap_map_fluttify
  22 + url: "https://pub.flutter-io.cn"
  23 + source: hosted
  24 + version: "0.25.0"
  25 + amap_search_fluttify:
  26 + dependency: transitive
  27 + description:
  28 + name: amap_search_fluttify
  29 + url: "https://pub.flutter-io.cn"
  30 + source: hosted
  31 + version: "0.11.0"
4 analyzer: 32 analyzer:
5 dependency: transitive 33 dependency: transitive
6 description: 34 description:
@@ -204,6 +232,13 @@ packages: @@ -204,6 +232,13 @@ packages:
204 url: "https://pub.flutter-io.cn" 232 url: "https://pub.flutter-io.cn"
205 source: hosted 233 source: hosted
206 version: "2.1.1" 234 version: "2.1.1"
  235 + core_location_fluttify:
  236 + dependency: transitive
  237 + description:
  238 + name: core_location_fluttify
  239 + url: "https://pub.flutter-io.cn"
  240 + source: hosted
  241 + version: "0.2.4"
207 crypto: 242 crypto:
208 dependency: transitive 243 dependency: transitive
209 description: 244 description:
@@ -401,6 +436,13 @@ packages: @@ -401,6 +436,13 @@ packages:
401 url: "https://pub.flutter-io.cn" 436 url: "https://pub.flutter-io.cn"
402 source: hosted 437 source: hosted
403 version: "2.1.0" 438 version: "2.1.0"
  439 + foundation_fluttify:
  440 + dependency: transitive
  441 + description:
  442 + name: foundation_fluttify
  443 + url: "https://pub.flutter-io.cn"
  444 + source: hosted
  445 + version: "0.8.12"
404 front_end: 446 front_end:
405 dependency: transitive 447 dependency: transitive
406 description: 448 description:
@@ -534,6 +576,13 @@ packages: @@ -534,6 +576,13 @@ packages:
534 url: "https://pub.flutter-io.cn" 576 url: "https://pub.flutter-io.cn"
535 source: hosted 577 source: hosted
536 version: "0.3.19" 578 version: "0.3.19"
  579 + latlng:
  580 + dependency: transitive
  581 + description:
  582 + name: latlng
  583 + url: "https://pub.flutter-io.cn"
  584 + source: hosted
  585 + version: "0.0.2"
537 logging: 586 logging:
538 dependency: transitive 587 dependency: transitive
539 description: 588 description:
@@ -40,7 +40,7 @@ dependencies: @@ -40,7 +40,7 @@ dependencies:
40 fluttertoast: ^3.1.3 40 fluttertoast: ^3.1.3
41 # 权限管理 41 # 权限管理
42 permission_handler: ^4.4.0 42 permission_handler: ^4.4.0
43 - # permission_handler: ^5.0.1+1 43 + # permission_handler: ^5.0.1+1 ^6.1.1 4.4.0
44 # 文件系统访问 44 # 文件系统访问
45 path_provider: ^1.6.5 45 path_provider: ^1.6.5
46 ## 官方image组件扩展,支持多种图片效果展示 46 ## 官方image组件扩展,支持多种图片效果展示
@@ -107,6 +107,8 @@ dependencies: @@ -107,6 +107,8 @@ dependencies:
107 flutter_ijkplayer: 0.3.5+1 107 flutter_ijkplayer: 0.3.5+1
108 # 视频信息获取 108 # 视频信息获取
109 video_compress: ^2.1.1 109 video_compress: ^2.1.1
  110 + #高德地图
  111 + amap_map_fluttify: 0.25.0
110 112
111 113
112 114