android - Flutter 返回 Main.dart 屏幕而不是关闭应用程序
问题描述
我是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()));
to Route from LoginScreen to HomeScreen,它在路由之后处理之前的路由。
推荐阅读
- azure-devops - 如何使用关联的 VS Enterprise 订阅增加 Azure DevOps Services 上自托管并行作业的数量?
- python - Django url - 使用 {% include %} 时不允许直接打开
- javascript - 电子窗口显示屏幕截图
- powershell - 具有错误处理功能的 Powershell TCP 客户端
- php - Loop Year and Months
- c - 从 2d char 数组指针中获取一个字符,该指针是 C 中结构指针的属性
- webpack - 如何使用 webpack-cli init 指定 webpack 配置文件名?
- javascript - jQuery如何找到存储在数组中的最后一个HTML元素
- virtocommerce - Virto Commerce 无法在 B2B 主题中添加报价功能
- python-3.x - Calling vcvarsall.bat in Python and using its env variables