更改父级时如何防止GoogleMap小部件重建?

时间:2020-08-31 11:01:15

标签: flutter

这个概念很简单。我用bottomNavigationbar创建了一个脚手架,可以在点击时替换body中的ScaffoldOrderPage应该包含一个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重建的想法或概念。

1 个答案:

答案 0 :(得分:0)

我设法通过将IndexedStack的正文使用Scaffold来防止重新加载地图。这样,当我切换标签页时,所有页面都可以存储,并且不会重建。

相关问题