这个概念很简单。我用bottomNavigationbar
创建了一个脚手架,可以在点击时替换body
中的Scaffold
。 OrderPage
应该包含一个GoogleMap
小部件。
class MainScreen extends StatefulWidget {
final String routeName = '/home';
final List<Widget> list = [
OrderPage(),
PaymentPage(),
AccountPage(),
];
@override
MainScreenState createState() => MainScreenState();
}
class MainScreenState extends State<MainScreen> {
int index = 0;
MainScreenState();
void navigationHandler(int value) {
setState(() {
index = value;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.airport_shuttle), title: Text("Book")),
BottomNavigationBarItem(
icon: Icon(Icons.attach_money), title: Text("Payment")),
BottomNavigationBarItem(
icon: Icon(Icons.account_box), title: Text("Account")),
],
selectedItemColor: Colors.red,
currentIndex: index,
onTap: navigationHandler,
),
body: widget.list[index],
),
);
}
}
OrderPage
:
class OrderPage extends StatefulWidget {
OrderPage({Key key}) : super(key: key);
@override
OrderPageState createState() {
// TODO: implement createState
return OrderPageState();
}
}
class OrderPageState extends State<OrderPage> {
GoogleMapController mapController;
final LatLng _center = const LatLng(45.521563, -2.677433);
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("map sample app"),
backgroundColor: Colors.green[700],
),
body: GoogleMap(onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(target: _center, zoom: 11.0));,
);
}
}
此实现的当前问题是每次我更改选项卡并返回到OrderPage
时,它似乎都会自动重建,这会花费一个请求。
我曾尝试使用PageStorage保存OrderPage
的状态,但仍可以重建它。
欢迎欢迎任何有关阻止OrderPage重建的想法或概念。
答案 0 :(得分:0)
我设法通过将IndexedStack
的正文使用Scaffold
来防止重新加载地图。这样,当我切换标签页时,所有页面都可以存储,并且不会重建。