dart 为什么在Flutter语言中,编辑器Visual Studio Code会说snapshot.data.length是错误的?

vfh0ocws  于 2023-07-31  发布在  Flutter
关注(0)|答案(2)|浏览(138)

Visual Studio代码版本:1.52.0 Node.js:12.14.1
下面是Flutter中的代码片段。问题出在.length代码片段中,我认为它不应该显示任何错误,因为通过if,它已经保证异步请求已经完成,并且snapshop有一些数据。
我认为这更多的是编辑的问题,而不是Fluter语言。

body: FutureBuilder<List<Post>>(
        future: postServiceData,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done && snapshot.hasData){ //See it
            return ListView.builder(
                itemCount: snapshot.data.length, // Error on this line because .length
                itemBuilder: (context, index) {
                  final post = snapshot.data![index];
                  return Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: ListTile(
                      title: Text(post.title.toUpperCase()),
                      subtitle: Text(post.body),
                      onTap: () {
                        // Faça algo quando o item da lista for clicado
                      },
                    ),
                  );
                });
          } else {
            return Center(child: CircularProgressIndicator());
          }
        },
      ),

字符串
为了解决这个问题,我不得不将错误代码段替换为以下代码段:

itemCount: snapshot.data!.length,


我上面已经提到了。

nukf8bse

nukf8bse1#

通过执行以下操作替换生成器:

builder: (context, AsyncSnapshot<List<Post>> snapshot)

字符串

xxhby3vn

xxhby3vn2#

未来的我弄清楚了是什么导致了这个问题,它实际上没有一个定义什么是快照。好吧,他们可以使快照不需要被定义。
在这种情况下,正确的方法是:

body: FutureBuilder<List<Post>>(
    future: postServiceData,
    builder: (context, AsyncSnapshot snapshot) {
      if (snapshot.connectionState == ConnectionState.done &&
          snapshot.hasData) {
        return ListView.builder(
            itemCount: snapshot.data.length,
            itemBuilder: (context, index) {
              final post = snapshot.data[index];
              return Padding(
                padding: const EdgeInsets.all(8.0),
                child: ListTile(
                  title: Text(post.title.toUpperCase()),
                  subtitle: Text(post.body),
                  onTap: () {
                    // Faça algo quando o item da lista for clicado
                  },
                ),
              );
            });
      } else {
        return Center(child: CircularProgressIndicator());
      }
    },
  ),

字符串

相关问题