Showing
4 changed files
with
101 additions
and
39 deletions
lib/models/poisearch_model.dart
0 → 100644
| 1 | +class PoiSearch { | ||
| 2 | + PoiSearch({ | ||
| 3 | + required this.cityCode, | ||
| 4 | + required this.cityName, | ||
| 5 | + required this.provinceName, | ||
| 6 | + required this.title, | ||
| 7 | + required this.adName, | ||
| 8 | + required this.provinceCode, | ||
| 9 | + required this.latitude, | ||
| 10 | + required this.longitude, | ||
| 11 | + }); | ||
| 12 | + | ||
| 13 | + PoiSearch.fromJsonMap(Map<String, dynamic> map) | ||
| 14 | + : cityCode = map['cityCode'] as String, | ||
| 15 | + cityName = map['cityName'] as String, | ||
| 16 | + provinceName = map['provinceName'] as String, | ||
| 17 | + title = map['title'] as String, | ||
| 18 | + adName = map['adName'] as String, | ||
| 19 | + provinceCode = map['provinceCode'] as String, | ||
| 20 | + latitude = map['latitude'] as String, | ||
| 21 | + longitude = map['longitude'] as String; | ||
| 22 | + | ||
| 23 | + String cityCode; | ||
| 24 | + String cityName; | ||
| 25 | + String provinceName; | ||
| 26 | + String title; | ||
| 27 | + String adName; | ||
| 28 | + String provinceCode; | ||
| 29 | + String latitude; | ||
| 30 | + String longitude; | ||
| 31 | + | ||
| 32 | + Map<String, dynamic> toJson() { | ||
| 33 | + final Map<String, dynamic> data = <String, dynamic>{}; | ||
| 34 | + data['cityCode'] = cityCode; | ||
| 35 | + data['cityName'] = cityName; | ||
| 36 | + data['provinceName'] = provinceName; | ||
| 37 | + data['title'] = title; | ||
| 38 | + data['adName'] = adName; | ||
| 39 | + data['provinceCode'] = provinceCode; | ||
| 40 | + data['latitude'] = latitude; | ||
| 41 | + data['longitude'] = longitude; | ||
| 42 | + return data; | ||
| 43 | + } | ||
| 44 | +} |
| 1 | +import 'package:Parlando/models/nearby_response.dart'; | ||
| 1 | import 'package:Parlando/models/upload_entity.dart'; | 2 | import 'package:Parlando/models/upload_entity.dart'; |
| 2 | import 'package:Parlando/net/dio_utils.dart'; | 3 | import 'package:Parlando/net/dio_utils.dart'; |
| 3 | import 'package:Parlando/net/http_api.dart'; | 4 | import 'package:Parlando/net/http_api.dart'; |
| ... | @@ -109,12 +110,10 @@ class PoemPublishState extends State<PoemPublish> { | ... | @@ -109,12 +110,10 @@ class PoemPublishState extends State<PoemPublish> { |
| 109 | NavigatorUtils.pushResult( | 110 | NavigatorUtils.pushResult( |
| 110 | context, PoemRouter.addressSelectPage, (result) { | 111 | context, PoemRouter.addressSelectPage, (result) { |
| 111 | setState(() { | 112 | setState(() { |
| 112 | - // final BMFSuggestionInfo model = | 113 | + final Results model = result as Results; |
| 113 | - // result as BMFSuggestionInfo; | 114 | + _longitude = model.geometry!.location!.lng.toString(); |
| 114 | - // _longitude = model.location!.longitude.toString(); | 115 | + _latitude = model.geometry!.location!.lat.toString(); |
| 115 | - // _latitude = model.location!.latitude.toString(); | 116 | + _address = '${model.name} ${model.vicinity}'; |
| 116 | - // _address = | ||
| 117 | - // '${model.city!} ${model.district!} ${model.address!}'; | ||
| 118 | }); | 117 | }); |
| 119 | }); | 118 | }); |
| 120 | }, | 119 | }, |
| ... | @@ -130,10 +129,20 @@ class PoemPublishState extends State<PoemPublish> { | ... | @@ -130,10 +129,20 @@ class PoemPublishState extends State<PoemPublish> { |
| 130 | size: 15.px, | 129 | size: 15.px, |
| 131 | ), | 130 | ), |
| 132 | Gaps.hGap5, | 131 | Gaps.hGap5, |
| 133 | - Text( | 132 | + Container( |
| 134 | - _address, | 133 | + padding: const EdgeInsets.fromLTRB(0, 0, 10, 10), |
| 135 | - style: const TextStyle(color: Colors.black45), | 134 | + width: MediaQuery.of(context).size.width * 0.8, |
| 136 | - ), | 135 | + alignment: Alignment.centerLeft, |
| 136 | + child: Column( | ||
| 137 | + children: <Widget>[ | ||
| 138 | + Text( | ||
| 139 | + _address, | ||
| 140 | + style: const TextStyle(color: Colors.black45), | ||
| 141 | + textAlign: TextAlign.left, | ||
| 142 | + ), | ||
| 143 | + ], | ||
| 144 | + ), | ||
| 145 | + ) | ||
| 137 | ], | 146 | ], |
| 138 | ), | 147 | ), |
| 139 | ), | 148 | ), |
| ... | @@ -209,12 +218,12 @@ class PoemPublishState extends State<PoemPublish> { | ... | @@ -209,12 +218,12 @@ class PoemPublishState extends State<PoemPublish> { |
| 209 | Gaps.vGap10, | 218 | Gaps.vGap10, |
| 210 | isUploading | 219 | isUploading |
| 211 | ? Padding( | 220 | ? Padding( |
| 212 | - padding: const EdgeInsets.all(20), | 221 | + padding: const EdgeInsets.all(20), |
| 213 | - child: ValueListenableBuilder<double>( | 222 | + child: ValueListenableBuilder<double>( |
| 214 | - builder: _buildWithValue, | 223 | + builder: _buildWithValue, |
| 215 | - valueListenable: _counter, | 224 | + valueListenable: _counter, |
| 216 | - ), | 225 | + ), |
| 217 | - ) | 226 | + ) |
| 218 | : Container(), | 227 | : Container(), |
| 219 | ], | 228 | ], |
| 220 | ), | 229 | ), |
| ... | @@ -224,10 +233,10 @@ class PoemPublishState extends State<PoemPublish> { | ... | @@ -224,10 +233,10 @@ class PoemPublishState extends State<PoemPublish> { |
| 224 | ), | 233 | ), |
| 225 | isPublishing | 234 | isPublishing |
| 226 | ? const Center( | 235 | ? const Center( |
| 227 | - child: CupertinoActivityIndicator( | 236 | + child: CupertinoActivityIndicator( |
| 228 | - radius: 16.0, | 237 | + radius: 16.0, |
| 229 | - ), | 238 | + ), |
| 230 | - ) | 239 | + ) |
| 231 | : Container(), | 240 | : Container(), |
| 232 | ], | 241 | ], |
| 233 | ), | 242 | ), | ... | ... |
| 1 | import 'dart:async'; | 1 | import 'dart:async'; |
| 2 | import 'dart:convert'; | 2 | import 'dart:convert'; |
| 3 | import 'package:Parlando/models/nearby_response.dart' as nearby; | 3 | import 'package:Parlando/models/nearby_response.dart' as nearby; |
| 4 | +import 'package:Parlando/routers/fluro_navigator.dart'; | ||
| 5 | +import 'package:Parlando/util/toast_utils.dart'; | ||
| 4 | import 'package:flutter/material.dart'; | 6 | import 'package:flutter/material.dart'; |
| 5 | import 'package:Parlando/widgets/my_button.dart'; | 7 | import 'package:Parlando/widgets/my_button.dart'; |
| 6 | import 'package:Parlando/widgets/search_bar.dart'; | 8 | import 'package:Parlando/widgets/search_bar.dart'; |
| ... | @@ -17,7 +19,7 @@ class AddressSelectPage extends StatefulWidget { | ... | @@ -17,7 +19,7 @@ class AddressSelectPage extends StatefulWidget { |
| 17 | } | 19 | } |
| 18 | 20 | ||
| 19 | class AddressSelectPageState extends State<AddressSelectPage> { | 21 | class AddressSelectPageState extends State<AddressSelectPage> { |
| 20 | - // List<BMFSuggestionInfo> _list = []; | 22 | + List<nearby.Results> _list = []; |
| 21 | int _index = 0; | 23 | int _index = 0; |
| 22 | final ScrollController _controller = ScrollController(); | 24 | final ScrollController _controller = ScrollController(); |
| 23 | LatLng _center = const LatLng(45.521563, -122.677433); | 25 | LatLng _center = const LatLng(45.521563, -122.677433); |
| ... | @@ -26,8 +28,8 @@ class AddressSelectPageState extends State<AddressSelectPage> { | ... | @@ -26,8 +28,8 @@ class AddressSelectPageState extends State<AddressSelectPage> { |
| 26 | int _markerIdCounter = 1; | 28 | int _markerIdCounter = 1; |
| 27 | Map<MarkerId, Marker> markers = <MarkerId, Marker>{}; | 29 | Map<MarkerId, Marker> markers = <MarkerId, Marker>{}; |
| 28 | late StreamSubscription _locationSubscription; | 30 | late StreamSubscription _locationSubscription; |
| 29 | - String radius = "30"; | 31 | + String radius = "1000"; |
| 30 | - String apiKey = ""; | 32 | + String apiKey = "AIzaSyDQZsMULyO-UtiSht4_MFi1uHT4BIqasjw"; |
| 31 | nearby.NearbyPlacesResponse nearbyPlacesResponse = | 33 | nearby.NearbyPlacesResponse nearbyPlacesResponse = |
| 32 | nearby.NearbyPlacesResponse(); | 34 | nearby.NearbyPlacesResponse(); |
| 33 | 35 | ||
| ... | @@ -69,13 +71,17 @@ class AddressSelectPageState extends State<AddressSelectPage> { | ... | @@ -69,13 +71,17 @@ class AddressSelectPageState extends State<AddressSelectPage> { |
| 69 | }); | 71 | }); |
| 70 | } | 72 | } |
| 71 | 73 | ||
| 72 | - void getNearbyPlaces() async { | 74 | + void getNearbyPlaces(String keyword) async { |
| 73 | - var url = Uri.parse( | 75 | + String uri = |
| 74 | - '${'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${_center.latitude},${_center.longitude}&radius=$radius'}&key=$apiKey'); | 76 | + '${'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${_center.latitude},${_center.longitude}&radius=$radius'}&key=$apiKey&keyword=$keyword'; |
| 77 | + var url = Uri.parse(uri); | ||
| 75 | var response = await http.post(url); | 78 | var response = await http.post(url); |
| 76 | nearbyPlacesResponse = | 79 | nearbyPlacesResponse = |
| 77 | nearby.NearbyPlacesResponse.fromJson(jsonDecode(response.body)); | 80 | nearby.NearbyPlacesResponse.fromJson(jsonDecode(response.body)); |
| 78 | - setState(() {}); | 81 | + _list = nearbyPlacesResponse.results!; |
| 82 | + setState(() { | ||
| 83 | + isLoading = false; | ||
| 84 | + }); | ||
| 79 | } | 85 | } |
| 80 | 86 | ||
| 81 | void _onMapCreated(GoogleMapController controller) { | 87 | void _onMapCreated(GoogleMapController controller) { |
| ... | @@ -91,6 +97,7 @@ class AddressSelectPageState extends State<AddressSelectPage> { | ... | @@ -91,6 +97,7 @@ class AddressSelectPageState extends State<AddressSelectPage> { |
| 91 | setState(() { | 97 | setState(() { |
| 92 | markers[markerId] = marker; | 98 | markers[markerId] = marker; |
| 93 | }); | 99 | }); |
| 100 | + getNearbyPlaces(""); | ||
| 94 | } | 101 | } |
| 95 | 102 | ||
| 96 | @override | 103 | @override |
| ... | @@ -105,6 +112,7 @@ class AddressSelectPageState extends State<AddressSelectPage> { | ... | @@ -105,6 +112,7 @@ class AddressSelectPageState extends State<AddressSelectPage> { |
| 105 | duration: const Duration(milliseconds: 10), curve: Curves.ease); | 112 | duration: const Duration(milliseconds: 10), curve: Curves.ease); |
| 106 | _index = 0; | 113 | _index = 0; |
| 107 | // 构造检索参数 | 114 | // 构造检索参数 |
| 115 | + getNearbyPlaces(text); | ||
| 108 | }, | 116 | }, |
| 109 | ), | 117 | ), |
| 110 | body: SafeArea( | 118 | body: SafeArea( |
| ... | @@ -126,12 +134,13 @@ class AddressSelectPageState extends State<AddressSelectPage> { | ... | @@ -126,12 +134,13 @@ class AddressSelectPageState extends State<AddressSelectPage> { |
| 126 | child: isLoading | 134 | child: isLoading |
| 127 | ? const GFLoader() | 135 | ? const GFLoader() |
| 128 | : ListView.separated( | 136 | : ListView.separated( |
| 129 | - controller: _controller, | 137 | + controller: _controller, |
| 130 | - itemCount: 1, | 138 | + itemCount: _list.length, |
| 131 | separatorBuilder: (_, index) => const Divider(), | 139 | separatorBuilder: (_, index) => const Divider(), |
| 132 | itemBuilder: (_, index) { | 140 | itemBuilder: (_, index) { |
| 133 | return _AddressItem( | 141 | return _AddressItem( |
| 134 | isSelected: _index == index, | 142 | isSelected: _index == index, |
| 143 | + date: _list[index], | ||
| 135 | onTap: () { | 144 | onTap: () { |
| 136 | _index = index; | 145 | _index = index; |
| 137 | setState(() {}); | 146 | setState(() {}); |
| ... | @@ -142,11 +151,11 @@ class AddressSelectPageState extends State<AddressSelectPage> { | ... | @@ -142,11 +151,11 @@ class AddressSelectPageState extends State<AddressSelectPage> { |
| 142 | ), | 151 | ), |
| 143 | MyButton( | 152 | MyButton( |
| 144 | onPressed: () { | 153 | onPressed: () { |
| 145 | - // if (_list.isEmpty) { | 154 | + if (_list.isEmpty) { |
| 146 | - // Toast.show('未选择地址!'); | 155 | + Toast.show('未选择地址!'); |
| 147 | - // return; | 156 | + return; |
| 148 | - // } | 157 | + } |
| 149 | - // NavigatorUtils.goBackWithParams(context, _list[_index]); | 158 | + NavigatorUtils.goBackWithParams(context, _list[_index]); |
| 150 | }, | 159 | }, |
| 151 | text: '确认选择地址', | 160 | text: '确认选择地址', |
| 152 | ) | 161 | ) |
| ... | @@ -160,11 +169,11 @@ class AddressSelectPageState extends State<AddressSelectPage> { | ... | @@ -160,11 +169,11 @@ class AddressSelectPageState extends State<AddressSelectPage> { |
| 160 | class _AddressItem extends StatelessWidget { | 169 | class _AddressItem extends StatelessWidget { |
| 161 | const _AddressItem({ | 170 | const _AddressItem({ |
| 162 | Key? key, | 171 | Key? key, |
| 172 | + required this.date, | ||
| 163 | this.isSelected = false, | 173 | this.isSelected = false, |
| 164 | this.onTap, | 174 | this.onTap, |
| 165 | }) : super(key: key); | 175 | }) : super(key: key); |
| 166 | - | 176 | + final nearby.Results date; |
| 167 | - // final BMFSuggestionInfo poi; | ||
| 168 | final bool isSelected; | 177 | final bool isSelected; |
| 169 | final GestureTapCallback? onTap; | 178 | final GestureTapCallback? onTap; |
| 170 | 179 | ||
| ... | @@ -178,9 +187,9 @@ class _AddressItem extends StatelessWidget { | ... | @@ -178,9 +187,9 @@ class _AddressItem extends StatelessWidget { |
| 178 | height: 50.0, | 187 | height: 50.0, |
| 179 | child: Row( | 188 | child: Row( |
| 180 | children: <Widget>[ | 189 | children: <Widget>[ |
| 181 | - const Expanded( | 190 | + Expanded( |
| 182 | child: Text( | 191 | child: Text( |
| 183 | - '', // '${poi.city} ${poi.district} ${poi.address}', | 192 | + '${date.name} ${date.vicinity}', |
| 184 | ), | 193 | ), |
| 185 | ), | 194 | ), |
| 186 | Visibility( | 195 | Visibility( | ... | ... |
| ... | @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev | ... | @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev |
| 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. | 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. |
| 16 | # Read more about iOS versioning at | 16 | # Read more about iOS versioning at |
| 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html |
| 18 | -version: 1.0.0+12 | 18 | +version: 1.0.0+13 |
| 19 | 19 | ||
| 20 | environment: | 20 | environment: |
| 21 | sdk: ">=2.16.2 <3.0.0" | 21 | sdk: ">=2.16.2 <3.0.0" | ... | ... |
-
Please register or login to post a comment