Итак, у меня есть домашняя страница с шаблоном, панелью приложений, телом и bottomNavigationBar. Тело загружается как виджет из списка, в зависимости от того, что было нажато на 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] нажатием одной из кнопок в bottomNavigationBar.
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))
},
),
);
}
}
Чтобы проиллюстрировать ожидания, это то, что я хотел бы на странице 5 (которая должна быть загружена в теле HomePage
class Page5 extends StatefulWidget {
@override
_Page5State createState() => _Page5State();
}
class _Page5State extends State<Page5> {
int _variableFromPage1;
@override
Widget build(BuildContext context) {
return Text(_variableFromPage1);
}
}
Кто-нибудь может посоветовать лучший способ сделать это?