Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 带参数的命名路由_Flutter_Dart - Fatal编程技术网

Flutter 带参数的命名路由

Flutter 带参数的命名路由,flutter,dart,Flutter,Dart,我在命名路线方面遇到了一些困难 我正在尝试获取一些Firebase数据,以便在onPress保存后显示在屏幕上 Widget build(BuildContext context) { DocumentSnapshot document; final thisContact = Contact.fromSnapshot(document); ... routes: <String, WidgetBuilder>{ '/second': (BuildContext cont

我在命名路线方面遇到了一些困难

我正在尝试获取一些Firebase数据,以便在
onPress
保存后显示在屏幕上

  Widget build(BuildContext context) {

DocumentSnapshot document;
final thisContact = Contact.fromSnapshot(document);

...

routes: <String, WidgetBuilder>{ 
'/second': (BuildContext context) => ViewContact(contact: thisContact)
保存的页面

onPressed: () async {
              final uid =
                  await TheProvider.of(context).auth.getCurrentUID();

              widget.contact.name = oneController.text;
              widget.contact.phoneNumber = int.tryParse(twoController.text);
              widget.contact.location = threeController.text;
              widget.contact.rating = int.tryParse(fourController.text);
              widget.contact.instagram = fiveController.text;
              widget.contact.birthday = int.tryParse(sixController.text);
              widget.contact.notes = sevenController.text;

              await db
                  .collection("userData")
                  .doc(uid)
                  .collection("Contacts")
                  .add(widget.contact.toJson());

              Navigator.pushReplacementNamed(context, "/second");
            })
      ],
这会导致以下错误:

对null调用了方法“data”。接收方:null尝试调用:data()


最好的方法是什么?

首先,从
ViewContact
构造函数中删除参数,因为我们将使用路由参数

routes: <String, WidgetBuilder>{ 
  '/second': (BuildContext context) => ViewContact()
ViewContact
build
方法中,或者
initState
如果是
StatefulWidget

  Contact contact = ModalRoute.of(context).settings.arguments;

首先,从
ViewContact
构造函数中删除该参数,因为我们将使用route参数

routes: <String, WidgetBuilder>{ 
  '/second': (BuildContext context) => ViewContact()
ViewContact
build
方法中,或者
initState
如果是
StatefulWidget

  Contact contact = ModalRoute.of(context).settings.arguments;


您可以共享与代码相关的“数据”。@Akif Just addeddocument为空。在传递给Contact.fromSnapshot()@Lee3 right之前,您不会对其进行更新,但如果我随后通过
MaterialPageRoute
从您设置文档值的页面共享代码,则该功能确实有效。我认为您的构造函数可能不正确。您可以共享与代码相关的“数据”。@Akif Just addeddocument为null。在传递给Contact.fromSnapshot()@Lee3 right之前,您不会对其进行更新,但如果我随后通过
MaterialPageRoute
从您设置文档值的页面共享代码,则该功能确实有效。我认为你的构造器可能是不正确的。谢谢你,李,到目前为止,你帮了我很大的忙。我刚刚实现了它,现在我得到了太多的位置参数:对于
Navigator.pushReplacementNamed
,应该有2个,但是找到了3个。另外,
ViewContact
构造函数说,
参数“contact”是必需的
——当然,如果它正常工作,可以忽略它。对不起,我留下了参数名称的一部分。答案已更新。另外,从
ViewContact
类中删除
contact
字段,以及从
ViewContact
类中的
ViewContact
构造函数中删除
contact
命名参数。好的,我已经删除了
最终联系人
ViewContact({Key-Key,@required this.contact}):super(Key:Key)来自
ViewContact
class。当我点击查看联系人时,它显示
getter'location'被调用为null。Receiver:null尝试调用:location
,即使location不是null。它也不会指向
onPress
上的
ViewContact
页面。你知道这是什么原因吗?试着传递
小部件。联系
作为路由参数。谢谢你一直以来的帮助。我刚刚实现了它,现在我得到了太多的位置参数:对于
Navigator.pushReplacementNamed
,应该有2个,但是找到了3个。另外,
ViewContact
构造函数说,
参数“contact”是必需的
——当然,如果它正常工作,可以忽略它。对不起,我留下了参数名称的一部分。答案已更新。另外,从
ViewContact
类中删除
contact
字段,以及从
ViewContact
类中的
ViewContact
构造函数中删除
contact
命名参数。好的,我已经删除了
最终联系人
ViewContact({Key-Key,@required this.contact}):super(Key:Key)来自
ViewContact
class。当我点击查看联系人时,它显示
getter'location'被调用为null。Receiver:null尝试调用:location
,即使location不是null。它也不会指向
onPress
上的
ViewContact
页面。你知道这是什么原因吗?尝试传递
小部件。联系
作为路由参数。