【发布时间】:2019-07-20 00:40:12
【问题描述】:
我在地图中有一组标记。当点击其中一个标记时,会显示显示元素名称和“Ver”(显示)按钮的小吃栏。当我单击此按钮时,理论上会转到其他页面。我有这个代码。
void onMapCreated(GoogleMapController controller) async {
setState(() {
mapController = controller;
markerMap = Map();
});
for (int i = 0; i < list.length; i++) {
var corte = list[0].keys.elementAt(i).split('/');
Marker marker = await mapController.addMarker(MarkerOptions(
position: LatLng(list[0].values.elementAt(i).latitude,
list[0].values.elementAt(i).longitude),
icon: BitmapDescriptor.defaultMarkerWithHue(
corte[1] == "tipo:0"
? BitmapDescriptor.hueRed
: corte[1] == "tipo:4"
? BitmapDescriptor.hueBlue
: corte[1] == "tipo:3"
? BitmapDescriptor.hueGreen
: corte[1] == "tipo:2"
? BitmapDescriptor.hueYellow
: null)));
markerMap[marker.id] = [corte,i];
}
mapController.onMarkerTapped.add((marker) {
scaffoldKey.currentState.removeCurrentSnackBar();
var objeto = markerMap[marker.id];
final snackBar = SnackBar(
duration: Duration(seconds: 10),
content: Text(objeto[0][0], textAlign: TextAlign.left),
backgroundColor: Colors.red[700],
action: SnackBarAction(
textColor: Colors.white,
label: 'Ver',
onPressed: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => objeto[0][2] == "tipo:0"
? new MeterDetailsChartPage(
elemento: metersDetails[objeto[1]],
estate: this.estate,
parcela: widget.parcela)
: objeto[0][2] == "tipo:4"
? new ValvePage(
elemento: valvesDetails[objeto[1]],
estate: this.estate,
parcela: widget.parcela)
: objeto[0][2] == "tipo:3"
? new RelePage(
elemento: relesDetails[objeto[1]],
estate: this.estate,
parcela: widget.parcela)
: objeto[0][2] == "tipo:2"
? new SensorPage(
elemento: sensorsDetails[objeto[1]],
estate: this.estate,
parcela: widget.parcela)
: null));
},
));
scaffoldKey.currentState.showSnackBar(snackBar);
});
}
问题:当我点击“版本”时返回此错误
I/flutter (11498):══╡ 小部件库发现异常 ╞═════════════════════════════════════════════════ ══════════ I/颤振 (11498):在构建 Builder(dirty) 时抛出了以下断言: I/flutter (11498):路由“null”的构建器返回 null。
我认为问题在于 async-await 和 builder:(context)。
有人遇到过这个问题,知道怎么解决吗?
--解决方案--
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => objeto[1] == "tipo:0"
? new MeterDetailsChartPage(
elemento: metersDetails.firstWhere((meters)=>meters.id==int.parse(objeto[2])),
estate: this.estate,
parcela: widget.parcela)
: objeto[1] == "tipo:4"
? new ValvePage(
elemento: valvesDetails.firstWhere((valves)=>valves.id==int.parse(objeto[2])),
estate: this.estate,
parcela: widget.parcela)
: objeto[1] == "tipo:3"
? new RelePage(
elemento: relesDetails.firstWhere((reles)=>reles.id==int.parse(objeto[2])),
estate: this.estate,
parcela: widget.parcela)
: objeto[1] == "tipo:2"
? new SensorPage(
elemento: sensorsDetails.firstWhere((sensors)=>sensors.id==int.parse(objeto[2])),
estate: this.estate,
parcela: widget.parcela)
:Navigator.pushNamed(context, EstatesPage.tag)));
【问题讨论】:
-
这是因为你的 builder 去了这里:
: null -
是的,我知道。但是我该如何解决呢?
-
如果在调用
Navigator.push(之前先调用print('objeto[0][2]: ${objeto[0][2]}'),你会看到什么?
标签: google-maps flutter