Google Maps for Flutter ウィジェットを使用しています。私のアプリでは、BottomNavigationBarのいずれかのタブを介してマップが表示されます。
そして、私は次の問題を抱えています:
ユーザーがマップのタブを離れたときと同じようにマップを保持したいので、後でマップに戻ったときにも引き続き作業できます。
しようとしました:
(私は何か間違ったことをしたかもしれないことを認めます)
最後の試行のコード:
class MapScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() => MapScreenState();
}
class MapScreenState extends State<MapScreen> with AutomaticKeepAliveClientMixin {
GoogleMapController mapController;
@override
bool get wantKeepAlive => true;
@override
Widget build(BuildContext context) {
super.build(context);
return Scaffold(
appBar: AppBar(
title: const Text("Map"),
),
body: GoogleMap(
onMapCreated: _onMapCreated,
)
);
}
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
updateKeepAlive();
}
}
そのため、MapScreenを変更せずにそのまま維持する方法、またはユーザーがMapScreenに戻ったときに何らかの方法でその状態を保存して復元する方法が必要です。または、問題を解決する他の何か。
IndexedStack を使用します
例えば:
Class _ExamplePageState extends State<ExamplePage> {
int _bottomNavIndex = 0;
final List<Widget> _children = [
WidgetOne(),
WidgetTwo(),
GoogleMap(),
]
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _bottomNavIndex,
children: _children,
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _bottomNavIndex,
onTap: (index) {
if (_bottomNavIndex == index) return;
setState(() {
_bottomNavIndex = index;
});
}
items: [ ... ]
),
);
}
}