Flutter代码运行,但仍返回空检查器错误

ibps3vxo  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(160)

谁能帮帮我。代码运行良好。但在debug console中我看到了这个
小部件库捕捉到异常检查运算符用于空值相关的错误小部件是StreamBuilder<DocumentSnapshot<Map<String,dynamic>
当我单击该行时,它会将我带到代码中流构建器的开头。
代码:

return StreamBuilder(
                        stream: FirebaseFirestore.instance
                            .collection(userCollection)
                            .doc(passenger.get("something"))
                            .snapshots(),
                        builder: (context, snapshot) {
                          final status = snapshot.data!["something"];

                          Color? color;
                          Icon? icons;
                          if (status == 'Not Verified') {
                            color = Colors.red;
                            icons = const Icon(
                              Icons.close,
                              size: 10,
                            );
                          }
                          if (status == 'Pending verification') {
                            color = Colors.yellow;
                            icons = const Icon(
                              Icons.hourglass_bottom,
                              size: 10,
                            );
                          }
                          if (status == 'Verified') {
                            color = Colors.green;
                            icons = const Icon(
                              Icons.done,
                              size: 10,
                            );
                          }
                          if (snapshot.hasData) {
                            return IconButton(
                              onPressed: onPressed, //onPressed,
                              icon: Column(
                                children: [
                                  CircleAvatar(
                                    radius: 48,
                                    backgroundImage: NetworkImage(
                                      snapshot.data!["something"],
                                    ),
                                    child: Stack(
                                      children: [
                                        Positioned(
                                          bottom: 5,
                                          right: 5,
                                          child: CircleAvatar(
                                              backgroundColor: color,
                                              foregroundColor: Colors.white,
                                              radius: 7,
                                              child: icons),
                                        ),
                                      ],
                                    ),
                                  ),
                                  SizedBox(
                                    width: screenWidth * 0.12,
                                    child: TextScroll(
                                      "${snapshot.data!["something"]}   ",
                                      velocity: const Velocity(
                                          pixelsPerSecond: Offset(30, 0)),
                                      style: const TextStyle(
                                          color: Colors.blue, fontSize: 10),
                                      textAlign: TextAlign.center,
                                    ),
                                  )
                                ],
                              ),
                            );
                          }
                          return const SizedBox();
                        },
                      );

当我导航到另一个屏幕时,第二个屏幕显示错误。我不知道是不是因为这个错误。但请看看为什么我得到这个错误在调试控制台althought特定屏幕正在运行

hvvq6cgz

hvvq6cgz1#

如果出了问题

final status = snapshot.data!["something"];

通过使用!,你基本上告诉编译器“data肯定不是null”。但事实并非如此,这就是抛出错误的原因。在这种情况下,您需要的是:

final status = snapshot.data?["something"];

所以把!改成?。这意味着“如果data不是null,则从其中取“某个东西”,否则只需将null放入status“;
另一种选择是简单地将所有代码移到上面

if (snapshot.hasData) {

if,所以你可以确定数据在那里。(除非null实际上是数据的有效结果)

相关问题