【问题标题】:The body might complete normally, causing null to be returned正文可能正常完成,导致返回 null
【发布时间】:2021-09-10 17:26:49
【问题描述】:

如何修复此代码。我想我必须把返回值放在哪里。有什么帮助吗?

Widget build(BuildContext context) {
    Container(
        padding: const EdgeInsets.all(
          10.0,
        ),
        child: FutureBuilder<Categories>(
          future: _futureCategories,
          builder: (BuildContext context, AsyncSnapshot<Categories> snapshot) {
            if (snapshot.hasData) {
              final name = snapshot.data?.data;
              return ListView.builder(
                  itemCount: name!.length,
                  itemBuilder: (BuildContext context, int index) {
                    return DefaultTabController(
                      length: name.length,
                      child: Scaffold(
                        appBar: AppBar(
                          bottom: const TabBar(
                            tabs: [
                              Tab(icon: Icon(Icons.directions_car)),
                            ],
                          ),
                        ),
                      ),
                    );
                  });
            } else if (snapshot.hasError) {
              return NewsError(
                errorMessage: '${snapshot.hasError}',
              );
            } else {
              return const Center(
                child: CircularProgressIndicator(),
              );
            }
          },

小部件构建下划线为红色。当我放在小部件行下时

return Container(

错误消失,但我在执行代码时只看到黑屏

【问题讨论】:

  • 使用 return Container();除了你能解释一下添加更多说明
  • FutureBuilder 和其余部分成为死代码
  • 我会删除最后一个 } else { 子句以返回圆形进度指示器,它不是一个值

标签: flutter dart


【解决方案1】:

您在Container 之前缺少return

@override
  Widget build(BuildContext context) {
  return  Container(
        padding: const EdgeInsets.all(
          10.0,
        ),
        child: FutureBuilder(
          future: _futureCategories(),

解决了吗?

【讨论】:

  • 返回修复错误,但这次屏幕完全空白
  • 另外,像`future: _futureCategories()`一样分配future,并确保你@override over build
  • future: _futureCategories(),导致错误:表达式不计算为函数,因此无法调用。
  • 这是最终代码,没有错误但模拟器屏幕完全空白monosnap.com/file/edFHLxpVUqwDuUxKcjuuT3c4Qlw3ZZ
【解决方案2】:

而不是返回else中的最后一部分,不使用else直接返回,也返回Container,像这样:

    Widget build(BuildContext context) {
        return 
          Container(
            padding: const EdgeInsets.all(
              10.0,
            ),
            child: FutureBuilder<Categories>(
              future: _futureCategories,
              builder: (BuildContext context, AsyncSnapshot<Categories> snapshot) {
                if (snapshot.hasData) {
                  final name = snapshot.data?.data;
                  return ListView.builder(
                      itemCount: name!.length,
                      itemBuilder: (BuildContext context, int index) {
                        return DefaultTabController(
                          length: name.length,
                          child: Scaffold(
                            appBar: AppBar(
                              bottom: const TabBar(
                                tabs: [
                                  Tab(icon: Icon(Icons.directions_car)),
                                ],
                              ),
                            ),
                          ),
                        );
                      });
                } else if (snapshot.hasError) {
                  return NewsError(
                    errorMessage: '${snapshot.hasError}',
                  );
                } 
                 return const Center(
                    child: CircularProgressIndicator(),
                  );
                
              },

【讨论】:

  • 构建仍然是红色的
  • 我认为 Yeasin Sheikh 是对的,我在此基础上编辑了我的答案。
猜你喜欢
  • 2022-12-23
  • 2023-01-16
  • 2022-10-01
  • 1970-01-01
  • 2022-11-18
  • 2022-12-04
  • 2021-11-15
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多