Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 颤振:传递到下一个屏幕的变量变为null_Flutter - Fatal编程技术网

Flutter 颤振:传递到下一个屏幕的变量变为null

Flutter 颤振:传递到下一个屏幕的变量变为null,flutter,Flutter,我想将一个变量传递到下一个屏幕,但它在下一个屏幕中变为null。我怎么了?我的代码如下 第一屏。省道 onTap: () { print(doc); // Prints out Instance of `DocumentSnapshot` on log Navigator.of(context).pushNamed('/second', arguments: doc); }, class SecondScreen exten

我想将一个变量传递到下一个屏幕,但它在下一个屏幕中变为
null
。我怎么了?我的代码如下

第一屏。省道

onTap: () {
            print(doc);  // Prints out Instance of `DocumentSnapshot` on log
            Navigator.of(context).pushNamed('/second', arguments: doc);
          },
class SecondScreen extends StatefulWidget {
  final DocumentSnapshot doc;

  SecondScreen({
    this.doc,
  });

  @override
  State<StatefulWidget> createState() {
    return _SecondScreenStateState();
  }
}

class _SecondScreenState extends State<SecondScreen> {
    @override
    void initState() {
        super.initState();
        print(widget.doc);  // Prints out null here
    }
第二个屏幕。省道

onTap: () {
            print(doc);  // Prints out Instance of `DocumentSnapshot` on log
            Navigator.of(context).pushNamed('/second', arguments: doc);
          },
class SecondScreen extends StatefulWidget {
  final DocumentSnapshot doc;

  SecondScreen({
    this.doc,
  });

  @override
  State<StatefulWidget> createState() {
    return _SecondScreenStateState();
  }
}

class _SecondScreenState extends State<SecondScreen> {
    @override
    void initState() {
        super.initState();
        print(widget.doc);  // Prints out null here
    }
class SecondScreen扩展StatefulWidget{
最终文件;
第二屏({
这个.doc,
});
@凌驾
状态createState(){
返回_SecondScreenStateState();
}
}
类_SecondScreenState扩展状态{
@凌驾
void initState(){
super.initState();
打印(widget.doc);//此处打印为空
}

我尝试了其他数据类型,但在下一个屏幕中所有变量都变为null。

您必须像这样传递参数:

  final doc = ModalRoute.of(context).settings.arguments as String;
Navigator.of(context).pushNamed('/second',参数:doc);

for your为true,但使用该方法返回当前路由,参数如下:

  final doc = ModalRoute.of(context).settings.arguments as String;

我假设
doc
是字符串。

如果您在小部件(屏幕)之间共享数据试着看看InheritedWidget。看看。你也可以看看状态管理软件包,比如provider,它很容易理解,或者bloc。从长远来看,它们会帮你节省时间。

你能为DocumentSnapshot类文件插入代码吗?谢谢,它工作得很好!简单问一下,
最终字符串变量和able=…
最终变量=…作为字符串
?我认为没有区别,在dart中可以定义变量没有类型。