【发布时间】:2021-04-29 06:35:39
【问题描述】:
所以,我有一个“主页”页面,它有一个脚手架、appbar、body 和 bottomNavigationBar。 正文作为小部件从列表中加载,具体取决于在底部导航栏上单击的内容。 我希望能够在当前加载到父正文中的子小部件中按下某些内容,并将父的正文小部件更改为另一个子小部件,同时也将值传递给子小部件。 可以把它想象成在浏览器中按下 iframe 中的链接,只是 iframe 发生变化,您可以传递像 ?id=12 这样的值。
这是“主页”:
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _selectedIndex = 0;
final List<Widget> _children = [
Page1(),
Page2(),
Page3(),
Page4()
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: <Widget>[
TextButton(
onPressed: () {},
child: Text("Log Out", style: TextStyle(color: Colors.white)),
),
],
backgroundColor: Colors.blue.shade900,
),
body: _children[_selectedIndex],
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.work),
label: 'Page 1',
),
BottomNavigationBarItem(
icon: Icon(Icons.inventory),
label: 'Page 2',
),
BottomNavigationBarItem(
icon: Icon(Icons.alt_route),
label: 'Page 3',
),
BottomNavigationBarItem(
icon: Icon(Icons.article),
label: 'Page 4',
),
],
currentIndex: _selectedIndex,
onTap: _onItemTapped,
type: BottomNavigationBarType.fixed,
),
);
}
}
这是由 _children[_selectedIndex] 通过按下底部导航栏中的按钮之一来定义的子小部件
class Page1 extends StatefulWidget {
@override
_Page1State createState() => _Page1State();
}
class _Page1State extends State<Page1> {
@override
Widget build(BuildContext context) {
return Text("Click Here",onPressed:(){
//objective here is to open Page5 in the body of HomePage(not in _children list of homepage, and pass it some value (ie. id 12))
},
),
);
}
}
为了举例说明,这就是我希望在 Page5 中的内容(应该加载到 HomePage 的正文中
class Page5 extends StatefulWidget {
@override
_Page5State createState() => _Page5State();
}
class _Page5State extends State<Page5> {
int _variableFromPage1;
@override
Widget build(BuildContext context) {
return Text(_variableFromPage1);
}
}
谁能建议最好的方法?
【问题讨论】:
标签: flutter flutter-navigation flutter-state