构建函数返回 null , FutureBuilder

A build function returned null , FutureBuilder

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

为此,我找到了用于执行此操作的“futurebuilder”。

这里是 class 加载json,我在其中使用 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);
          }
        },
      ),
    );
  }
}

class quizpage extends StatefulWidget {
  final mydata;
  quizpage({Key key, @required this.mydata}) : super(key: key);

  @override
  _quizpageState createState() => _quizpageState(mydata: mydata);
}

这里我正在传递从负载json

中获得的数据
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()),
        ),
      ),
    );
  }
}

错误: 我收到错误信息 return WillPopScope( onWillPop: () {}, 这个 WillPopScope 方法说

 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

这是android屏幕错误

如何摆脱这个错误?请帮忙!

class quizpage extends StatefulWidget {
  final mydata;
  quizpage({Key key, @required this.mydata}) : super(key: key);

  @override
  _quizpageState createState() => _quizpageState();
}

class _quizpageState extends State<quizpage> {

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


您的 FutureBuilder 确实 returns null if mydata == 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);
          }
        },
      ),
    );
  }
}