【问题标题】:Flutter : The method 'animateCamera' was called on nullFlutter:在 null 上调用了方法“animateCamera”
【发布时间】:2020-11-23 12:36:36
【问题描述】:

我有这个应用程序:

我想在点击floatingActionButton时缩小一点,但它会抛出这个异常

The method 'animateCamera' was called on null.
Receiver: null
Tried calling: animateCamera(Instance of 'CameraUpdate')

这是我的代码:

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {


  @override
  void initState() {
  }

  @override
  Widget build(BuildContext context) {
    GoogleMapController _controller;
    final CameraPosition _initialPosition = CameraPosition(target: LatLng(24.903623, 67.198367));
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: GoogleMap(
        initialCameraPosition: _initialPosition,
        mapType: MapType.normal,
        onMapCreated: (controller){
          setState(() {
            _controller = controller;
          });
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: (){
          _controller.animateCamera(CameraUpdate.zoomOut());
        },
        child: Icon(Icons.zoom_out),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

}

如何解决?

【问题讨论】:

标签: android ios flutter dictionary dart


【解决方案1】:

这是因为您调用的 mapController 为 null!

mapController.animateCamera();

听起来像你这样删除“GoogleMapController mapController;

我会建议您使用 GoogleMapController 类型的 Completer,然后将其集成到“OnMapCreated:”中,控制器由“OnMapCreated”函数返回 Global 部分中的第一个 Decleare Controller,如下所示:Completer&lt;GoogleMapController&gt; _controller = Completer();

然后在 GoogleMaps 内部使用onMapCreated: 函数,如下所示 谷歌地图(

onMapCreated: (GoogleMapController controller) {
              _controller.complete(controller);
            },
)

现在如何使用它 1st) : 在调用 animateCamera 函数之前使用这个

final GoogleMapController mapController = await _controller.future;

这将初始化 mapController 然后调用

 mapController.animateCamera()

【讨论】:

    【解决方案2】:

    重新启动您的应用。 也考虑搬家

    GoogleMapController _controller;
        final CameraPosition _initialPosition = CameraPosition(target: LatLng(24.903623, 67.198367));
    

    要么进入initstate,要么声明为成员变量

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2019-09-23
      • 2020-06-04
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2021-09-29
      相关资源
      最近更新 更多