问题描述
我想创建与扑了侧边栏菜单的应用程序,但不知道什么时候选择菜单项如何更改主面板的内容。
这是基本的主屏幕
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为此有一些设计模式吗?这是正确的方法吗?如果是这样,那么:
我熟悉SwiftUI以及Combine和ObservableObject等-在Flutter或Dart中是否有类似的构造可用于实现相同的目的?
谢谢
解决方法
使用pushReplacement重新浏览到主页并传递要在主屏幕中更改的数据:
Navigator.pushReplacement(context,MaterialPageRoute(builder: (BuildContext
context) => MainScreen(
// pass your data to be changed on main screen
)));
}