質問内容
FlutterでGoogleMapを表示させているのですが、デバイスの設定の外観モードを変更すると、GoogleMapの外観を変えたいです。
しかし、GoogleMapの「onMapCreated」プロパティが実行されません。
どうすれば、アプリがバックグラウンドから戻ってきたタイミングでGoogleMapの外観を変更させることができるのでしょうか?
該当のソースコード
Dart
1import 'dart:async'; 2import 'dart:ui' as ui; 3 4import 'package:flutter/material.dart'; 5import 'package:google_maps_flutter/google_maps_flutter.dart'; 6import 'package:flutter/services.dart' show rootBundle; 7 8void main() => runApp(const MyApp()); 9 10class MyApp extends StatelessWidget { 11 const MyApp({super.key}); 12 13 Widget build(BuildContext context) { 14 return const MaterialApp( 15 home: MapSample(), 16 ); 17 } 18} 19 20class MapSample extends StatefulWidget { 21 const MapSample({super.key}); 22 23 State<MapSample> createState() => MapSampleState(); 24} 25 26class MapSampleState extends State<MapSample> with WidgetsBindingObserver { 27 final Completer<GoogleMapController> _controller = Completer(); 28 late Brightness justBeforeMode; 29 30 31 void initState() { 32 super.initState(); 33 WidgetsBinding.instance.addObserver(this); 34 } 35 36 37 void dispose() { 38 WidgetsBinding.instance.removeObserver(this); 39 super.dispose(); 40 } 41 42 43 void didChangeAppLifecycleState(AppLifecycleState state) { 44 super.didChangeAppLifecycleState(state); 45 if (AppLifecycleState.paused == state) { 46 justBeforeMode = ui.window.platformBrightness; 47 } 48 if (AppLifecycleState.resumed == state) { 49 if (ui.window.platformBrightness != justBeforeMode) { 50 setState(() {}); 51 } 52 } 53 } 54 55 56 Widget build(BuildContext context) { 57 return Scaffold( 58 body: ui.window.platformBrightness == Brightness.light 59 ? 60 // lightMode 61 GoogleMap( 62 mapType: MapType.normal, 63 initialCameraPosition: const CameraPosition( 64 target: LatLng(37.42796133580664, -122.085749655962), 65 ), 66 onMapCreated: (GoogleMapController controller) async { 67 _controller.complete(controller); 68 }, 69 ) 70 : 71 // darkMode 72 GoogleMap( 73 mapType: MapType.normal, 74 initialCameraPosition: const CameraPosition( 75 target: LatLng(37.42796133580664, -122.085749655962), 76 ), 77 onMapCreated: (GoogleMapController controller) async { 78 final darkGoogleMapStyle = await rootBundle 79 .loadString('assets/jsons/dark_map_style.json'); 80 await controller.setMapStyle(darkGoogleMapStyle); 81 _controller.complete(controller); 82 }, 83 ), 84 ); 85 } 86} 87
補足情報(FW/ツールのバージョンなど)
[✓] Flutter (Channel stable, 3.7.10, on macOS 13.3.1)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
[✓] Android Studio (version 2021.3)
[✓] VS Code (version 1.73.0)

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/05/24 03:37