【问题标题】:Get Marker from JSON file and show on GoogleMap从 JSON 文件中获取标记并在 Google 地图上显示
【发布时间】:2019-05-19 13:03:12
【问题描述】:

我做了一个简单的应用程序,从 JSON 文件中获取数据标记并在 GoogleMap 上绘制它们。

我已从文件中获取标记信息并将其添加到列表allMarkers

但是当我运行我的应用程序时,它只绘制地图,不显示标记并收到控制台通知:

flutter: Another exception was thrown: A build function returned null.

这是我完整的main.dart 代码

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Future _future;

  Future<String> loadString() async =>
      await rootBundle.loadString('assets/data.json');
  List<Marker> allMarkers = [];
  GoogleMapController _controller;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _future = loadString();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(children: [
        Container(
          height: MediaQuery.of(context).size.height,
          width: MediaQuery.of(context).size.width,
          child: Stack(children: <Widget>[
            FutureBuilder(
              future: _future,
              builder: (context, AsyncSnapshot snapshot) {
                List<dynamic> parsedJson = jsonDecode(snapshot.data);
                allMarkers = parsedJson.map((element) {
                  return Marker(
                      markerId: MarkerId(element['id']),
                      position: LatLng(element['x'], element['y']));
                }).toList();
              },
            ),
            GoogleMap(
              initialCameraPosition:
                  CameraPosition(target: LatLng(40.7128, -74.0060), zoom: 1.0),
              markers: Set.from(allMarkers),
              onMapCreated: mapCreated,
            ),
          ]),
        ),
      ]),
    );
  }
  void mapCreated(controller) {
    setState(() {
      _controller = controller;
    });
  }
}

还有我的data.json(仅用于测试)

[{
    "id": "8D5D-4CD323560F59",
    "x": 40.7128,
    "y": -74.0060
 },{
    "id": "E3E0D2C5-CB82",
    "x": 41.7128,
    "y": -75.0060
 }]

【问题讨论】:

    标签: google-maps flutter


    【解决方案1】:

    我不知道您为什么使用 Stack,但您似乎不需要。

    在 FutureBuilder 中添加条件总是应该像下面的示例一样。

    FutureBuilder(builder: () =&gt; Widget) 中没有返回值。在您的情况下,您只是在做一些逻辑,您还必须返回一个小部件。

    解决方案:

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Stack(children: [
            Container(
              height: MediaQuery.of(context).size.height,
              width: MediaQuery.of(context).size.width,
              child: FutureBuilder(
                future: _future,
                builder: (context, AsyncSnapshot snapshot) {
                  if (!snapshot.hasData) {
                    return CircularProgressIndicator();
                  }
                  List<dynamic> parsedJson = jsonDecode(snapshot.data);
                  allMarkers = parsedJson.map((element) {
                    return Marker(
                        markerId: MarkerId(element['id']),
                        position: LatLng(element['x'], element['y']));
                  }).toList();
    
                  return GoogleMap(
                    initialCameraPosition: CameraPosition(
                        target: LatLng(40.7128, -74.0060), zoom: 1.0),
                    markers: Set.from(allMarkers),
                    onMapCreated: mapCreated,
                  );
                },
              ),
            ),
          ]),
        );
      }
    

    【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2013-12-18
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多