Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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,FutureBuilder_Flutter_Flutter Futurebuilder - Fatal编程技术网

Flutter 生成函数返回null,FutureBuilder

Flutter 生成函数返回null,FutureBuilder,flutter,flutter-futurebuilder,Flutter,Flutter Futurebuilder,我正在尝试创建一个测验应用程序,当用户点击一张卡片时,比如说Python卡片,用户将被重定向到Python问题屏幕 为此,我找到了“futurebuilder”,这是用来做这件事的 这里是loadjson类,我在其中使用futurebuilder并传递一个json文件来获取与用户选择的卡相关的问题 class loadjson extends StatelessWidget { @override Widget build(BuildContext context) { retu

我正在尝试创建一个测验应用程序,当用户点击一张卡片时,比如说Python卡片,用户将被重定向到Python问题屏幕

为此,我找到了“futurebuilder”,这是用来做这件事的

这里是loadjson类,我在其中使用futurebuilder并传递一个json文件来获取与用户选择的卡相关的问题

class loadjson extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: DefaultAssetBundle.of(context)
            .loadString("assets/questions/generalQ.json"),
        // ignore: missing_return
        builder: (context, snapshot) {
          List mydata = json.decode((snapshot.data.toString()));
          if (mydata == null) {
            Center(
              child: Text("Loading"),
            );
          } else {
            return quizpage(mydata: mydata);
          }
        },
      ),
    );
  }
}

在这里,我将传递从loadjson获得的数据

class _quizpageState extends State<quizpage> {
  List mydata;
  _quizpageState({this.mydata});

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () {
      },
      child: Scaffold(
        body: Center(
          child: Text(mydata.toString()),
        ),
      ),
    );
  }
}

class\u quizpageState扩展状态{
列出我的数据;
_quizpageState({this.mydata});
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:(){
},
孩子:脚手架(
正文:中(
子项:文本(mydata.toString()),
),
),
);
}
}
错误: 我犯了个错误 返回式示波器( onWillPop:(){}, 这是Willposcope的方法

 Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown building FutureBuilder<String>(dirty, state: _FutureBuilderState<String>#893e9):
A build function returned null.

The offending widget is: FutureBuilder<String>
Build functions must never return null.

To return an empty space that causes the building widget to fill available room, return "Container()". To return an empty space that takes as little room as possible, return "Container(width: 0.0, height: 0.0)".

The relevant error-causing widget was
FutureBuilder<String>
lib\quizpage.dart:9
When the exception was thrown, this was the stack
#0      debugWidgetBuilderValue.<anonymous closure>
package:flutter/…/widgets/debug.dart:305
#1      debugWidgetBuilderValue
package:flutter/…/widgets/debug.dart:326
#2      ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4500
#3      StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4667
#4      Element.rebuild
package:flutter/…/widgets/framework.dart:4189
...
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════
A build function returned null.
The relevant error-causing widget was
FutureBuilder<String>
lib\quizpage.dart:9

小部件库捕获的异常═══════════════════════════════════
生成FutureBuilder时抛出了以下断言(脏,状态:_FutureBuilderState#893e9):
生成函数返回null。
令人反感的小部件是:FutureBuilder
构建函数不能返回null。
若要返回导致建筑小部件填满可用空间的空白,请返回“Container()”。若要返回占用尽可能少空间的空白,请返回“Container(宽度:0.0,高度:0.0)”。
导致错误的相关小部件已被删除
未来建设者
lib\quizpage.dart:9
当抛出异常时,这是堆栈
#0调试WidgetBuilderValue

如何摆脱此错误?请帮助!

class quizpage扩展StatefulWidget{
最终数据;
quizpage({Key-Key,@required this.mydata}):super(Key:Key);
@凌驾
_quizpageState createState()=>quizpageState();
}
类quizpageState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:(){
},
孩子:脚手架(
正文:中(
子项:文本(“${widget.mydata.length}”),
),
),
);
}
}

如果
mydata==null
,您的FutureBuilder确实会返回null,因此您只需要在if语句主体的中心小部件之前添加
return
关键字。如下所示:

class loadjson extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: DefaultAssetBundle.of(context)
            .loadString("assets/questions/generalQ.json"),
        // ignore: missing_return
        builder: (context, snapshot) {
          List mydata = json.decode((snapshot.data.toString()));
          if (mydata == null) {
            return Center(
              child: Text("Loading"),
            );
          } else {
            return quizpage(mydata: mydata);
          }
        },
      ),
    );
  }
}

还是同一个错误它工作了!现在它显示“加载”,但它什么时候会返回数据?或者当我试图在_quizpagestate中添加按钮时,它仍然显示加载。是的,您需要检查快照是否真的获得了任何数据,以及json.decode行返回了什么,因为您似乎从未从未来获得任何数据
class loadjson extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: DefaultAssetBundle.of(context)
            .loadString("assets/questions/generalQ.json"),
        // ignore: missing_return
        builder: (context, snapshot) {
          List mydata = json.decode((snapshot.data.toString()));
          if (mydata == null) {
            return Center(
              child: Text("Loading"),
            );
          } else {
            return quizpage(mydata: mydata);
          }
        },
      ),
    );
  }
}