flutter app项目退出应用

该代码段展示了在Flutter中如何实现APP主页面的退出功能,通过记录上次点击时间判断两次点击的间隔来防止误操作。同时,定义了一个BottomNavigationBar,包含了多个页面选项。用户在尝试退出时会收到提示,需短时间内连续两次点击才能退出。此外,还展示了自定义的对话框提示确认退出。
摘要由CSDN通过智能技术生成
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),
      ],
    ),
  );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值