Showing
16 changed files
with
813 additions
and
29 deletions
| @@ -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( |
lib/pages/create_store/map_choice_point.dart
0 → 100644
| 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 |
-
Please register or login to post a comment