繁体   English   中英

Flutter 错误:无法无条件访问属性“docs”,因为接收者可以为“null”

[英]Flutter error: The property 'docs' can't be unconditionally accessed because the receiver can be 'null'

我正在努力解决这两个错误。

错误:无法无条件访问属性“docs”,因为接收者可以为“null”。 (unchecked_use_of_nullable_value 在 [church_app] lib\Screens\DevotionalList.dart:23)

错误:参数“devotional”因其类型不能具有“null”值,但隐式默认值为“null”。 (在 [church_app] lib\Screens\DevotionalList.dart:39 缺少_default_value_for_parameter)

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

class DevotionalList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance.collection('devotionals').snapshots(),
      builder: (context, snapshot) {
        if (snapshot.hasError) {
          return Center(
            child: Text('Error: ${snapshot.error}'),
          );
        }

        if (!snapshot.hasData) {
          return Center(
            child: CircularProgressIndicator(),
          );
        }

        // Use the .docs property to access the list of documents.
        List<DocumentSnapshot> documents = snapshot.data.docs;
        return ListView.builder(
          itemCount: documents.length,
          itemBuilder: (context, index) {
            DocumentSnapshot devotional = documents[index];
            return DevotionalTile(devotional: devotional);
          },
        );
      },
    );
  }
}

class DevotionalTile extends StatelessWidget {
  final DocumentSnapshot devotional;

  DevotionalTile({this.devotional});

  @override
  Widget build(BuildContext context) {
    if (devotional == null) {
      return Container();
    }

    return ExpansionTile(
      title: Text(devotional['title']),
      subtitle: Text('By ${devotional['author']}'),
      children: <Widget>[
        Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text(devotional['body']),
        ),
      ],
    );
  }
}

任何援助将不胜感激。

尝试添加 null 异常,但我仍然遇到同样的错误。

当您调用snapshot.data.docs时,它不可能是 null,因为您首先使用hasError进行了检查,因此您可以通过显式添加一个! ,而不是这个:

List<DocumentSnapshot> documents = snapshot.data.docs;

添加! ,所以它会是这样的:

List<DocumentSnapshot> documents = snapshot.data.docs!;

这将解决您面临的两个错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM