无法解决因空安全而引起的这些错误

Can't get around these errors in flutter cause of null safety

itemCount: snapShot.data.length, 错误 - 无法无条件访问 属性 'length',因为接收者可以是 'null'。 尝试使访问有条件(使用'?.')或向目标添加空检查('!')。

DocumentSnapshot sliderImage = snapShot.data[index]; 错误 - 无法无条件调用方法“[]”,因为接收者可以是 'null'。 尝试使调用有条件(使用'?.')或向目标添加空检查('!')。

地图getImage = sliderImage.data();

错误 - 类型 'Object?' 的值无法分配给类型 'Map<dynamic, dynamic>' 的变量。 尝试更改变量的类型,或将右侧类型转换为 'Map<dynamic, dynamic>'

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class ImageSlider extends StatefulWidget {
const ImageSlider({Key? key}) : super(key: key);

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

class _ImageSliderState extends State<ImageSlider> {
Future getSliderImageFromDb() async {
var _fireStore = FirebaseFirestore.instance;
QuerySnapshot snapshot = await _fireStore.collection('slider').get();
return snapshot.docs;
}

@override
void initState() {
getSliderImageFromDb();
super.initState();
}

@override
Widget build(BuildContext context) {
 return Column(
  children: [
    FutureBuilder(
      initialData: [], //remove later
      future: getSliderImageFromDb(),
      builder: (_, snapshot) {
        return snapshot.data == null
            ? Container()
            : CarouselSlider.builder(
                itemCount:
                    snapshot.data!.length,
                  itemBuilder: (context, int index, int pageIndex) {
                  DocumentSnapshot sliderImage = 
                  snapshot.data[index];
                  Map getImage = sliderImage.data();
                  return Image.network(getImage['image']);
                },
                options: CarouselOptions());
      },
    )
  ],
);
}
}
snapshot.data.length

此处 snapShot.data 可能为 null,因此 null 安全性是 complaining.So 您通过这样的 null 检查确保它永远不会为 null

if(snapshot.data==null)
 return "Something Else"

然后通过

确保其值永远不会为空的空安全性
snapshot.data!.length

您还需要指定 FutureBuilder 通用类型 假设您从数据库中获得了用户模型列表,那么它应该是

 FutureBuilder<List<UserModel>>(
  initialData: [],
  future: getSliderImageFromDb(),
  builder: (_, List<UserModel> snapshot) {
    return Container();
  },
);

在Flutter2中,如果它是一个可空的那么你需要处理它, 比如让我们说如果一个列表像

List<UserModel?>? users; // as this might me nullable

然后它 returns 一个可为空的 UserModel,所以如果你想将它分配给不可为空的字段,那么你需要处理

final String userName = users?.elementAtIndex(3)?.userName ?? 'N.A';

或者,如果您确定它不是空的,那么您可以

final String userName = users!.elementAtIndex(3)!.userName;

但是如果它是 null 则抛出异常。