我正在学习颤振,最近我设法使路线在我的项目中发挥作用。我还跟随这个例子创建了一个底部导航栏。
问题是,在按下按钮时,在onPressed()
方法中,我使用Navigator.pushNamed(context, '/endpoint_list');
访问所需的视图,但在使用导航栏时,我只调用类(fillSecondTab()
和fillThirdTab()
只是这里的文本占位符):
final List<Widget> _children = [
//Navigator.pushNamed(context, '/teacher_view'),
TeacherView(),
fillSecondTab(),
fillThirdTab(),
];
我也想使用Navigator方法访问导航栏中的视图,但它不起作用。它提示以下错误:
为什么不能在底部导航栏中使用Navigator方法?
如果我可以使用它,那么Navigator和类本身的调用有什么区别呢?
发布于 2020-11-12 11:11:40
错误是因为您已经创建了一个小部件列表,但是您正在尝试返回一个Future
(您的Navigator.pushNamed()
),要修复这个问题,您的代码应该如下所示
class MyStatefulWidget extends StatefulWidget {
MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
/// This is the private State class that goes with MyStatefulWidget.
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _selectedIndex = 0;
static const List<Widget> _widgetOptions = <Widget>[
//views you want to navigate to
Page1(),
Page2(),
Page3(),
];
void _onTabTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('BottomNavigationBar StackOverflow'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.android),
label: 'Android',
),
BottomNavigationBarItem(
icon: Icon(Icons.event),
label: 'Event',
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.green,
onTap: _onTabTapped,
),
);
}
}
结论中的
您可以使用而不是使用Navigator.pushNamed()
手动导航,这是因为BottomNavigationBar
是为导航而设计的。
希望这会有所帮助:)
https://stackoverflow.com/questions/64802588
复制相似问题