方法 '[]' 不能无条件调用,因为接收者可以为 'null'。 (颤抖)

时间:2021-07-29 14:23:16

标签: flutter dart dart-null-safety

我正在使用带有两次下载的 FutureBuilder,并将每个索引放入一个列表中,以便在我的应用程序中加载/显示它们。使用空安全有一个错误:

无法无条件调用方法“[]”,因为接收者可以为“null”。

尝试使调用有条件(使用“?.”)或向目标添加空检查(“!”)。

如何解决快照中的这个错误 (snapshot.data[0])?感谢您的帮助。

enter image description here

          FutureBuilder(
            future: Future.wait([downloadsuche(), downloadsuchvorschlag()]),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                //List<AdressSuche> adresse = snapshot.data;

                List<AdressSuche> adresse = snapshot.data[0];
                List<AdressSuche> sv1 = snapshot.data[1];

                return IconButton(
                  icon: const Icon(Icons.search),
                  onPressed: () {
                    showSearch(context: context, delegate: DataSearch(adresse, sv1));
                  },
                );
              } else if (snapshot.hasError) {
                return IconButton(icon: const Icon(Icons.search), onPressed: () {});
                //return RefreshIndicator(onRefresh: _refreshdata, child: Center(child: CircularProgressIndicator()));
              }
              return IconButton(icon: const Icon(Icons.search), onPressed: () {});
            },
          ),

3 个答案:

答案 0 :(得分:2)

替换

List<AdressSuche> adresse = snapshot.data[0];
List<AdressSuche> sv1 = snapshot.data[1];

var adresse = (snapshot.data as List)[0] as List<AdressSuche>;
var sv1 = (snapshot.data as List)[1] as List<AdressSuche>;

答案 1 :(得分:1)

替换

List<AdressSuche> adresse = snapshot.data[0];
List<AdressSuche> sv1 = snapshot.data[1];

var list = snapshot.data! as List;

List<dynamic> adresse = list[0];
List<dynamic> sv1 = list[1];

答案 2 :(得分:0)

只需添加“!”在snapshot.data之后作为snapshot.data可能为空。

FutureBuilder(
            future: Future.wait([downloadsuche(), downloadsuchvorschlag()]),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                //List<AdressSuche> adresse = snapshot.data!;

                List<AdressSuche> adresse = snapshot.data![0]; //add '!' over here
                List<AdressSuche> sv1 = snapshot.data![1];  // and here

                return IconButton(
                  icon: const Icon(Icons.search),
                  onPressed: () {
                    showSearch(context: context, delegate: DataSearch(adresse, sv1));
                  },
                );
              } else if (snapshot.hasError) {
                return IconButton(icon: const Icon(Icons.search), onPressed: () {});
                //return RefreshIndicator(onRefresh: _refreshdata, child: Center(child: CircularProgressIndicator()));
              }
              return IconButton(icon: const Icon(Icons.search), onPressed: () {});
            },
          ),