如何在Flutter中创建侧边栏菜单,以便选择菜单会更改主面板小部件?

问题描述

我想创建与扑了侧边栏菜单的应用程序,但不知道什么时候选择菜单项如何更改主面板的内容

这是基本的主屏幕

class MainScreen extends StatelessWidget {
  static const routeName = '/mainScreen';
  final leftSection = new Container(
    child: new Sidebar(),);
  final middleSection = new Expanded(
    child: new DetailPage1(),);
  final rightSection = new Container(
    child: new Sidebar(),);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Container(
        child: new Row(
          children: <Widget>[leftSection,middleSection,rightSection],),);
  }
}

这是侧边栏

class Sidebar extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Drawer(
      child: ListView(
        padding: EdgeInsets.zero,children: <Widget>[
          DrawerHeader(
            child: Text(
              'Side menu',style: TextStyle(color: Colors.white,fontSize: 25),decoration: Boxdecoration(
                color: Colors.green,image: decorationImage(
                    fit: BoxFit.fill,image: Assetimage('assets/images/cover.jpg'))),ListTile(
            leading: Icon(Icons.input),title: Text('Welcome'),onTap: () => {},ListTile(
            leading: Icon(Icons.verified_user),title: Text('Profile'),onTap: () => {Navigator.of(context).pop()},ListTile(
            leading: Icon(Icons.settings),title: Text('Settings'),ListTile(
            leading: Icon(Icons.border_color),title: Text('Feedback'),ListTile(
            leading: Icon(Icons.exit_to_app),title: Text('logout'),],);
  }
}

如何连接东西,以便更改MainScreen middleSection的内容

我正在考虑创建某种全局变量,该全局变量可以具有MainScreen可以观察的变量集,然后调用一个函数来替换middleSection的容器子级。

Flutter为此有一些设计模式吗?这是正确的方法吗?如果是这样,那么:

  1. 如何在Flutter中创建全局变量
  2. 如何观察Flutter中全局变量的变化?

我熟悉SwiftUI以及Combine和ObservableObject等-在Flutter或Dart中是否有类似的构造可用于实现相同的目的?

谢谢

解决方法

使用pushReplacement重新浏览到主页并传递要在主屏幕中更改的数据:

Navigator.pushReplacement(context,MaterialPageRoute(builder: (BuildContext    
  context) => MainScreen(
  // pass your data to be changed on main screen
  )));
}