正在从路由中删除参数



编辑:

感谢您的帮助,任何想知道如何将已检查的解决方案添加到您的main.dart的人。您需要将MultiProvider添加到无效的main:

void main() {
runApp(
/// Providers are above [MyApp] instead of inside it, so that tests
/// can use [MyApp] while mocking the providers
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => MyProvider()),
],
child: MyApp(),
),
);
}

我是个新手,找不到任何关于如何清除路由器参数的信息。我的问题很简单,我让用户扫描条形码并导航回注册页面。在导航器中,我添加条形码作为参数。

Navigator.of(context).push(
MaterialPageRoute(builder: (context) => RegistrationPage(),
settings: RouteSettings(arguments: code),
),
);

然后我在新页面中得到了论点

Widget build(BuildContext context) {
String barcode = ModalRoute.of(context).settings.arguments;
WidgetsBinding.instance.addPostFrameCallback((_){
if (barcode != null && barcode != "") {
_idInputControl.text = barcode;
id = barcode;

askForPersonalNr();
}
});
....

";askForPersonalNr";函数打开一个对话框,用户必须在其中输入他的号码,这样我们就可以将其连接到条形码id。

我用";导航器.of(context).op()"之后这将重新触发我的注册页面的小部件构建(条形码仍然是一个参数),并再次打开对话框。导致一个无限循环。

我在网上找不到任何东西,有人知道我做错了什么吗,或者争论不是为了这个目的吗?

这种方法有点风险,我会用提供者来做。一个简单的提供者看起来是这样的:

import 'package:flutter/foundation.dart';
class MyProvider with ChangeNotifier, DiagnosticableTreeMixin  {
int barcode = 0;
bool personalNumber = false;
/// Makes `MyProvider` readable inside the devtools by listing all of its properties
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(StringProperty('barcode', barcode));
}
//other methods and variables to store your info
}

然后,您需要在导航之前保存条形码值。。。

...
final provider = context.read<MyProvider>();
provider.barcode = barcodeValue;
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => RegistrationPage(),)
),
);
...

最后修改alertDialog:上的条件

Widget build(BuildContext context) {
final provider = context.read<MyProvider>();
WidgetsBinding.instance.addPostFrameCallback((_){
if (provider.barcode != 0 && !provider.personalNumber) {
//check this condition
_idInputControl.text = barcode;
id = barcode;

askForPersonalNr();
}
});
....

此外,请在官方提供程序页面上查看如何实现它,您必须在main中初始化提供程序。https://pub.dev/packages/provider

最新更新