Google maps controller无法初始化,flutter 2.8.1 google_maps_flutter 2.1.1

Google maps controller cannot be initialized, flutter 2.8.1 google_maps_flutter 2.1.1

我在 Stack Overflow 上再次提问 :),当我尝试创建一个 GoogleMapsController 变量时它显示了这个

Non-nullable instance field 'googleMapController' must be initialized.
Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'

我的控制器

GoogleMapController googleMapController;

如果我使用这个

Completer<GoogleMapController> _controller = Completer();

未定义完成者

如果我使用

late GoogleMapController googleMapController;

使用控制器时会报错

LateError (LateInitializationError: Field 'googleMapController' has not been initialized.)

我不明白为什么 youtube 上的人没有收到这样的错误

由于空安全性,您的变量必须在创建时初始化,

如果您使用的是 Flutter 2.5.3 及更高版本,您可以使用 late 来告诉它它将在创建之后但在使用之前进行初始化(这就是为什么 YouTube 上的人没有收到任何这样的错误如果他们没有迟到):

  late final Completer<GoogleMapController> _controller = Completer();

这里是使用相同版本 flutter 2.8.1 的完整示例,google_maps_flutter 2.1.1

class MapController extends StatefulWidget {
  const MapController({Key? key}) : super(key: key);

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

class _MapControllerState extends State<MapController> {
  late final Completer<GoogleMapController> _controller = Completer();

  static CameraPosition get _kGooglePlex => const CameraPosition(
    target: LatLng(37.42796133580664, -122.085749655962),
    zoom: 14.4746,
  );

  static CameraPosition get _kLake => const CameraPosition(
      bearing: 192.8334901395799,
      target: LatLng(37.43296265331129, -122.08832357078792),
      tilt: 59.440717697143555,
      zoom: 19.151926040649414);

  @override
  Widget build(BuildContext context) {
    return  Scaffold(
      body: GoogleMap(
        mapType: MapType.hybrid,
        initialCameraPosition: _kGooglePlex,
        onMapCreated: (GoogleMapController controller) {
          _controller.complete(controller);
        },
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: _goToTheLake,
        label: const Text('To the lake!'),
        icon: const Icon(Icons.directions_boat),
      ),
    );
  }

  Future<void> _goToTheLake() async {
    final GoogleMapController controller = await _controller.future;
    controller.animateCamera(CameraUpdate.newCameraPosition(_kLake));
  }