【问题标题】:Flutter: A build function returned nullFlutter:构建函数返回 null
【发布时间】:2020-01-22 06:49:48
【问题描述】:

我有一个StatefulWidget 用于显示带有数据的页面,我使用setState 来返回页面,但是当我运行应用程序时会显示如下错误:

[1] : https://imgur.com/a/7bJJSLI“截图”

这是我的代码

import 'package:flutter/material.dart';
import 'package:codelab_dicoding/data.dart';
import 'package:codelab_dicoding/detail.dart';

class BreakFast extends StatefulWidget{


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

class _BreakFastState extends State<BreakFast>{
  List<Container> daftarBreakfast = List();

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    Future <_BreakFastState>_breakfast() async {
    for (var i = 0; i < breakfast.length; i++) {
      final namaMakanan = breakfast[i];
      final String gambar = namaMakanan["gambar"];
      final String bahan = namaMakanan["bahan"];

      daftarBreakfast.add(Container(
          padding: EdgeInsets.all(10.0),
          child: Card(
              child: Column(
            children: <Widget>[
              Expanded(
                // tag: namaMakanan['nama'],
                child: Material(
                  child: InkWell(
                    onTap: () =>
                        Navigator.of(context).push(new MaterialPageRoute(
                              builder: (BuildContext context) => Detail(
                                    nama: namaMakanan['nama'],
                                    gambar: gambar,
                                    bahan: bahan
                                  ),
                            )),
                    child: Image.network(
                      gambar,
                      fit: BoxFit.cover,
                    ),
                  ),
                ),
              ),
              Padding(
                padding: EdgeInsets.all(10.0),
              ),
              Text(
                namaMakanan['nama'],
                style: new TextStyle(fontSize: 20.0),
              )
            ],
          ))));
    }

  }

  setState(() {
    return BreakFast();
  });
  }

}

我的代码有问题吗?为简单起见,我只是省略了一些变量。

【问题讨论】:

  • 这可能是我的错误,但我看到你把setState 放在build 中了吗?

标签: flutter


【解决方案1】:

您犯了几个错误,例如您在build() 中使用了setState,并且您还在build() 中使用了_breakfast()。查看此代码,它正在工作。

class BreakFast extends StatefulWidget {
  @override
  _BreakFastState createState() => _BreakFastState();
}

class _BreakFastState extends State<BreakFast> {
  List<Container> daftarBreakfast = List();

  // put it outside build()
  Future<_BreakFastState> _breakfast() async {
    for (var i = 0; i < breakfast.length; i++) {
      final namaMakanan = breakfast[i];
      final String gambar = namaMakanan["gambar"];
      final String bahan = namaMakanan["bahan"];

      daftarBreakfast.add(Container(
          padding: EdgeInsets.all(10.0),
          child: Card(
              child: Column(
            children: <Widget>[
              Expanded(
                // tag: namaMakanan['nama'],
                child: Material(
                  child: InkWell(
                    onTap: () => Navigator.of(context).push(new MaterialPageRoute(
                      builder: (BuildContext context) => Detail(nama: namaMakanan['nama'], gambar: gambar, bahan: bahan),
                    )),
                    child: Image.network(
                      gambar,
                      fit: BoxFit.cover,
                    ),
                  ),
                ),
              ),
              Padding(
                padding: EdgeInsets.all(10.0),
              ),
              Text(
                namaMakanan['nama'],
                style: new TextStyle(fontSize: 20.0),
              )
            ],
          ))));
    }
  }

  @override
  Widget build(BuildContext context) {
     // return BreakFast();
    return FlutterLogo(size: 400); // try this 
  }
}

【讨论】:

  • 我尝试了你的代码,但是当我运行时,屏幕没有错误,但仍然是空白
  • 那么问题出在您的BreakFast 小部件上。查看更新后的代码。
  • 您必须在构建函数中添加一个返回值。使用 futureBuilder 小部件来使用从你的 func 返回的未来
  • @Salma。我已经从构建中返回了一个小部件,并且 OP 没有使用 FutureBuilder
猜你喜欢
  • 2021-01-11
  • 2020-10-23
  • 2021-01-14
  • 2019-07-31
  • 2020-08-08
  • 2020-12-07
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多