設置底部導航icon及名稱
final List<BottomNavigationBarItem> bottomTabs = [
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.home),
title: Text('首頁'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.search),
title: Text('分類'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.shopping_cart),
title: Text('購物車'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.profile_circled),
title: Text('會員中心'),
),
];
設置導航所對應的頁面
import 'car_shop.dart';
import 'category.dart';
import 'member.dart';
import 'home.dart';
....
final List tabBodies = [
HomePage(),
CategoryPage(),
ShopCarPage(),
MemberPage(),
];
初始化導航索引及頁面
int currentIndex = 0;
var currentPage;
@override
void initState() {
currentPage = tabBodies[currentIndex];
super.initState();
}
原理和html基本相同,通過點擊不同的導航,獲取被點擊導航的索引,實現頁面的切換。全部代碼如下所示:
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'car_shop.dart';
import 'category.dart';
import 'member.dart';
import 'home.dart';
class IndexPage extends StatefulWidget {
final Widget child;
IndexPage({Key key, this.child}) : super(key: key);
_IndexPageState createState() => _IndexPageState();
}
class _IndexPageState extends State<IndexPage> {
// 底部導航欄
final List<BottomNavigationBarItem> bottomTabs = [
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.home),
title: Text('首頁'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.search),
title: Text('分類'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.shopping_cart),
title: Text('購物車'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.profile_circled),
title: Text('會員中心'),
),
];
final List tabBodies = [
HomePage(),
CategoryPage(),
ShopCarPage(),
MemberPage(),
];
int currentIndex = 0;
var currentPage;
@override
void initState() {
currentPage = tabBodies[currentIndex];
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color.fromRGBO(244, 245, 245, 1.0),
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
currentIndex: currentIndex,
items: bottomTabs,
onTap: (index) {
setState(() {
currentIndex = index;
currentPage = tabBodies[currentIndex];
});
},
),
body: currentPage,
);
}
}
home.dart等頁面簡單實現。
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
final Widget child;
HomePage({Key key, this.child}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: Text('首頁'),
),
);
}
}
效果如下圖:
: