如何解决参数为 null 而不是带有 ModalRoute.of() 的 id
我正在使用 Flutter 和 Firebase 开发移动应用。
我正在尝试使用 pushNamed() 并传递一个参数。 (身份证)
我不知道如何解决我的问题。
这是我的代码:
@override
void didChangeDependencies() {
if (_isInit) {
print(ModalRoute.of(context).settings.arguments);
final productId = ModalRoute.of(context).settings.arguments;
if (productId != null) {
_editedAngebot = Provider.of<Angebote>(context).findByID(productId);
_initValues = {
'titel': _editedAngebot.titel,'beschreibung': _editedAngebot.beschreibung,'semester': _editedAngebot.semester.toString(),'fach': _editedAngebot.fach,'abteilung': _editedAngebot.abteilung,};
}
}
_isInit = false;
super.didChangeDependencies();
}
还有另一个类,我在那里设置了参数。我的“Angebot”对象只有一个默认构造函数。
trailing: isAllowed()
? IconButton(
icon: Icon(Icons.edit),onPressed: () {
Navigator.of(context).maybePop();
Navigator.of(context)
.pushNamed('/editAngebot',arguments: id);
})
为什么我的 ID 为空?
解决方法
您的 ID 为空,因为您先弹出一个页面,然后再推送新页面。
使用 pushReplacementNamed()
这是一个代码示例
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255,18,32,47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,home: FirstPage(),routes:{
Secondpage.routeName:(context)=>Secondpage(),}
);
}
}
class FirstPage extends StatelessWidget {
final String id = '01';
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child:ElevatedButton(
child: Text('GoTo secondPage'),onPressed: (){
Navigator.of(context).pushReplacementNamed(Secondpage.routeName,arguments: id);
},))
);
}
}
class Secondpage extends StatelessWidget {
static const routeName = 'secondpage';
@override
Widget build(BuildContext context) {
final data = ModalRoute.of(context).settings.arguments as String;
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
Center(child:Text('$data')),ElevatedButton(
child: Text('GoTo FirstPage'),onPressed: (){
Navigator.of(context).pop();
},)
],)
);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。