【问题标题】:How to move google map view to address typed in Flutter?如何将谷歌地图视图移动到 Flutter 中输入的地址?
【发布时间】:2021-08-09 13:09:26
【问题描述】:

目前,我在 android 中创建了一个地图应用程序。用户将在文本字段中输入地址,然后地图将显示该位置。该应用程序总是强制关闭,我不知道问题所在,将不胜感激。

这是我的控制台结果:

E/AndroidRuntime(26283):致命异常:AsyncTask #2 E/AndroidRuntime(26283):进程:com.example.service_platform,PID:26283 E/AndroidRuntime(26283): java.lang.IllegalArgumentException: locationName == null E/AndroidRuntime(26283): 在 android.location.Geocoder.getFromLocationName(Geocoder.java:171) E/AndroidRuntime(26283):在 com.baseflow.geolocator.tasks.ForwardGeocodingTask$1.run(ForwardGeocodingTask.java:42) E/AndroidRuntime(26283):在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) E/AndroidRuntime(26283):在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) E/AndroidRuntime(26283):在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) E/AndroidRuntime(26283): 在 java.lang.Thread.run(Thread.java:764) I/Process (26283):发送信号。 PID:26283 SIG:9

这是我转换 searchAddress 的代码:

searchandNavigate(){
Geolocator().placemarkFromAddress(searchAddr).then((result) => {
  mapController.animateCamera(CameraUpdate.newCameraPosition(
      CameraPosition(target: LatLng(result[0].position.latitude,result[0].position.longitude), zoom: 15)
  ))
});
}

这里是完整的代码:

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:service_platform/common/helper/size_config.dart';

class ProfileMap extends StatefulWidget {
  @override
  _ProfileMapState createState() => _ProfileMapState();
}

class _ProfileMapState extends State<ProfileMap> {
  LatLng point = LatLng(-6.200000, 106.816666);
  
  Set<Marker> _marker={};

  String searchAddr;

  GoogleMapController mapController;

  searchandNavigate(){
    Geolocator().placemarkFromAddress(searchAddr).then((result) => {
      mapController.animateCamera(CameraUpdate.newCameraPosition(
          CameraPosition(target: LatLng(result[0].position.latitude,result[0].position.longitude), zoom: 15)
      ))
    });
  }

  void onMapCreated(GoogleMapController controller){
    mapController = controller;
  }
  void _onMapTap(p){
    setState(() {
      point = p;
      _marker.clear();
      _marker.add(Marker(
        markerId: MarkerId('id_0'),
        position: point,
        draggable: true,
      ));
    });
  }
@override
  Widget build(BuildContext context) {
    SizeConfig().init(context);
    var size = MediaQuery.of(context).size;

    return Scaffold(
      resizeToAvoidBottomInset: true,
      appBar: AppBar(
        backgroundColor: Colors.white,
        title: Text('Place Pin Point', style: TextStyle(color: Color(0xff222222))),
        centerTitle: true,
        titleTextStyle: TextStyle(color: Color(0xff222222), fontWeight: FontWeight.w700, fontSize: 16),
        iconTheme: IconThemeData(
            color: Color(0xffee3124)
        ),
      ),
      body: Stack(
        alignment: Alignment.bottomCenter,
          children: [
            GoogleMap(
              onMapCreated: onMapCreated,
              initialCameraPosition: CameraPosition(
                  target: LatLng(22.22, 88.88),
                  zoom: 15
              ),
              markers: _marker,
              onTap: _onMapTap,
              zoomControlsEnabled: false,
            ),
            Padding(
              padding: const EdgeInsets.all(16),
              child: Container(
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(4)
                      ),
                      child: Card(
                        child: TextFormField(
                          onChanged: (val){
                            setState(() {
                              searchAddr = val;
                            });
                          },
                          onEditingComplete: searchandNavigate,
                        ),
                      ),
                    ),
               
            )
          ]
        ),
    );
  }
}

提前致谢

【问题讨论】:

  • 控制台有错误吗?
  • 我已经编辑了我的问题,谢谢
  • 所以错误是关于 result[0].position.latitude,result[0].position.longitude 它的 null ,你尝试打印它吗?
  • 是的,它工作正常

标签: flutter google-maps


【解决方案1】:

好的,我发现了错误,这是因为程序处理地址时地址仍然为空。只需添加 If(address!="") 即可解决所有问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2015-03-04
    • 2018-11-14
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多