Bläddra i källkod

7.30 高德定位测试

huxiaoqiang 4 år sedan
förälder
incheckning
348639e080

+ 1 - 15
lib/beans/address_bean_entity.dart

@@ -4,15 +4,12 @@ import 'package:bbyyy/generated/json/base/json_field.dart';
 class AddressBeanEntity with JsonConvert<AddressBeanEntity> {
 	String status;
 	AddressBeanRegeocode regeocode;
-	String info;
-	String infocode;
 }
 
 class AddressBeanRegeocode with JsonConvert<AddressBeanRegeocode> {
 	@JSONField(name: "formatted_address")
 	String formattedAddress;
 	AddressBeanRegeocodeAddressComponent addressComponent;
-	List<AddressBeanRegeocodeAois> aois;
 	List<AddressBeanRegeocodePois> pois;
 }
 
@@ -27,25 +24,14 @@ class AddressBeanRegeocodeAddressComponent with JsonConvert<AddressBeanRegeocode
 	String citycode;
 }
 
-class AddressBeanRegeocodeAois with JsonConvert<AddressBeanRegeocodeAois> {
-	String area;
-	String type;
-	String id;
-	String location;
-	String adcode;
-	String name;
-	String distance;
-}
-
 class AddressBeanRegeocodePois with JsonConvert<AddressBeanRegeocodePois> {
 	String id;
 	String direction;
-	List<dynamic> businessarea;
+	String businessarea;
 	String address;
 	String poiweight;
 	String name;
 	String location;
 	String distance;
-	String tel;
 	String type;
 }

+ 2 - 0
lib/beans/store_bean_entity.dart

@@ -49,4 +49,6 @@ class StoreBeanDataData with JsonConvert<StoreBeanDataData> {
 	bool shopCommissionPercent;
 	@JSONField(name: "owner_pay_platform_fee")
 	bool ownerPayPlatformFee;
+	double longitude;
+	double latitude;
 }

+ 1 - 54
lib/generated/json/address_bean_entity_helper.dart

@@ -7,12 +7,6 @@ addressBeanEntityFromJson(AddressBeanEntity data, Map<String, dynamic> json) {
 	if (json['regeocode'] != null) {
 		data.regeocode = AddressBeanRegeocode().fromJson(json['regeocode']);
 	}
-	if (json['info'] != null) {
-		data.info = json['info'].toString();
-	}
-	if (json['infocode'] != null) {
-		data.infocode = json['infocode'].toString();
-	}
 	return data;
 }
 
@@ -20,8 +14,6 @@ Map<String, dynamic> addressBeanEntityToJson(AddressBeanEntity entity) {
 	final Map<String, dynamic> data = new Map<String, dynamic>();
 	data['status'] = entity.status;
 	data['regeocode'] = entity.regeocode?.toJson();
-	data['info'] = entity.info;
-	data['infocode'] = entity.infocode;
 	return data;
 }
 
@@ -32,9 +24,6 @@ addressBeanRegeocodeFromJson(AddressBeanRegeocode data, Map<String, dynamic> jso
 	if (json['addressComponent'] != null) {
 		data.addressComponent = AddressBeanRegeocodeAddressComponent().fromJson(json['addressComponent']);
 	}
-	if (json['aois'] != null) {
-		data.aois = (json['aois'] as List).map((v) => AddressBeanRegeocodeAois().fromJson(v)).toList();
-	}
 	if (json['pois'] != null) {
 		data.pois = (json['pois'] as List).map((v) => AddressBeanRegeocodePois().fromJson(v)).toList();
 	}
@@ -45,7 +34,6 @@ Map<String, dynamic> addressBeanRegeocodeToJson(AddressBeanRegeocode entity) {
 	final Map<String, dynamic> data = new Map<String, dynamic>();
 	data['formatted_address'] = entity.formattedAddress;
 	data['addressComponent'] = entity.addressComponent?.toJson();
-	data['aois'] =  entity.aois?.map((v) => v.toJson())?.toList();
 	data['pois'] =  entity.pois?.map((v) => v.toJson())?.toList();
 	return data;
 }
@@ -91,43 +79,6 @@ Map<String, dynamic> addressBeanRegeocodeAddressComponentToJson(AddressBeanRegeo
 	return data;
 }
 
-addressBeanRegeocodeAoisFromJson(AddressBeanRegeocodeAois data, Map<String, dynamic> json) {
-	if (json['area'] != null) {
-		data.area = json['area'].toString();
-	}
-	if (json['type'] != null) {
-		data.type = json['type'].toString();
-	}
-	if (json['id'] != null) {
-		data.id = json['id'].toString();
-	}
-	if (json['location'] != null) {
-		data.location = json['location'].toString();
-	}
-	if (json['adcode'] != null) {
-		data.adcode = json['adcode'].toString();
-	}
-	if (json['name'] != null) {
-		data.name = json['name'].toString();
-	}
-	if (json['distance'] != null) {
-		data.distance = json['distance'].toString();
-	}
-	return data;
-}
-
-Map<String, dynamic> addressBeanRegeocodeAoisToJson(AddressBeanRegeocodeAois entity) {
-	final Map<String, dynamic> data = new Map<String, dynamic>();
-	data['area'] = entity.area;
-	data['type'] = entity.type;
-	data['id'] = entity.id;
-	data['location'] = entity.location;
-	data['adcode'] = entity.adcode;
-	data['name'] = entity.name;
-	data['distance'] = entity.distance;
-	return data;
-}
-
 addressBeanRegeocodePoisFromJson(AddressBeanRegeocodePois data, Map<String, dynamic> json) {
 	if (json['id'] != null) {
 		data.id = json['id'].toString();
@@ -136,7 +87,7 @@ addressBeanRegeocodePoisFromJson(AddressBeanRegeocodePois data, Map<String, dyna
 		data.direction = json['direction'].toString();
 	}
 	if (json['businessarea'] != null) {
-		data.businessarea = (json['businessarea'] as List).map((v) => v).toList().cast<dynamic>();
+		data.businessarea = json['businessarea'].toString();
 	}
 	if (json['address'] != null) {
 		data.address = json['address'].toString();
@@ -153,9 +104,6 @@ addressBeanRegeocodePoisFromJson(AddressBeanRegeocodePois data, Map<String, dyna
 	if (json['distance'] != null) {
 		data.distance = json['distance'].toString();
 	}
-	if (json['tel'] != null) {
-		data.tel = json['tel'].toString();
-	}
 	if (json['type'] != null) {
 		data.type = json['type'].toString();
 	}
@@ -172,7 +120,6 @@ Map<String, dynamic> addressBeanRegeocodePoisToJson(AddressBeanRegeocodePois ent
 	data['name'] = entity.name;
 	data['location'] = entity.location;
 	data['distance'] = entity.distance;
-	data['tel'] = entity.tel;
 	data['type'] = entity.type;
 	return data;
 }

+ 0 - 10
lib/generated/json/base/json_convert_content.dart

@@ -315,8 +315,6 @@ class JsonConvert<T> {
 				return addressBeanRegeocodeFromJson(data as AddressBeanRegeocode, json) as T;
 			case AddressBeanRegeocodeAddressComponent:
 				return addressBeanRegeocodeAddressComponentFromJson(data as AddressBeanRegeocodeAddressComponent, json) as T;
-			case AddressBeanRegeocodeAois:
-				return addressBeanRegeocodeAoisFromJson(data as AddressBeanRegeocodeAois, json) as T;
 			case AddressBeanRegeocodePois:
 				return addressBeanRegeocodePoisFromJson(data as AddressBeanRegeocodePois, json) as T;
 			case TemplateBeanEntity:
@@ -536,8 +534,6 @@ class JsonConvert<T> {
 				return addressBeanRegeocodeToJson(data as AddressBeanRegeocode);
 			case AddressBeanRegeocodeAddressComponent:
 				return addressBeanRegeocodeAddressComponentToJson(data as AddressBeanRegeocodeAddressComponent);
-			case AddressBeanRegeocodeAois:
-				return addressBeanRegeocodeAoisToJson(data as AddressBeanRegeocodeAois);
 			case AddressBeanRegeocodePois:
 				return addressBeanRegeocodePoisToJson(data as AddressBeanRegeocodePois);
 			case TemplateBeanEntity:
@@ -858,9 +854,6 @@ class JsonConvert<T> {
 		if(type == (AddressBeanRegeocodeAddressComponent).toString()){
 			return AddressBeanRegeocodeAddressComponent().fromJson(json);
 		}
-		if(type == (AddressBeanRegeocodeAois).toString()){
-			return AddressBeanRegeocodeAois().fromJson(json);
-		}
 		if(type == (AddressBeanRegeocodePois).toString()){
 			return AddressBeanRegeocodePois().fromJson(json);
 		}
@@ -1188,9 +1181,6 @@ class JsonConvert<T> {
 		if(<AddressBeanRegeocodeAddressComponent>[] is M){
 			return data.map<AddressBeanRegeocodeAddressComponent>((e) => AddressBeanRegeocodeAddressComponent().fromJson(e)).toList() as M;
 		}
-		if(<AddressBeanRegeocodeAois>[] is M){
-			return data.map<AddressBeanRegeocodeAois>((e) => AddressBeanRegeocodeAois().fromJson(e)).toList() as M;
-		}
 		if(<AddressBeanRegeocodePois>[] is M){
 			return data.map<AddressBeanRegeocodePois>((e) => AddressBeanRegeocodePois().fromJson(e)).toList() as M;
 		}

+ 12 - 0
lib/generated/json/store_bean_entity_helper.dart

@@ -123,6 +123,16 @@ storeBeanDataDataFromJson(StoreBeanDataData data, Map<String, dynamic> json) {
 	if (json['owner_pay_platform_fee'] != null) {
 		data.ownerPayPlatformFee = json['owner_pay_platform_fee'];
 	}
+	if (json['longitude'] != null) {
+		data.longitude = json['longitude'] is String
+				? double.tryParse(json['longitude'])
+				: json['longitude'].toDouble();
+	}
+	if (json['latitude'] != null) {
+		data.latitude = json['latitude'] is String
+				? double.tryParse(json['latitude'])
+				: json['latitude'].toDouble();
+	}
 	return data;
 }
 
@@ -152,5 +162,7 @@ Map<String, dynamic> storeBeanDataDataToJson(StoreBeanDataData entity) {
 	data['ban_start_date'] = entity.banStartDate;
 	data['shop_commission_percent'] = entity.shopCommissionPercent;
 	data['owner_pay_platform_fee'] = entity.ownerPayPlatformFee;
+	data['longitude'] = entity.longitude;
+	data['latitude'] = entity.latitude;
 	return data;
 }

+ 1 - 0
lib/main.dart

@@ -160,6 +160,7 @@ class MyApp extends StatelessWidget with WidgetsBindingObserver {
     ]);
     return RefreshConfiguration(
       child: MaterialApp(
+        // debugShowMaterialGrid: true,
         navigatorKey: navigatorKey,
         theme: ThemeData(fontFamily: 'PingFang'),
         debugShowCheckedModeBanner: false,

+ 1 - 1
lib/my_tools/map_util.dart

@@ -55,7 +55,7 @@ class MapUtil {
   }
 
   /// 苹果地图
-  static Future<bool> _gotoAppleMap(longitude, latitude) async {
+  static Future<bool> gotoAppleMap(longitude, latitude) async {
     var url = 'http://maps.apple.com/?&daddr=$latitude,$longitude';
 
     bool canLaunchUrl = await canLaunch(url);

+ 72 - 43
lib/paegs/gang_page/create_a_gang_page/create_a_gang_page.dart

@@ -4,6 +4,7 @@ import 'dart:io';
 import 'package:bbyyy/beans/annual_fee_order_bean_entity.dart';
 import 'package:bbyyy/beans/commodity_category_bean_entity.dart';
 import 'package:bbyyy/beans/fixed_price_bean_entity.dart';
+import 'package:bbyyy/beans/poi_bean_entity.dart';
 import 'package:bbyyy/beans/upload_image_bean_entity.dart';
 import 'package:bbyyy/https/MyDio.dart';
 import 'package:bbyyy/https/my_request.dart';
@@ -16,6 +17,7 @@ import 'package:bbyyy/my_tools/my_colors.dart';
 import 'package:bbyyy/my_tools/my_cookie.dart';
 import 'package:bbyyy/my_tools/my_tools.dart';
 import 'package:bbyyy/my_tools/my_views.dart';
+import 'package:bbyyy/paegs/map_demo/map_demo_page.dart';
 import 'package:bbyyy/paegs/pay_page/order_information_page.dart';
 import 'package:flustars/flustars.dart';
 import 'package:flutter/cupertino.dart';
@@ -24,7 +26,6 @@ import 'package:flutter/services.dart';
 import 'package:flutter_svg/flutter_svg.dart';
 import 'package:image_cropper/image_cropper.dart';
 import 'package:image_picker/image_picker.dart';
-import 'package:permission_handler/permission_handler.dart';
 
 class CreateAGangPage extends StatefulWidget {
   @override
@@ -55,6 +56,7 @@ class _CreateAGangPageState extends State<CreateAGangPage> {
   int commissionCommissionType = 0; //店主收取佣金方式  直接收取固定金额 = 0 按照比例收取 = 1
   String feePricing;
   int feeType;
+  PoiBeanPois poi;
 
   @override
   void initState() {
@@ -282,35 +284,57 @@ class _CreateAGangPageState extends State<CreateAGangPage> {
                             child: Row(
                               children: [
                                 MyViews().myText('货帮地址', MyColors.c333333, 15),
-                                Expanded(
-                                  child: TextField(
-                                    controller: _shopAddress,
-                                    cursorColor: MyColors.cFF4233,
-                                    textAlign: TextAlign.end,
-                                    cursorWidth: 1.0,
-                                    onTap: () {},
-                                    decoration: InputDecoration(
-                                      border: InputBorder.none,
-                                      disabledBorder: InputBorder.none,
-                                      enabledBorder: InputBorder.none,
-                                      focusedBorder: InputBorder.none,
-                                      isDense: true,
-                                      hintText: '请输入…',
-                                      hintStyle: TextStyle(
+                                // Expanded(
+                                //   child: TextField(
+                                //     controller: _shopAddress,
+                                //     cursorColor: MyColors.cFF4233,
+                                //     textAlign: TextAlign.end,
+                                //     cursorWidth: 1.0,
+                                //     onTap: () {},
+                                //     decoration: InputDecoration(
+                                //       border: InputBorder.none,
+                                //       disabledBorder: InputBorder.none,
+                                //       enabledBorder: InputBorder.none,
+                                //       focusedBorder: InputBorder.none,
+                                //       isDense: true,
+                                //       hintText: '请输入…',
+                                //       hintStyle: TextStyle(
+                                //           color: MyColors.c999999,
+                                //           fontSize: 14),
+                                //       contentPadding: const EdgeInsets.fromLTRB(
+                                //           14, 4.5, 8, 4.5),
+                                //     ),
+                                //     maxLines: 1,
+                                //     style: TextStyle(
+                                //         color: MyColors.c333333,
+                                //         fontSize: 14,
+                                //         height: 1.3,
+                                //         letterSpacing: 0.2),
+                                //     keyboardType: TextInputType.text,
+                                //     onChanged: (t) {},
+                                //   ),
+                                // )
+                                GestureDetector(
+                                  child: Container(
+                                    padding: EdgeInsets.all(8),
+                                    child: Text(
+                                      poi==null?'选址地址':'${poi.pname}${poi.cityname}${poi.adname}${poi.address}',
+                                      style: TextStyle(
                                           color: MyColors.c999999,
                                           fontSize: 14),
-                                      contentPadding: const EdgeInsets.fromLTRB(
-                                          14, 4.5, 8, 4.5),
                                     ),
-                                    maxLines: 1,
-                                    style: TextStyle(
-                                        color: MyColors.c333333,
-                                        fontSize: 14,
-                                        height: 1.3,
-                                        letterSpacing: 0.2),
-                                    keyboardType: TextInputType.text,
-                                    onChanged: (t) {},
                                   ),
+                                  onTap: () {
+                                    MyTools().toPage(context, MapDemoPage(), (then){
+                                      if(then is PoiBeanPois){
+                                        setState(() {
+                                          print(json.encode(then));
+                                          poi = then;
+                                        });
+                                      }
+                                    });
+                                  },
+                                  behavior: HitTestBehavior.translucent,
                                 )
                               ],
                               mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -939,8 +963,8 @@ class _CreateAGangPageState extends State<CreateAGangPage> {
                           upload(_image, (r, hE) {
                             if (!hE) {
                               UploadImageBeanEntity data =
-                              UploadImageBeanEntity().fromJson(
-                                  json.decode(r.data.toString()));
+                                  UploadImageBeanEntity()
+                                      .fromJson(json.decode(r.data.toString()));
                               createAGang(data);
                             }
                           }, (e) {});
@@ -1028,6 +1052,10 @@ class _CreateAGangPageState extends State<CreateAGangPage> {
   }
 
   Future<void> createAGang(UploadImageBeanEntity data) async {
+    if(poi==null){
+      showToast('请选择地址');
+      return;
+    }
     var object = {
       'name': _controller.text,
       'picture': data.data[0].path,
@@ -1042,25 +1070,26 @@ class _CreateAGangPageState extends State<CreateAGangPage> {
       'shop_commission_threshold': 0,
       'shop_commission_pricing': 0,
       'shop_commission_percent': commissionCommissionType == 1,
-      'address': _shopAddress.text.toString(),
       'mobile': _contactNumber.text.toString(),
       'introduction': _storeIntroduction.text.toString(),
     };
-    if(private&&innerTrade){
-      object['shop_commission_threshold'] = int.parse(_startingPoint.text.toString());
+    if (private && innerTrade) {
+      object['shop_commission_threshold'] =
+          int.parse(_startingPoint.text.toString());
       object['shop_commission_pricing'] = commissionCommissionType == 1
           ? double.parse(_amountCharged.text.toString()) / 100
           : double.parse(_amountCharged.text.toString());
       object['shop_commission_percent'] = commissionCommissionType == 1;
     }
-    if (!private && MyCookie().location != null) {
-      object['longitude'] = MyCookie().location.longitude;
-      object['latitude'] = MyCookie().location.latitude;
-      object['auto_address'] = MyCookie().location.formattedAddress;
-      object['province'] = MyCookie().location.province;
-      object['city'] = MyCookie().location.city;
-      object['county'] = MyCookie().location.district;
-    } 
+    if (poi!=null) {
+      object['longitude'] = double.parse(poi.location.split(',')[0]);
+      object['latitude'] = double.parse(poi.location.split(',')[1]);
+      object['auto_address'] = '${poi.pname}${poi.cityname}${poi.adname}${poi.address}';
+      object['address'] = '${poi.pname}${poi.cityname}${poi.adname}${poi.address}';
+      object['province'] = poi.pname;
+      object['city'] = poi.cityname;
+      object['county'] = poi.adname;
+    }
     MyDio().save({'key': 'shop', 'object': object}, (response, hasError) {
       if (!hasError) {
         if (typeIndex == 0) {
@@ -1362,13 +1391,13 @@ class _CreateAGangPageState extends State<CreateAGangPage> {
       if (_startingPoint.text.isEmpty) {
         showToast('请填写起收金额');
         return;
-      }else{
-        try{
-          if(double.parse(_startingPoint.text.toString())>100){
+      } else {
+        try {
+          if (double.parse(_startingPoint.text.toString()) > 100) {
             showToast('起收金额不能大于100元');
             return;
           }
-        }catch(e){
+        } catch (e) {
           showToast('请填写正确的起收金额');
           return;
         }

+ 131 - 24
lib/paegs/gang_page/gang_in_page/gang_in_page.dart

@@ -1,5 +1,6 @@
 import 'dart:async';
 import 'dart:convert';
+import 'dart:io';
 import 'dart:math';
 
 import 'package:azlistview/azlistview.dart';
@@ -15,6 +16,7 @@ import 'package:bbyyy/my_tools/const.dart';
 import 'package:bbyyy/my_tools/dims.dart';
 import 'package:bbyyy/my_tools/easy_loading/easy_loading.dart';
 import 'package:bbyyy/my_tools/event_bus.dart';
+import 'package:bbyyy/my_tools/map_util.dart';
 import 'package:bbyyy/my_tools/my_colors.dart';
 import 'package:bbyyy/my_tools/my_cookie.dart';
 import 'package:bbyyy/my_tools/my_tools.dart';
@@ -409,31 +411,38 @@ class _GangInPageState extends State<GangInPage> {
                                 ],
                                 crossAxisAlignment: CrossAxisAlignment.center,
                               ),
-                              Row(
-                                children: [
-                                  SvgPicture.asset(
-                                    'images/svg/地址.svg',
-                                    color: MyColors.c666666,
-                                    height: 12,
-                                    width: 12,
-                                  ),
-                                  Container(
-                                    width: 5,
-                                  ),
-                                  Expanded(
-                                    child: Text(
-                                      store != null && store.address.isNotEmpty
-                                          ? store.address
-                                          : '暂无',
-                                      style: TextStyle(
-                                          color: MyColors.c666666,
-                                          fontSize: 11),
-                                      maxLines: 1,
-                                      overflow: TextOverflow.ellipsis,
-                                      softWrap: true,
+                              GestureDetector(
+                                onTap: (){
+                                  mapNavigationPopup();
+                                },
+                                behavior:
+                                HitTestBehavior.translucent,
+                                child: Row(
+                                  children: [
+                                    SvgPicture.asset(
+                                      'images/svg/地址.svg',
+                                      color: MyColors.c666666,
+                                      height: 12,
+                                      width: 12,
                                     ),
-                                  ),
-                                ],
+                                    Container(
+                                      width: 5,
+                                    ),
+                                    Expanded(
+                                      child: Text(
+                                        store != null && store.address.isNotEmpty
+                                            ? store.address
+                                            : '暂无',
+                                        style: TextStyle(
+                                            color: MyColors.c666666,
+                                            fontSize: 11),
+                                        maxLines: 1,
+                                        overflow: TextOverflow.ellipsis,
+                                        softWrap: true,
+                                      ),
+                                    ),
+                                  ],
+                                ),
                               ),
                             ],
                             crossAxisAlignment: CrossAxisAlignment.start,
@@ -1505,4 +1514,102 @@ class _GangInPageState extends State<GangInPage> {
       }
     }, (error) {});
   }
+
+  void mapNavigationPopup() {
+    showModalBottomSheet(
+        isScrollControlled: true,
+        shape: RoundedRectangleBorder(
+          //圆角
+          borderRadius: BorderRadius.vertical(top: Radius.circular(15)),
+        ),
+        builder: (BuildContext context) {
+          return AnimatedPadding(
+            //showModalBottomSheet 键盘弹出时自适应
+            padding: MediaQuery.of(context).viewInsets, //边距(必要)
+            duration: const Duration(milliseconds: 100), //时常 (必要)
+            child: Container(
+              // height: 180,
+              constraints: BoxConstraints(
+                minHeight: 90, //设置最小高度(必要)
+                maxHeight: MediaQuery.of(context).size.height / 1.5, //设置最大高度(必要)
+              ),
+              padding: EdgeInsets.only(top: 20, bottom: 20),
+              decoration: BoxDecoration(borderRadius: BorderRadius.vertical(top: Radius.circular(15)), color: Colors.white), //圆角
+              child: ListView(
+                padding: EdgeInsets.all(0),
+                shrinkWrap: true,
+                children: <Widget>[
+                  Column(
+                    mainAxisSize: MainAxisSize.min,
+                    mainAxisAlignment: MainAxisAlignment.start,
+                    crossAxisAlignment: CrossAxisAlignment.center,
+                    children: <Widget>[
+                      GestureDetector(
+                        onTap: (){
+                          MapUtil.gotoAMap(store.longitude, store.latitude);
+                        },
+                        behavior: HitTestBehavior.translucent,
+                        child: Container(
+                          height: 50,
+                          child: Column(
+                            children: [
+                              Text('高德地图',style: TextStyle(color: MyColors.c333333,fontSize: 16),),
+                              Container(height: 0.5,color: Colors.grey[200],)
+                            ],mainAxisAlignment: MainAxisAlignment.spaceAround,
+                          ),
+                        ),
+                      ),
+                      GestureDetector(onTap: (){
+                        MapUtil.gotoBaiduMap(store.longitude, store.latitude);
+                      },
+                        behavior: HitTestBehavior.translucent,
+                        child: Container(
+                          height: 50,
+                          child: Column(
+                            children: [
+                              Text('百度地图',style: TextStyle(color: MyColors.c333333,fontSize: 16),),
+                              Container(height: 0.5,color: Colors.grey[200],)
+                            ],mainAxisAlignment: MainAxisAlignment.spaceAround,
+                          ),
+                        ),
+                      ),
+                      GestureDetector(onTap: (){
+                        MapUtil.gotoTencentMap(store.longitude, store.latitude);
+                      },
+                        behavior: HitTestBehavior.translucent,
+                        child: Container(
+                          height: 50,
+                          child: Column(
+                            children: [
+                              Text('腾讯地图',style: TextStyle(color: MyColors.c333333,fontSize: 16),),
+                              Container(height: 0.5,color: Colors.grey[200],)
+                            ],mainAxisAlignment: MainAxisAlignment.spaceAround,
+                          ),
+                        ),
+                      ),
+                      if(Platform.isIOS)
+                      GestureDetector(
+                        onTap: (){
+                          MapUtil.gotoAppleMap(store.longitude, store.latitude);
+                        },
+                        behavior: HitTestBehavior.translucent,
+                        child: Container(
+                          height: 50,
+                          child: Column(
+                            children: [
+                              Text('苹果地图',style: TextStyle(color: MyColors.c333333,fontSize: 16),),
+                              Container(height: 0.5,color: Colors.grey[200],)
+                            ],mainAxisAlignment: MainAxisAlignment.spaceAround,
+                          ),
+                        ),
+                      ),
+                    ],
+                  )
+                ],
+              ),
+            ),
+          );
+        },
+        context: context);
+  }
 }

+ 180 - 10
lib/paegs/map_demo/map_demo_page.dart

@@ -2,8 +2,8 @@ import 'dart:convert';
 
 import 'package:amap_flutter_base/amap_flutter_base.dart';
 import 'package:amap_flutter_map/amap_flutter_map.dart';
+import 'package:bbyyy/beans/address_bean_entity.dart';
 import 'package:bbyyy/beans/poi_bean_entity.dart';
-import 'package:bbyyy/my_tools/map_util.dart';
 import 'package:bbyyy/my_tools/my_colors.dart';
 import 'package:bbyyy/my_tools/my_cookie.dart';
 import 'package:bbyyy/my_tools/my_tools.dart';
@@ -23,6 +23,10 @@ class _MapDemoPageState extends State<MapDemoPage> {
   TextEditingController _controller = TextEditingController();
   Map<String, Marker> _markers = <String, Marker>{};
   Widget _poiInfo;
+  List<PoiBeanPois> pois;
+  BitmapDescriptor _markerIcon;
+  PoiBeanPois poi;
+  bool searchMode = true;
 
   @override
   void initState() {
@@ -37,6 +41,9 @@ class _MapDemoPageState extends State<MapDemoPage> {
 
   @override
   Widget build(BuildContext context) {
+    if (null == _markerIcon) {
+      _markerIcon = BitmapDescriptor.fromIconPath('assets/地址.png');
+    }
     final AMapWidget map = AMapWidget(
       initialCameraPosition: _kInitialPosition,
       onMapCreated: onMapCreated,
@@ -48,12 +55,39 @@ class _MapDemoPageState extends State<MapDemoPage> {
         true,
       ),
       markers: Set<Marker>.of(_markers.values),
+      onTap: (LatLng latLng){
+        print('================|${latLng.latitude},${latLng.longitude}|===================');
+        markTheClickLocation(latLng);
+      },
     );
 
     return Scaffold(
       body: Column(
         children: [
-          MyViews().myAppBar('amap', context, []),
+          MyViews().myAppBar('选择地址', context, [
+            GestureDetector(
+              onTap: (){
+                setState(() {
+                  _markers.clear();
+                  pois?.clear();
+                  poi = null;
+                  searchMode = !searchMode;
+                  _mapController.moveCamera(CameraUpdate.newCameraPosition(CameraPosition(
+                    target: LatLng(MyCookie().location.latitude, MyCookie().location.longitude),
+                    zoom: 15,
+                  )));
+                });
+              },
+              behavior: HitTestBehavior.translucent,
+              child: Container(
+                margin: EdgeInsets.symmetric(vertical: 5,horizontal: 10),
+                child: Text(
+                  searchMode?'手动选择':'搜索选择',
+                  style: TextStyle(color: MyColors.c333333, fontSize: 14),
+                ),
+              ),
+            )
+          ]),
           Expanded(
             child: Stack(
               children: [
@@ -62,6 +96,7 @@ class _MapDemoPageState extends State<MapDemoPage> {
                   width: MediaQuery.of(context).size.width,
                   child: map,
                 ),
+                if(searchMode)
                 Container(
                   child: Row(
                     children: [
@@ -83,8 +118,7 @@ class _MapDemoPageState extends State<MapDemoPage> {
                                 isDense: true,
                                 contentPadding:
                                     const EdgeInsets.fromLTRB(14, 4.5, 8, 4.5)),
-                            maxLines: 1,
-                            style: TextStyle(
+                            maxLines: 1,                            style: TextStyle(
                                 color: MyColors.c333333,
                                 fontSize: 16,
                                 height: 1.3,
@@ -95,10 +129,11 @@ class _MapDemoPageState extends State<MapDemoPage> {
                       ),
                       GestureDetector(
                         onTap: () {
+                          MyTools().hideKeyboard(context);
                           inquirePOI();
                         },
                         child: Container(
-                          color: Colors.blue,
+                          color: MyColors.cFF4233,
                           child: Text(
                             '搜索',
                             style: TextStyle(color: Colors.white, fontSize: 18),
@@ -112,7 +147,52 @@ class _MapDemoPageState extends State<MapDemoPage> {
                   ),
                   color: Colors.white,
                   margin: EdgeInsets.symmetric(horizontal: 15, vertical: 30),
-                )
+                ),
+                if (poi != null)
+                  Container(
+                    margin: EdgeInsets.fromLTRB(
+                        12,
+                        MediaQuery.of(context).size.height - 200 - 12 - 45,
+                        12,
+                        12),
+                    width: double.infinity,
+                    height: 150,
+                    decoration: BoxDecoration(
+                        color: Colors.white,
+                        borderRadius: BorderRadius.circular(12),
+                        boxShadow: [
+                          BoxShadow(
+                            color: MyColors.c7FE1E1E1,
+                            blurRadius: 5.0,
+                          ),
+                        ]),
+                    child: Column(
+                      children: [
+                        Text(poi == null ? '' : poi.name),
+                        Text(poi == null ? '' : poi.address),
+                        GestureDetector(
+                          onTap: () {
+                            Navigator.pop(context, poi);
+                          },
+                          behavior: HitTestBehavior.translucent,
+                          child: Container(
+                            decoration: BoxDecoration(
+                                color: MyColors.cFF4233,
+                                borderRadius: BorderRadius.circular(20)),
+                            height: 40,
+                            width: 120,
+                            child: Text(
+                              '就是这里',
+                              style:
+                                  TextStyle(color: Colors.white, fontSize: 16),
+                            ),
+                            alignment: Alignment.center,
+                          ),
+                        )
+                      ],
+                      mainAxisAlignment: MainAxisAlignment.spaceAround,
+                    ),
+                  )
               ],
             ),
           ),
@@ -169,29 +249,34 @@ class _MapDemoPageState extends State<MapDemoPage> {
   }
 
   void inquirePOI() {
-     String v1 =
+    String v1 =
         'https://restapi.amap.com/v3/place/text?keywords=${_controller.text.toString()}&city=${MyCookie().location.city}&output=json&offset=25&page=1&key=5dcd9f0ed7d51aefb5b2f73dba1069cb&extensions=all';
     print(v1);
     Dio().get(v1).then((value) {
       print(value);
       PoiBeanEntity entity =
           PoiBeanEntity().fromJson(json.decode(value.toString()));
+      pois = entity.pois;
       entity.pois.forEach((element) {
         print(element.name);
         _markers[element.id] = Marker(
           position: LatLng(double.parse(element.location.split(',')[1]),
               double.parse(element.location.split(',')[0])),
-          icon: BitmapDescriptor.fromIconPath('images/地址.png'),
+          icon: _markerIcon,
           infoWindow: InfoWindow(title: element.name),
           onTap: (markerId) {
             print(markerId);
-            MapUtil.gotoAMap(double.parse(element.location.split(',')[0]),
-                double.parse(element.location.split(',')[1]));
+            // MapUtil.gotoAMap(double.parse(element.location.split(',')[0]),
+            //     double.parse(element.location.split(',')[1]));
+            setState(() {
+              poi = element;
+            });
           },
         );
       });
       setState(() {
         if (entity.pois.length != 0) {
+          showBottomSheet();
           _mapController
               .moveCamera(CameraUpdate.newCameraPosition(CameraPosition(
             target: LatLng(double.parse(entity.pois[0].location.split(',')[1]),
@@ -204,4 +289,89 @@ class _MapDemoPageState extends State<MapDemoPage> {
       });
     });
   }
+
+  //显示底部弹框的功能
+  void showBottomSheet() {
+    //用于在底部打开弹框的效果
+    showModalBottomSheet(
+        builder: (BuildContext context) {
+          //构建弹框中的内容
+          return Container(
+            child: ListView.builder(
+              padding: EdgeInsets.all(8),
+              itemBuilder: (BuildContext context, int index) {
+                return GestureDetector(
+                  onTap: () {
+                    _mapController.moveCamera(
+                        CameraUpdate.newCameraPosition(CameraPosition(
+                      target: LatLng(
+                          double.parse(pois[index].location.split(',')[1]),
+                          double.parse(pois[index].location.split(',')[0])),
+                      zoom: 15,
+                    )));
+                    Navigator.pop(context);
+
+                    setState(() {
+                      poi = pois[index];
+                    });
+                  },
+                  behavior: HitTestBehavior.translucent,
+                  child: Column(
+                    children: [
+                      Text(
+                        pois[index].name,
+                        style: TextStyle(fontSize: 16),
+                      ),
+                      Text(
+                        pois[index].address,
+                        style: TextStyle(fontSize: 12),
+                      ),
+                      Container(
+                        height: .5,
+                        color: Colors.grey[200],
+                        margin: EdgeInsets.symmetric(vertical: 10),
+                      )
+                    ],
+                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                  ),
+                );
+              },
+              itemCount: pois.length,
+            ),
+          );
+        },
+        context: context);
+  }
+
+  void markTheClickLocation(LatLng latLng) {
+    print('https://restapi.amap.com/v3/geocode/regeo?output=json&location=${latLng.longitude},${latLng.latitude}&key=5dcd9f0ed7d51aefb5b2f73dba1069cb&radius=10&extensions=all');
+    Dio()
+        .get(
+        'https://restapi.amap.com/v3/geocode/regeo?output=json&location=${latLng.longitude},${latLng.latitude}&key=5dcd9f0ed7d51aefb5b2f73dba1069cb&radius=10&extensions=all')
+        .then((value) {
+      print('value.toString()------------${value.toString()}');
+      AddressBeanEntity addressBeanEntity =
+      AddressBeanEntity().fromJson(json.decode(value.toString()));
+      poi = PoiBeanPois();
+      poi.location = '${latLng.longitude},${latLng.latitude}';
+      poi.pname = addressBeanEntity.regeocode.addressComponent.province;
+      poi.cityname = addressBeanEntity.regeocode.addressComponent.city;
+      poi.adname = addressBeanEntity.regeocode.addressComponent.district;
+      poi.address = addressBeanEntity.regeocode.pois[0].address;
+      poi.name = addressBeanEntity.regeocode.pois[0].name;
+      _markers['手动选择'] = Marker(
+        position: latLng,
+        icon: _markerIcon,
+        infoWindow: InfoWindow(title: poi.name),
+      );
+      _mapController.moveCamera(CameraUpdate.newCameraPosition(CameraPosition(
+        target: latLng,
+        zoom: 20,
+      )));
+      setState(() {
+
+      });
+    });
+  }
 }