flutter - Flutter 获取从 Navigator.pop() 返回到 Drawer 的数据
问题描述
我有我的应用程序的主/主页小部件,我们称之为home.dart
。
在这个小部件中,我在我的Scaffold
小部件中定义了抽屉键。该Drawer
对象的代码在一个单独的文件中,navdrawer.dart
.
主页.dart
import 'navdrawer.dart';
. . .
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: NavDrawer(),
...
现在在里面NavDrawer
,我构建了我的Drawer
小部件,它有一个设置按钮,它链接到settings.dart
屏幕。
我喜欢这样:
导航抽屉.dart
. . .
InkWell(
onTap: () async {
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => Settings()),
);
print(result);
},
child: ListTile(
leading: Icon(
Icons.settings,
color: AppTextColor,
),
title: Text('Settings'))),
所以现在,当用户在设置页面上按下返回按钮时,Navigator.pop()
调用会将我需要的数据返回result
到navdrawer.dart
.
但我的问题是......如何将这些数据获取到我的home.dart
屏幕/状态?
解决方案
我建议您为此使用provider
,scoped_model
或其他状态管理技术。最简单(但也是毫无价值)的解决方案是使用全局变量。
但是,有一个中间立场。为简单起见,我使用dynamic
的结果类型,您最好知道Settings
返回的是什么,因此请改用该类型。
你的home.dart
档案
class _HomePageState extends State<HomePage> {
dynamic _result; // Create a variable.
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: NavDrawer(
onResult: (result) {
_result = result; // <-- This is your result.
}
),
);
}
}
在您的中添加以下内容navdrawer.dart
:
class NavDrawer extends StatelessWidget {
// Add these two lines.
final ValueChanged onResult;
NavDrawer({this.onResult});
// Other code ...
}
修改文件onTap
内的方法navdrawer.dart
:
onTap: () async {
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => Settings()),
);
onResult(result); // <-- Add this line.
}