标记不会在 Flutter 中显示

Posted

技术标签:

【中文标题】标记不会在 Flutter 中显示【英文标题】:Marker won't be displayed in Flutter 【发布时间】:2021-02-09 23:01:17 【问题描述】:

我对颤动的世界有点陌生,我正在尝试根据我的 firebase 数据库中的一些值在我的地图中显示一组标记。但到目前为止标记不会出现,有时在热重载后会出现标记,但它与我在数据库中的内容相去甚远。有人可以帮助我吗,我几乎尝试了所有方法。 代码如下:

        class Routes extends StatefulWidget
        static const routeName = '/routes';
        @override
       State<StatefulWidget> createState() => new _RoutesState();
        

         class _RoutesState extends State <Routes>  
         GoogleMapController _controller;

          Set <Marker> _markers =;

         void _onMapCreated(GoogleMapController controller)
          setState(() 
             _controller = controller;
             retrieveData();
           );
          

             void iniState()
            super.initState();
            setState(() 
            retrieveData();
              );
            

         retrieveData()
         setState(() async 
         await Firebase.initializeApp();
         final firestoreInstance = FirebaseFirestore.instance;
         String place;
         double rlat,rlong,speed;
         String emailUser = FirebaseAuth.instance.currentUser.email;

    firestoreInstance.collection('Cars').where('email', isEqualTo : emailUser).get().then((value)
      value.docs.forEach((result) 
         print(result.data());

         place = result.data()['place'] ;
         rlat = double.parse(result.data()['rlat']);
         rlong =  double.parse(result.data()['rlong']);

         _markers.add(
           Marker(
             markerId: MarkerId('Details'),
             position: LatLng(rlat,rlong),
             )
         );
     );
 );
 );
           

   Widget build(BuildContext context) 
   return Scaffold(
    appBar: new AppBar(
   title: new Text('Track Route',
   style: new TextStyle(color:Colors.white, fontWeight:FontWeight.bold),
   ),
   leading: IconButton(
    icon: Icon(Icons.arrow_back, 
   color: Colors.white),
     onPressed: ()
     Navigator.of(context).popAndPushNamed(RootPage.routeName);
  ,
  ),
 ),
 body: Stack(
   children: <Widget>[
     GoogleMap(
       onMapCreated:_onMapCreated,
       initialCameraPosition: CameraPosition(target: LatLng(0,0),zoom:4) ,
       markers: _markers,
       )
   ],
 ) ,
   );
 

【问题讨论】:

【参考方案1】:

更改此行会发生什么:

         _markers.add(
       Marker(
         markerId: MarkerId('Details'),
         position: LatLng(rlat,rlong),
         )
     );

到这里:

        setState(() 
            _markers.add(
              Marker(
               markerId: MarkerId('Details'),
               position: LatLng(rlat,rlong),
              )
           );
          );

【讨论】:

它有效,但它一直只显示一个标记,我想显示所有。你能再帮我一次吗? @LuthermillaMuculadosReis 在你的 for 循环之前print("$value.docs.length"); 显示了什么? @LuthermillaMuculadosReis 将 foreach 更改为一个简单的 for 循环。并检查 rlatrlong 的值是否正确,因为标记不适用于无效的 LatLng 值。 我刚刚发现了问题,我没有意识到,但是标记得到了相同的 ID,所以它只显示最后一个,在更改所有标记后显示。感谢您的帮助和关注

以上是关于标记不会在 Flutter 中显示的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何在 google_maps_flutter 中为标记图标设置动画?

如何在 Flutter 中自定义谷歌地图标记图标

Flutter - 使用 StreamBuilder 提供对谷歌地图的实时更新

Flutter:在用户输入时显示标记信息窗口抛出 PlatformException

从 google_maps_flutter 中删除多余的标记和圆圈

根据 Flutter 中的变量更新自定义标记的图标