firebase - 我想使用流生成器在颤动地图(传单)中添加多个标记,但找不到工作方式
问题描述
我想添加更多从 cloud firestore 获得的纬度和经度标记,所以我使用了流生成器。请帮助我找到添加标记的更好方法。
它在 MapView 小部件上。
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:nativestore/config.dart';
import 'package:nativestore/loginout/auth.dart';
import 'package:latlong/latlong.dart' as latLng;
import 'package:nativestore/loginout/loginpage.dart';
import 'package:curved_navigation_bar/curved_navigation_bar.dart';
class homePage extends StatefulWidget {
@override
homePageState createState() => homePageState();
}
class homePageState extends State<homePage> {
final AuthService _auth = AuthService();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: pc,
bottomNavigationBar: CurvedNavigationBar(
backgroundColor: pc,
animationDuration: Duration(milliseconds: 200),
color: dc,
buttonBackgroundColor: dc,
items: <Widget>[
Icon(
Icons.map_sharp,
size: 35,
color: pc,
),
Icon(
Icons.list,
size: 35,
color: pc,
),
],
onTap: (index) {
//Handle button tap
},
),
body: MapView(),
);
}
}
class MapView extends StatefulWidget {
@override
_MapViewState createState() => _MapViewState();
}
class _MapViewState extends State<MapView> {
final StreamController _streamController = StreamController();
addData() async {
await Firestore.instance
.collection('shopkeepers')
.getDocuments()
.then((value) {
value.documents.forEach((element) {
_streamController.sink.add(
element.data,
);
print("debug-->${element.data}");
});
});
}
@override
void initState() {
// TODO: implement initState
super.initState();
addData();
}
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: _streamController.stream,
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(
child: Text(
"OOPs, Error",
style: TextStyle(color: dc, fontSize: 30),
),
);
}
print("snap data --> ${snapshot.data}");
return FlutterMap(
options: MapOptions(
center: latLng.LatLng(51.5, -0.09),
zoom: 13.0,
),
layers: [
TileLayerOptions(
urlTemplate:
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
subdomains: ['a', 'b', 'c']),
MarkerLayerOptions(
markers: [
Marker(
width: 80.0,
height: 80.0,
point: latLng.LatLng(
snapshot.data['latitude'], snapshot.data['longitude']),
builder: (ctx) => Container(
child: Icon(
Icons.circle,
size: 30,
color: dc,
),
),
),
],
),
],
);
});
}
}
elements.data
打印没有任何问题,但快照数据打印空,但最后打印数据。
解决方案
推荐阅读
- javascript - 谷歌优化防闪烁片段超时
- jquery - JQuery在第一次点击时不触发,但在第二次点击时触发
- webpack - 如何让 eslint 导入/首先了解我的 webpack 别名?
- python - 将一个 GeoPandas 数据框中的每个点链接到另一个数据框中的多边形
- html - 如何使用 react-bootstrap 正确呈现内容?
- xcode - 使用 altool 将 IPA 上传到苹果不起作用
- javascript - jQuery使用变量提取文件名
- php - 如何回显嵌套数组元素?
- unit-testing - Pytest-Variables:如何在没有 funcarg 的情况下使用它们?
- python - 如何在 Django 中使用信号更新值