首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将地理定位器的位置流转换为StreamBuilder颤动

将地理定位器的位置流转换为StreamBuilder颤动
EN

Stack Overflow用户
提问于 2020-02-14 05:27:04
回答 1查看 1.4K关注 0票数 0

我只是从Flutter开始,对State/Stream/BloC概念非常陌生。我正在尝试基于来自Geolocator()Position流的坐标来更新FlutterMap中心。目前我只是调用setState(),用新值更新一个变量,但下一步我将尝试使用Bloc模式。现在,除了在来自流的位置的坐标上设置中心之外,我还在相同的坐标上设置了一个Marker。我期望在屏幕中央看到一个稳定的标记,下面是一个移动的地图,但事实恰恰相反。地图是稳定的,图标正在移动。你能看到我哪里搞错了吗?另外,对于StreamBuilderstream:属性,如何将来自Geolocator()的流作为事件传递?

非常感谢您的时间和帮助。

这就是Stream:

代码语言:javascript
复制
StreamSubscription positionStream = _geolocator
        .getPositionStream(locationOptions)
        .listen((Position position) {
      setState(() {
        _position = position;
      });
      print(
          _position.latitude.toString() + ',' + _position.longitude.toString()); // ok
    });

这是地图和标记:

代码语言:javascript
复制
Container(
                height: 670,
                width: 370,
                child: FlutterMap(
                  options: MapOptions(
                    center: LatLng(_position.latitude, _position.longitude),
                    minZoom: 16.0,
                    maxZoom: 19.0,
                  ),
                  layers: [
                    TileLayerOptions(
//                        urlTemplate:
//                        'https://api.openrouteservice.org/mapsurfer/{z}/{x}/{y}.png?api_key=omitted',
                        urlTemplate:
                            'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
                        subdomains: ['a', 'b', 'c'],
                        keepBuffer: 20),
                    new MarkerLayerOptions(
                      markers: [
                        new Marker(
                            point: new LatLng(
                                _position.latitude, _position.longitude),
                            height: 200,
                            width: 200,
                            builder: (context) => IconButton(
                                  icon: Icon(Icons.location_on),
                                  color: Colors.red,
                                  iconSize: 60,
                                  onPressed: () {
                                    print('icon tapped');
                                  },
                                )),
                      ],
                    ),
                  ],
                ),
              ),
EN

回答 1

Stack Overflow用户

发布于 2020-02-14 05:54:27

找到了问题所在。我没有分配任何MapController()。所以我创建了一个并将其分配给FlutterMap。在setState()中,我添加了_controller.move(LatLng(_position.latitude, _position.longitude), 16.0);,现在行为符合预期。稳定的图标在屏幕的中心和一个移动的地图下面。希望这能对其他人有所帮助。不过,我还是会尝试用BLoC模式来实现同样的效果。干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60216720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档