繁体   English   中英

Flutter 返回 Main.dart 屏幕而不是关闭应用程序

[英]Flutter returns Main.dart screen instead of closing the Application

我是 flutter 的新手,我遇到了一个错误 - 基本上,我有两个屏幕,一个是我的 main.dart 文件的登录屏幕,第二个是主屏幕。所以我只是尝试实现“双击后退按钮退出”在我的主屏幕上。为此,我使用了“WillPopScope”,但是当我单击后退按钮时,将我扔到登录屏幕而不是关闭应用程序。

这是我的代码 -

主屏幕 -

return Scaffold(
      bottomNavigationBar: bottomnav(),
      body: WillPopScope(
        onWillPop: () async {
          final difference = DateTime.now().difference(timeBackPressed);
          final isExitWarning = difference >= Duration(seconds: 2);
          timeBackPressed = DateTime.now();

          if (isExitWarning) {
            final message = "Press Back Again To Exit";
            Fluttertoast.showToast(
                msg: message,
                fontSize: 18,
                backgroundColor: Colors.white,
                textColor: Colors.black.withOpacity(0.95));
            return false;
          } else {
            Fluttertoast.cancel();
            return true;
          }
        },
        child: SingleChildScrollView(
            reverse: false,
            scrollDirection: Axis.vertical,
            child: Container(
                width: double.infinity,
                //height: MediaQuery.of(context).size.height,
                child: Column(children: <Widget>[
                  Padding(
                    padding: EdgeInsets.only(
                        top: 30, bottom: 12, left: 20, right: 0),
                    child: Align(
                      alignment: Alignment.bottomLeft,
                      child: Column(
                          mainAxisAlignment: MainAxisAlignment.start,
                          children: [
                            Text("Hello! Sudeep",
                                style: TextStyle(
                                    fontSize: 20,
                                    fontWeight: FontWeight.w800,
                                    color: Color(0xfffef9e7),
                                    fontFamily: 'Lato')),
                            Text("Arya Nagar,Bhind",
                                style: TextStyle(
                                    fontSize: 12,
                                    fontWeight: FontWeight.w600,
                                    fontFamily: 'Lato',
                                    color: Color(0xff808b96)))
                          ]),
                    ),
                  ),
                  Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                        Container(
                          width: MediaQuery.of(context).size.width / 1.45,
                          height: 50,
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(8.0),
                            color: Color(0xff17202a),
                          ),
                          child: TextField(
                            style: GoogleFonts.inter(
                              color: Color(0xff808b96),
                              fontSize: 19,
                              //fontFamily: 'Lato',
                            ),
                            cursorColor: Color(0xff808b96),
                            decoration: InputDecoration(
                                filled: true,
                                fillColor: Color(0xff212121),
                                border: OutlineInputBorder(
                                  borderRadius: BorderRadius.circular(11.0),
                                  borderSide: BorderSide(
                                      style: BorderStyle.none, width: 0),
                                ),
                                hintText: "Search Here",
                                hintStyle: TextStyle(
                                    fontSize: 18,
                                    color: Color(0xff808b96),
                                    fontWeight: FontWeight.w400),
                                prefixIcon: Icon(Icons.search,
                                    color: Color(0xff808b96), size: 30)),
                          ),
                        ),
                        Container(
                            width: MediaQuery.of(context).size.width / 5.9,
                            height: 56.0,
                            padding: EdgeInsets.only(
                                top: 1.6, bottom: 0, right: 12.0, left: 5.6),
                            decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(15.0),
                              color: Color(0xff212121),
                            ),
                            child: IconButton(
                                onPressed: () {},
                                icon: Icon(Icons.qr_code,
                                    color: Color(0xff808b96), size: 39.0))),
                      ]),
                  SizedBox(height: 30.0),
                  Container(
                    width: 364,
                    height: 200,
                    child: ListView.builder(
                        scrollDirection: Axis.horizontal,
                        itemCount: itemimg.length,
                        itemBuilder: (context, index) {
                          return Padding(
                            padding: EdgeInsets.only(right: 22, left: 6),
                            child: Card(
                                clipBehavior: Clip.antiAlias,
                                shape: RoundedRectangleBorder(
                                    borderRadius: BorderRadius.circular(22)),
                                child: itemimg[index]),
                          );
                        }),
                  ),
                  SizedBox(height: 29),
                  Visibility(
                      child: Column(children: [
                    Row(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Padding(
                            padding: EdgeInsets.only(
                                left: 29, right: 10, bottom: 14),
                            child: Icon(Icons.thumb_up_alt_outlined,
                                color: Colors.blue),
                          ),
                          Text("Top Picks for u",
                              style: GoogleFonts.inter(
                                fontSize: 20,
                                fontWeight: FontWeight.w800,
                                color: Color(0xff808b96),
                              )),
                        ]),
                    Padding(
                      padding: EdgeInsets.only(left: 20),
                      child: Container(
                        height: 200,
                        child: ListView.separated(
                            clipBehavior: Clip.antiAlias,
                            shrinkWrap: true,
                            scrollDirection: Axis.horizontal,
                            separatorBuilder: (context, _) =>
                                SizedBox(width: 10),
                            itemCount: reslst.length,
                            itemBuilder: (context, index) {
                              return Card(
                                  color: Colors.transparent,
                                  shape: RoundedRectangleBorder(
                                    borderRadius: BorderRadius.circular(18.0),
                                  ),
                                  child: Container(
                                      width: 180.0,
                                      decoration: BoxDecoration(
                                        borderRadius:
                                            BorderRadius.circular(18.0),
                                      ),
                                      child: Column(
                                          mainAxisAlignment:
                                              MainAxisAlignment.start,
                                          crossAxisAlignment:
                                              CrossAxisAlignment.start,
                                          children: [
                                            InkWell(
                                                onTap: () {
                                                  Navigator.push(
                                                      context,
                                                      MaterialPageRoute(
                                                        builder: (context) =>
                                                            menu(),
                                                      ));
                                                },
                                                child: ClipRRect(
                                                    borderRadius:
                                                        BorderRadius.circular(
                                                            18.0),
                                                    child: reslst[index])),
                                            Padding(
                                              padding: EdgeInsets.only(
                                                  left: 10, top: 7),
                                              child: Text(txtlst[index],
                                                  style: GoogleFonts.inter(
                                                      fontSize: 17,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff263238))),
                                            ),
                                            Row(children: [
                                              Padding(
                                                padding: EdgeInsets.only(
                                                    top: 5,
                                                    bottom: 5,
                                                    left: 10,
                                                    right: 3.5),
                                                child: Icon(Icons.grade,
                                                    size: 15,
                                                    color: Colors.green),
                                              ),
                                              Text("5.0",
                                                  style: GoogleFonts.inter(
                                                      fontSize: 14,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff424242))),
                                            ]),
                                            Row(children: [
                                              Padding(
                                                padding: EdgeInsets.only(
                                                    top: 5,
                                                    bottom: 5,
                                                    left: 10,
                                                    right: 3.5),
                                                child: Icon(Icons.timer,
                                                    size: 15,
                                                    color: Colors.orange),
                                              ),
                                              Text("45 mins",
                                                  style: GoogleFonts.inter(
                                                      fontSize: 14,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff424242))),
                                            ]),
                                          ])));
                            }),
                      ),
                    )
                  ])),
                  SizedBox(height: 25),
                  Visibility(
                      child: Column(children: [
                    Row(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Padding(
                            padding: EdgeInsets.only(
                                left: 29, right: 10, bottom: 14),
                            child: Icon(Icons.timer, color: Colors.orange),
                          ),
                          Text("Less Waiting Time",
                              style: GoogleFonts.inter(
                                fontSize: 20,
                                fontWeight: FontWeight.w800,
                                color: Color(0xff808b96),
                              )),
                        ]),
                    Padding(
                      padding: EdgeInsets.only(left: 20),
                      child: Container(
                        height: 200,
                        child: ListView.separated(
                            clipBehavior: Clip.antiAlias,
                            shrinkWrap: true,
                            scrollDirection: Axis.horizontal,
                            separatorBuilder: (context, _) =>
                                SizedBox(width: 10),
                            itemCount: reslst.length,
                            itemBuilder: (context, index) {
                              return Card(
                                  color: Colors.transparent,
                                  shape: RoundedRectangleBorder(
                                    borderRadius: BorderRadius.circular(18.0),
                                  ),
                                  child: Container(
                                      width: 180.0,
                                      decoration: BoxDecoration(
                                        borderRadius:
                                            BorderRadius.circular(18.0),
                                      ),
                                      child: Column(
                                          mainAxisAlignment:
                                              MainAxisAlignment.start,
                                          crossAxisAlignment:
                                              CrossAxisAlignment.start,
                                          children: [
                                            InkWell(
                                                onTap: () {
                                                  debugPrint("clicked");
                                                },
                                                child: ClipRRect(
                                                    borderRadius:
                                                        BorderRadius.circular(
                                                            18.0),
                                                    child: reslst[index])),
                                            Padding(
                                              padding: EdgeInsets.only(
                                                  left: 10, top: 7),
                                              child: Text(txtlst[index],
                                                  style: GoogleFonts.inter(
                                                      fontSize: 17,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff263238))),
                                            ),
                                            Row(children: [
                                              Padding(
                                                padding: EdgeInsets.only(
                                                    top: 5,
                                                    bottom: 5,
                                                    left: 10,
                                                    right: 3.5),
                                                child: Icon(Icons.grade,
                                                    size: 15,
                                                    color: Colors.green),
                                              ),
                                              Text("5.0",
                                                  style: GoogleFonts.inter(
                                                      fontSize: 14,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff424242))),
                                            ]),
                                            Row(children: [
                                              Padding(
                                                padding: EdgeInsets.only(
                                                    top: 5,
                                                    bottom: 5,
                                                    left: 10,
                                                    right: 3.5),
                                                child: Icon(Icons.timer,
                                                    size: 15,
                                                    color: Colors.orange),
                                              ),
                                              Text("45 mins",
                                                  style: GoogleFonts.inter(
                                                      fontSize: 14,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff424242))),
                                            ]),
                                          ])));
                            }),
                      ),
                    )
                  ])),
                  SizedBox(height: 25),
                  Visibility(
                      child: Column(children: [
                    Row(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Padding(
                            padding: EdgeInsets.only(
                                left: 29, right: 10, bottom: 14),
                            child:
                                Icon(Icons.grade_outlined, color: Colors.green),
                          ),
                          Text("Top Rated",
                              style: GoogleFonts.inter(
                                fontSize: 20,
                                fontWeight: FontWeight.w800,
                                color: Color(0xff808b96),
                              )),
                        ]),
                    Padding(
                      padding: EdgeInsets.only(left: 20),
                      child: Container(
                        height: 200,
                        child: ListView.separated(
                            clipBehavior: Clip.antiAlias,
                            shrinkWrap: true,
                            scrollDirection: Axis.horizontal,
                            separatorBuilder: (context, _) =>
                                SizedBox(width: 10),
                            itemCount: reslst.length,
                            itemBuilder: (context, index) {
                              return Card(
                                  color: Colors.transparent,
                                  shape: RoundedRectangleBorder(
                                    borderRadius: BorderRadius.circular(18.0),
                                  ),
                                  child: Container(
                                      width: 180.0,
                                      decoration: BoxDecoration(
                                        borderRadius:
                                            BorderRadius.circular(18.0),
                                      ),
                                      child: Column(
                                          mainAxisAlignment:
                                              MainAxisAlignment.start,
                                          crossAxisAlignment:
                                              CrossAxisAlignment.start,
                                          children: [
                                            InkWell(
                                                onTap: () {
                                                  debugPrint("clicked");
                                                },
                                                child: ClipRRect(
                                                    borderRadius:
                                                        BorderRadius.circular(
                                                            18.0),
                                                    child: reslst[index])),
                                            Padding(
                                              padding: EdgeInsets.only(
                                                  left: 10, top: 7),
                                              child: Text(txtlst[index],
                                                  style: GoogleFonts.inter(
                                                      fontSize: 17,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff263238))),
                                            ),
                                            Row(children: [
                                              Padding(
                                                padding: EdgeInsets.only(
                                                    top: 5,
                                                    bottom: 5,
                                                    left: 10,
                                                    right: 3.5),
                                                child: Icon(Icons.grade,
                                                    size: 15,
                                                    color: Colors.green),
                                              ),
                                              Text("5.0",
                                                  style: GoogleFonts.inter(
                                                      fontSize: 14,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff424242))),
                                            ]),
                                            Row(children: [
                                              Padding(
                                                padding: EdgeInsets.only(
                                                    top: 5,
                                                    bottom: 5,
                                                    left: 10,
                                                    right: 3.5),
                                                child: Icon(Icons.timer,
                                                    size: 15,
                                                    color: Colors.orange),
                                              ),
                                              Text("45 mins",
                                                  style: GoogleFonts.inter(
                                                      fontSize: 14,
                                                      fontWeight:
                                                          FontWeight.w600,
                                                      color:
                                                          Color(0xff424242))),
                                            ]),
                                          ])));
                            }),
                      ),
                    )
                  ])),  ));
                

   Navigator.pushReplacement(context, MaterialPageRoute(builder: 
(context)=>HomeScreen()));

从LoginScreen路由到HomeScreen,路由后配置上一个路由。

据我了解,您有登录屏幕和主屏幕,您希望在用户在主屏幕上时关闭应用程序,而不是将它们返回到登录屏幕。

您可以通过双击时调用下面的函数来解决它。

SystemNavigator.pop();

AlertDialog 的示例:

onWillPop: () {
  return showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) {
      return AlertDialog(
        title: Text('Watch out!', style: TextStyle(color: Colors.black)),
        content: Text('Do you really want to leave?', style: TextStyle(color: Colors.black)),
        actions: <Widget>[
          TextButton(
            child: Text('Yes!'),
            onPressed: () {SystemNavigator.pop();}
          ),
          TextButton(
            child: Text('No!'),
            onPressed: () {Navigator.of(context).pop();}
          )
        ]
      );
    }
  );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM