app主页面实现以下代码:
DateTime? _lastPressedAt; // 上次点击时间
// 退出app
Future<bool> exitApp() async {
if (_lastPressedAt == null ||
DateTime.now().difference(_lastPressedAt!) > Duration(seconds: 2)) {
Fluttertoast.showToast(
msg: "再按一次退出应用",
backgroundColor: Colors.grey,
toastLength: Toast.LENGTH_SHORT,
fontSize: 14);
//两次点击间隔超过2秒则重新计时
_lastPressedAt = DateTime.now();
return Future.value(false);
}
return Future.value(true);
/*return showDialog(
context: context,
builder: (context) => new AlertDialog(
content: new Text("是否退出"),
actions: <Widget>[
new FlatButton(
onPressed: () => Navigator.of(context).pop(false),
child: new Text("取消")),
new FlatButton(
onPressed: () {
Navigator.of(context).pop(true);
},
child: new Text("确定"))
],
));*/
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: WillPopScope(
onWillPop: exitApp,///通过willpopScope拦截,实现原生类似效果
child: PageView(
physics: NeverScrollableScrollPhysics(),
controller: _controller,
children: [
HomePage(),
SearchPage(hideLeft: true),
TravelPage(),
MyPage()
],
),
),
bottomNavigationBar: BottomNavigationBar(
selectedFontSize: 12,
unselectedFontSize: 12,
selectedLabelStyle: TextStyle(color: _activeColor),
unselectedLabelStyle: TextStyle(color: _defaultColor),
currentIndex: _currentIndex,
type: BottomNavigationBarType.fixed,
onTap: (index) {
_controller.jumpToPage(index);
setState(() {
_currentIndex = index;
});
},
items: [
_bottomItem(Icons.home, '首页', 0),
_bottomItem(Icons.search, '搜索', 1),
_bottomItem(Icons.camera_alt, '旅拍', 2),
_bottomItem(Icons.account_circle, '我的', 3),
],
),
);
}