我是 Flutter 的新手。我正在使用底部导航视图。在Dashboard类中,有底部导航。底部导航的第一个是具有选项卡视图的Home类。tabview 的第一页是NewRequest类。当应用程序第一次运行时,标签视图的第一页没有加载,但是当进入其他类并返回Home时,新请求被加载。首次运行应用程序时如何加载 tabview 第一页?我已经实现如下:
class Dashboard extends StatefulWidget{
@override
State<StatefulWidget> createState() {
return _DashboardState();
}
}
class _DashboardState extends State<Dashboard>{
int _currentIndex=0;
bool home=true;
final tabs=[
Home(),
Center(child: Text('History')),
Center(child: Text('Wallet')),
Center(child: Text('More')),
];
final _title=[
Center(child: Text("Dashboard"),),
Center(child:Text("History"),),
Center(child:Text("Wallet"),),
Center(child:Text("More"),),];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: home ? null :AppBar(
title: _title[_currentIndex],
automaticallyImplyLeading: false,
),
body: Container(
child: tabs[_currentIndex],
),
bottomNavigationBar: _bottomNavigationBar(),
);
}
Widget _bottomNavigationBar(){
return BottomNavigationBar(
currentIndex: _currentIndex,
type: BottomNavigationBarType.fixed,
backgroundColor: Theme.of(context).primaryColor,
selectedItemColor: Theme.of(context).accentColor,
unselectedItemColor: Colors.white,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text("Home"),
),
BottomNavigationBarItem(
icon: Icon(Icons.history),
title: Text("History"),
),
BottomNavigationBarItem(
icon: Icon(Icons.account_balance_wallet),
title: Text("Wallet"),
),
BottomNavigationBarItem(
icon: Icon(Icons.menu),
title: Text("More"),
)
],
onTap: (index){
setState(() {
_currentIndex=index;
if (index==0) {
home=true;
}else{
home=false;
}
});
},
) ;
}
}
我的主页
class Home extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _HomeState();
}
}
class _HomeState extends State<Home> {
int index;
@override
void initState() {
super.initState();
index = 0;
}
final pages = [
NewRequest(),
new Column(
children: <Widget>[new Text("Accepted Page")],
),
new Column(
children: <Widget>[new Text("Cooking Page")],
),
new Column(
children: <Widget>[new Text("Cooked Page")],
)
];
final tabs = [
Text('Request'),
Text('Accepted'),
Text('Cooking'),
Text('Cooked'),
];
@override
Widget build(BuildContext context) {
return new MaterialApp(
debugShowCheckedModeBanner: false,
home: new DefaultTabController(
length: 4,
initialIndex: 0,
child: new Scaffold(
appBar: new PreferredSize(
preferredSize: Size.fromHeight(56.0),
child: new Container(
color: Theme.of(context).primaryColor,
child: new SafeArea(
child: Column(
children: <Widget>[
new Expanded(
child: new Container(
child: new TabBar(
unselectedLabelColor: Colors.white,
labelColor: Theme.of(context).accentColor,
indicatorColor: Theme.of(context).accentColor,
isScrollable: true,
tabs: List<Widget>.generate(4, (index) {
return tabs[index];
}),
)),
),
],
),
),
),
),
body: TabBarView(
children: [
NewRequest(),
new Column(
children: <Widget>[new Text("Accepted Page")],
),
new Column(
children: <Widget>[new Text("Cooking Page")],
),
new Column(
children: <Widget>[new Text("Cooked Page")],
)
],
)),
),
);
}
新请求页面
class NewRequest extends StatelessWidget{
@override
Widget build(BuildContext context) {
return ListView(
shrinkWrap: true,
children: <Widget>[_CardView(), _CardView(), _CardView(), _CardView()],
);
}
}
Widget _CardView() {
return Card(
margin: EdgeInsets.all(15.0),
elevation: 15.0,
child: Container(
height: 185,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
Expanded(
child: FittedBox(
child: Image.asset('assets/images/momo.jpg'),
fit: BoxFit.fill,
),
),
Container(
child: Expanded(
child: Container(
margin: EdgeInsets.only(left: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text("Momo", style: TextStyle(fontSize: 16.0))
],
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
"Rs.100",
style: TextStyle(fontSize: 16.0),
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
"2 Plate",
style: TextStyle(fontSize: 16.0),
)
],
),
],
),
)))
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Expanded(
child: Container(
margin: EdgeInsets.only(
left: 5.0, right: 5.0, top: 5.0, bottom: 2.0),
child: RaisedButton(
color: Colors.red,
child: Text(
"Reject",
style: TextStyle(color: Colors.white),
),
onPressed: () => null,
),
)),
Expanded(
child: Container(
margin: EdgeInsets.only(
left: 5.0, right: 5.0, top: 5.0, bottom: 0.0),
child: RaisedButton(
color: Colors.green,
child: Text(
"Approve",
style: TextStyle(color: Colors.white),
),
onPressed: () => null,
),
)),
])
],
),
));
}