我有一个包含多个路线的应用程序!我想避免在所有屏幕中使用相同的代码。
为此,我创建了一个名为template_widget.dart
的文件。
在其中,我将BottomNavigationBar移至如下位置:
class Template {
static Widget buildBottomAppBar(model, _selectedIndex, context) {
return BottomNavigationBar(
type: BottomNavigationBarType.fixed,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Home'),
),
BottomNavigationBarItem(
icon: Icon(Icons.business), title: Text('Business')),
BottomNavigationBarItem(
icon: Icon(Icons.school), title: Text('School')),
BottomNavigationBarItem(
icon: Icon(Icons.account_box), title: Text('Account')),
],
currentIndex: _selectedIndex,
fixedColor: Theme.of(context).primaryColor,
onTap: (int index) => {
model.setSelectedIndex(index)
},
);
}
}
现在,我通过以下方式将其添加到屏幕上:
Widget _buildPageContent(AppModel model) {
return Scaffold(
appBar: appBar(model),
bottomNavigationBar:
Template.buildBottomAppBar(model, _selectedIndex, context),
body: _buildSendForm(model),
drawer: Template.drawer(model, context),
);
}
selectedIndex在scope_model的所有路由中共享。
我遇到的问题是应用程序的setState(),当bottomNav项为Template class
或scope_model
时,我不知道该怎么做点击。
onItemTapped(index, context) {
print('tab');
setState(() {
switch (index) {
case 0:
Navigator.pushNamed(context, '/home');
break;
case 1:
Navigator.pushNamed(context, '/business');
break;
case 2:
Navigator.pushNamed(context, '/school');
break;
case 3:
Navigator.pushNamed(context, '/account');
break;
}
});
}
如何从上述结构中设置以下状态,这甚至是解决此问题的正确方法?