Flutter 当我在flatter中从json获取数据时,硬编码标记正在显示,但不显示标记
我正在使用谷歌地图在谷歌地图上显示标记。当我输入硬编码的数据时,它会显示标记,但当我将JSON数据传递给标记时,它不会显示。我比较了两者,没有区别,都是一系列的标记。谁能告诉我我做错了什么? 这是我的密码Flutter 当我在flatter中从json获取数据时,硬编码标记正在显示,但不显示标记,flutter,google-maps,dart,maps,Flutter,Google Maps,Dart,Maps,我正在使用谷歌地图在谷歌地图上显示标记。当我输入硬编码的数据时,它会显示标记,但当我将JSON数据传递给标记时,它不会显示。我比较了两者,没有区别,都是一系列的标记。谁能告诉我我做错了什么? 这是我的密码 import 'dart:async'; import 'dart:convert'; import 'package:CityKey/providers/businesses.dart'; import 'package:flutter/material.dart'; import 'pa
import 'dart:async';
import 'dart:convert';
import 'package:CityKey/providers/businesses.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:provider/provider.dart';
class MapsScreen extends StatefulWidget {
static const routeName = '/maps-screen';
@override
_MapsScreenState createState() => _MapsScreenState();
}
class _MapsScreenState extends State<MapsScreen> {
Completer<GoogleMapController> _controller = Completer();
Set<Marker> markers = {};
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
final businesses = Provider.of<Businesses>(context, listen: false);
final jsonBusiness = json.encode(businesses.business.toList());
List<Marker> list = [
Marker(
markerId: MarkerId('Marker1'),
position: LatLng(32.195476, 74.2023563),
infoWindow: InfoWindow(title: 'Business 1'),
icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed),
),
Marker(
markerId: MarkerId('Marker2'),
position: LatLng(32.162969, 74.193625),
infoWindow: InfoWindow(title: 'Business 2'),
icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue),
),
Marker(
markerId: MarkerId('Marker3'),
position: LatLng(32.139505, 74.209312),
infoWindow: InfoWindow(title: 'Business 2'),
icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed),
),
];
print('List of markers $list');
// setState(() {
// markers.addAll(list);
// });
// print('list of markers $markers');
final List jsonList = json.decode(jsonBusiness);
final List listofLatLong = jsonList
.map(
(e) => Map.fromEntries([
MapEntry(
'business_address_longitude',
e['business_address_longitude'],
),
MapEntry(
'business_address_latitude',
e['business_address_latitude'],
),
MapEntry(
'business_title',
e['business_title'],
),
MapEntry(
'business_id',
e['business_id'],
),
]),
)
.toList();
final title = listofLatLong
.map((e) => Marker(
markerId: MarkerId('Marker${e['business_id']}'),
position: LatLng(
double.parse(e['business_address_latitude']),
double.parse(e['business_address_latitude']),
),
infoWindow: InfoWindow(
title: e['business_title'],
),
icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueBlue),
))
.toList();
print('List of markers my $title');
setState(() {
markers.addAll(title);
});
// print(markers);
// print('This is the business ');
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text('Maps'),
),
body: GoogleMap(
markers: Set<Marker>.of(markers),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
initialCameraPosition: CameraPosition(
target: LatLng(32.1749132, 74.1779387),
zoom: 11.0,
),
),
);
}
}
导入'dart:async';
导入“dart:convert”;
导入“包:CityKey/providers/businesss.dart”;
进口“包装:颤振/材料.省道”;
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
导入“包:provider/provider.dart”;
类MapsScreen扩展StatefulWidget{
静态常量routeName='/maps screen';
@凌驾
_MapsScreenState createState()=>\u MapsScreenState();
}
类_MapsScreenState扩展状态{
Completer _controller=Completer();
设置标记={};
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
最终业务=Provider.of(上下文,listen:false);
final jsonBusiness=json.encode(business.business.toList());
列表=[
标记(
markerId:markerId('Marker1'),
位置:LatLng(32.195476,74.2023563),
infoWindow:infoWindow(标题:“业务1”),
图标:BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed),
),
标记(
markerId:markerId('Marker2'),
位置:LatLng(32.162969,74.193625),
infoWindow:infoWindow(标题:“业务2”),
图标:BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue),
),
标记(
markerId:markerId('Marker3'),
位置:LatLng(32.139505,74.209312),
infoWindow:infoWindow(标题:“业务2”),
图标:BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed),
),
];
打印(“标记列表$List”);
//设置状态(){
//markers.addAll(列表);
// });
//打印(“标记列表$markers”);
最终列表jsonList=json.decode(jsonBusiness);
最终列表listofLatLong=jsonList
.地图(
(e) =>Map.fromEntries([
地图条目(
“业务地址经度”,
e[“业务地址经度”],
),
地图条目(
“业务地址纬度”,
e[“业务地址纬度”],
),
地图条目(
“企业名称”,
e[“企业名称”],
),
地图条目(
“业务id”,
e['business_id'],
),
]),
)
.toList();
最终标题=列表长度
.map((e)=>标记(
markerId:markerId('Marker${e['business_id']}'),
职位:LatLng(
double.parse(e['business\u address\u latitude']),
double.parse(e['business\u address\u latitude']),
),
信息窗口:信息窗口(
标题:e['business_title'],
),
图标:BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueBlue),
))
.toList();
打印(“标记列表我的$title”);
设置状态(){
markers.addAll(标题);
});
//印刷品(标记);
//打印(“这就是业务”);
返回脚手架(
appBar:appBar(
标题:对,
标题:文本(“地图”),
),
正文:谷歌地图(
标记:一组(标记),
onMapCreated:(谷歌地图控制器){
_控制器。完成(控制器);
},
initialCameraPosition:CameraPosition(
目标:拉丁美洲(32.1749132,74.1779387),
缩放:11.0,
),
),
);
}
}
发生这种情况的原因是,我正在使用提供程序包获取我存储在var中的值,所提供的值在生成上下文中输入时正在更改。我所做的一切都存储在final中,然后将参数传递给map以解决我的问题。是否有stacktrace或错误日志?您还应该从这里删除setState
:setState((){markers.addAll(title);})代码>只需使用:markers.addAll(title)代码>在构建方法中不需要setState hey@yusufpats发生这种情况是因为我正在使用提供程序包获取我存储在var中的值,所提供的值在构建上下文中输入时正在更改。我所做的一切都存储在final中,然后将参数传递给map,以解决我的问题。谢谢你的帮助,苏瑞迟了回复。祝你有美好的一天。