[Flutter] GoogleMapControllerの使い方
FlutterにGoogle Mapを導入できるgoogle_maps_flutterというパッケージで頻出するGoogleMapController Classの使い方について解説します。
GoogleMapControllerとは
GoogleMapControllerのドキュメントに以下説明があります。
GoogleMapのコントローラであり、GoogleMapにマーカーを追加したり地図を移動させたりする際に使用するものであると考えています。
以下、サンプルコードです。
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class MyMap extends StatefulWidget {
const MyMap({Key? key}) : super(key: key);
@override
_MyMapScreenState createState() => _MyMapScreenState();
}
class _MyMapScreenState extends State<MyMap> {
GoogleMapController? _googleMapController;
@override
void dispose() {
_googleMapController!.dispose();
super.dispose();
}
void _moveCameraToLoc(double lat, double lng) {
_googleMapController!.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(lat, lng),
zoom: 15,
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(children: [
GoogleMap(
initialCameraPosition: const CameraPosition(
target: LatLng(22.4214329, -111.0843345),
zoom: 10,
),
onMapCreated: (controller) {
_googleMapController = controller;
},
),
]),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
floatingActionButton: Padding(
padding: const EdgeInsets.only(bottom: 64.0),
child: FloatingActionButton(
onPressed: () {
_moveCameraToLoc(35.658463773675805, 139.70156397672625);
},
child: const Icon(Icons.map),
tooltip: "投稿",
),
),
);
}
}
GoogleMapControllerのインスタンス作成
GoogleMapController? _googleMapController;
GoogleMap()において、mapが作成される時にonMapCreatedで_googleMapControllerを格納
onMapCreated: (controller) {
_googleMapController = controller;
},
_moveCameraToLocメソッドでは、上記のcontrollerを使っています。
_moveCameraToLocが呼び出されると、 _googleMapController!.animateCameraで、_moveCameraToLocの引数(double lat, double lng)に渡された緯度経度の場所に移動します。
void _moveCameraToLoc(double lat, double lng) {
_googleMapController!.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(lat, lng),
zoom: 15,
),
),
);
}
今回、画面のfloatingActionButtonを押すと_moveCameraToLocが呼び出され、 _moveCameraToLoc(35.658463773675805, 139.70156397672625)に設定した場所に移動させます。
floatingActionButton: Padding(
padding: const EdgeInsets.only(bottom: 64.0),
child: FloatingActionButton(
onPressed: () {
_moveCameraToLoc(35.658463773675805, 139.70156397672625);
},
child: const Icon(Icons.map),
tooltip: "投稿",
),
),
このように、 GoogleMapControllerはMapを移動させたりする際に使用します。
この記事が気に入ったらサポートをしてみませんか?