单击后退按钮时颤振如何执行
Flutter how to execute when clicking back button
我有一个从底部选项卡导航调用的页面,它执行一个 initState 函数,然后我通过单击按钮导航到一个页面,该页面包含详细信息和要执行的操作,但是当我单击后退按钮转到原始页面时, initState 不会再 运行 了,我发现因为当你把一个放在最上面时 Flutter 不会破坏页面,因为 NAV 不在新页面上,因为它不在菜单中,我该怎么做initState 运行 再次点击后退按钮,或者是否有另一种方式来监听从后退按钮导航和 运行 需要更新数据的代码?
任何帮助都会很棒。
您可以覆盖 AppBar
上的默认后退箭头,然后指定您希望 return 在调用 Navigator.pop
时触发状态更改的值:
伪代码
所以您需要在导航按钮的 onPressed
回调中包含类似的东西
onPressed: ()async{
var nav = await Navigator.of(context).push(newRoute);
if(nav==true||nav==null){
//change the state
}
},
在你的新路线中你应该有这样的东西
new AppBar(
leading: new IconButton(
icon: new Icon(Icons.arrow_back),
onPressed: (){Navigator.pop(context,true)}
),
我正在检查 null
或 true
这两个值,因为当用户点击 android 屏幕上的返回按钮(屏幕底部)。我也相信 null 也会被 Flutter 中的默认 BackButton returned,所以你实际上不需要覆盖 leading
属性,但我自己没有检查过,所以它可能值得一试。
您可以使用 WillPopScope 收听流行音乐(创建一个注册回调的小部件,以否决用户尝试关闭封闭的 [ModalRoute]。-> 来自文档):
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
print('Backbutton pressed (device or appbar button), do whatever you want.');
//trigger leaving and use own data
Navigator.pop(context, false);
//we need to return a future
return Future.value(false);
},
child: Scaffold(
...
),
);
}
希望我答对了你的问题,这对你有帮助:)!
//if you want to perform any operation on back button so you can use WillPopScope Widget and managed your code inside onWillpop method
@override
Widget build(BuildContext context) {
return WillPopScope(
child:Column()),
onWillPop: onBackPress);
}
// this is onBackPress method
Future<bool> onBackPress() {
// your code
return Future.value(false);
}
我有一个从底部选项卡导航调用的页面,它执行一个 initState 函数,然后我通过单击按钮导航到一个页面,该页面包含详细信息和要执行的操作,但是当我单击后退按钮转到原始页面时, initState 不会再 运行 了,我发现因为当你把一个放在最上面时 Flutter 不会破坏页面,因为 NAV 不在新页面上,因为它不在菜单中,我该怎么做initState 运行 再次点击后退按钮,或者是否有另一种方式来监听从后退按钮导航和 运行 需要更新数据的代码?
任何帮助都会很棒。
您可以覆盖 AppBar
上的默认后退箭头,然后指定您希望 return 在调用 Navigator.pop
时触发状态更改的值:
伪代码
所以您需要在导航按钮的 onPressed
回调中包含类似的东西
onPressed: ()async{
var nav = await Navigator.of(context).push(newRoute);
if(nav==true||nav==null){
//change the state
}
},
在你的新路线中你应该有这样的东西
new AppBar(
leading: new IconButton(
icon: new Icon(Icons.arrow_back),
onPressed: (){Navigator.pop(context,true)}
),
我正在检查 null
或 true
这两个值,因为当用户点击 android 屏幕上的返回按钮(屏幕底部)。我也相信 null 也会被 Flutter 中的默认 BackButton returned,所以你实际上不需要覆盖 leading
属性,但我自己没有检查过,所以它可能值得一试。
您可以使用 WillPopScope 收听流行音乐(创建一个注册回调的小部件,以否决用户尝试关闭封闭的 [ModalRoute]。-> 来自文档):
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
print('Backbutton pressed (device or appbar button), do whatever you want.');
//trigger leaving and use own data
Navigator.pop(context, false);
//we need to return a future
return Future.value(false);
},
child: Scaffold(
...
),
);
}
希望我答对了你的问题,这对你有帮助:)!
//if you want to perform any operation on back button so you can use WillPopScope Widget and managed your code inside onWillpop method
@override
Widget build(BuildContext context) {
return WillPopScope(
child:Column()),
onWillPop: onBackPress);
}
// this is onBackPress method
Future<bool> onBackPress() {
// your code
return Future.value(false);
}