当前位置: 首页 > 知识库问答 >
问题:

如何将谷歌地图视图移动到Flutter中键入的地址?

靳越
2023-03-14

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

下面是我的控制台结果:

E/AndroidRuntime(26283): 致命的异常: 异步任务 #2 E/AndroidRuntime(26283): 进程: com.example.service_platform, PID: 26283 E/AndroidRuntime(26283): java.lang.非法描述异常: 位置名称 == 空 E/Android运行时 (26283): at android.location.Geocoder.getFromName(地理编码器.java:171) E/AndroidRuntime(26283): at com.baseflow.geolocator.tasks.ForwardGeocodingTask$1.run(转发地理编码任务.java:42) E/AndroidRuntime(26283): 在 android.os.AsyncTask$串行加速器$1.run(异步任务.java:245) E/AndroidRuntime(26283): at java.util.concurrent.ThreadPoolExecutor.runworker(ThreadPoolExcutor.java:1167) E/Android Runtime(26283): at java.util.concurrent.ThreadExecutor$Worker.run(线程池.java:641) E/AndroidRuntime(26283): 在 java.lang.Thread.run(线程.java:764) I/Process (26283): 发送信号.PID: 26283 SIG: 9

以下是我用于转换搜索地址的代码:

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,
                        ),
                      ),
                    ),
               
            )
          ]
        ),
    );
  }
}

提前致谢

共有1个答案

金毅
2023-03-14

好了,我找到错误了,是因为程序处理的时候地址还是< code>null。只是添加< code>If(地址!="")解决所有问题。

 类似资料:
  • 我成功创建了一个活动,用户可以在其中发布他的状态并将他的当前位置放置在android工作室中创建的google map中。我还尝试在map中查看所有其他用户,我成功地做到了。但是,随着他们的位置发生变化,不断增加。我想实现这样一种情况,即用户在移动时可以在地图上看到彼此,并且这些也会相应地移动。我使用Firebase作为我的后端来存储他们的位置和状态。这是我想出的代码。 请帮帮我!提前感谢!:)

  • 我正在尝试按照本教程在flutter中设置谷歌地图,但我遇到了一些问题。我的应用程序运行,但我看到一个白色屏幕,没有发生任何事情,并且将以下错误打印到终端: 这很奇怪,因为我的看起来像这样: 这正是错误所要求的,所以我不知道出了什么问题。我查看了其他线程,并做了一些建议,比如运行删除应用程序、并重试,这也不起作用。 这些是我在 我还想添加,但是我得到了以下错误 我也尝试了一些其他版本,但我一直出错

  • 我正在努力学习本教程“https://medium.com/flutter-io/google-maps-and-flutter-cfb330f9a245“在颤振中添加谷歌地图。我用谷歌地图键更新了android清单,并添加了访问fine_位置的权限。我的模拟器上出现了白色屏幕,没有地图。我花了很多时间试图修复它,但徒劳。我还尝试了插件的示例用法。”https://pub.dartlang.org

  • 我在我的flutter应用程序中使用google_maps_flutter来使用谷歌地图我有自定义标记图标,我用BitmapDescriptor.from字节(mark erIcon)加载它,但我想用一些文本显示Url的图标。 这就是我们要达到的目的 是否可以通过flutter或任何可以动态创建图像的外部图像依赖来实现相同的效果。

  • 还有人发现谷歌地图(现在)允许你平移到两极之外有问题吗?它曾经停在两极,对吗? 每次用户平移或缩放地图时,我正在工作的一个站点都会在我们的服务器上执行基于位置的查询。这会导致错误,因为用户从地图边缘平移触发的查询是荒谬的。 现在,可以说,我正在服务器端处理edge案例,但在客户端这不是一个很好的用户体验。有没有人有防止过度平移的解决方案? 谢谢

  • 所以我看到了一个特殊的例外,我敢肯定的是谷歌地图的绘图代码。 我有一个片段,在那里我以编程方式添加了一个支持地图片段,然后我在其中操纵谷歌地图实例。 这是stacktrace: 我无法可靠地复制它(尽管这种情况经常发生),我已经查看了ReadWriteDirectByteBuffer和ShortToByteBufferAdapter,但没有任何东西突然出现在我面前。 有什么想法吗?