Flutter 错误 - 断言失败:第 213 行 pos 15:'data != null':在从 firestore 获取数据时不正确
Posted
技术标签:
【中文标题】Flutter 错误 - 断言失败:第 213 行 pos 15:\'data != null\':在从 firestore 获取数据时不正确【英文标题】:Flutter error - failed assertion: line 213 pos 15: 'data != null': is not true at the time of fetching data from firestoreFlutter 错误 - 断言失败:第 213 行 pos 15:'data != null':在从 firestore 获取数据时不正确 【发布时间】:2018-11-13 00:24:59 【问题描述】:使用 Flutter 开发 android 应用程序。尝试从 Firestore 获取文档并通过小部件显示在屏幕上。这是我的代码...
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:image_picker/image_picker.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class HomePage extends StatefulWidget
@override
HomePageState createState() => new HomePageState();
class HomePageState extends State<HomePage>
@override
void initState()
super.initState();
@override
Widget build(BuildContext context)
Widget userTimeline = new Container(
margin: const EdgeInsets.only(top: 30.0, right: 20.0, left: 20.0),
child: new Row(
children: <Widget>[
new Expanded(
child: new Column(
children: <Widget>[
new StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('tripsDocs').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)
if (!snapshot.hasData) return new Text('Loading...');
new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document)
new ListTile(
title: document['docTitle'] != null? new Text(document['docTitle']) : new Text("Hello"),
subtitle: new Text('Suresh'),
);
).toList(),
);
,
)
],
))
],
));
return new Scaffold(
body: new ListView(
children: <Widget>[
userTimeline,
],
),
);
但是,每当我执行这个小部件时,我都会收到以下错误...
'package:flutter/src/widgets/text.dart': Failed assertion: line 213 pos 15: 'data != null': is not true
无法理解出了什么问题。
【问题讨论】:
你确定“document['docTitle']”不为空吗?如果它为 null,则 Text 可能会抛出该异常 也可以是null
。在那种情况下,我不能这样做title: new Text(document['docTitle'] ?? 'Hello')
吗?
标题:新文本(文档['docTitle'] ??'Hello')。这不正确,请检查我的答案
【参考方案1】:
这里是Text的构造函数
const Text(this.data,
Key key,
this.style,
this.textAlign,
this.textDirection,
this.softWrap,
this.overflow,
this.textScaleFactor,
this.maxLines,
) : assert(data != null),
textSpan = null,
super(key: key);
与
最终字符串数据;
如您所见,data是必填字段,不能为空。
如果您的数据可能为空,您可以使用以下代码
title: document['docTitle'] != null? new Text(document['docTitle']) : new Text("Hello"),
【讨论】:
我试过了,但现在我收到了这个错误...A build function returned null. The offending widget is: StreamBuilder<QuerySnapshot>. Build functions must never return null. To return an empty space that causes the building widget to fill available room, return "new Container()". To return an empty space that takes as little room as possible, return "new Container(width: 0.0, height: 0.0)".
我需要在return
前面加上new ListView
和new ListTitle
吗?
它说“构建函数返回 null”。你的构建功能如何?
我的构建函数返回一个 Scaffold
并且我正在从我的 Scaffold 调用上面的小部件。【参考方案2】:
此错误是因为您试图向 Text 添加一些空数据。 用于将文本内容动态添加到文本小部件,以便更好地设置您获取该数据的文本位置的状态。获取内容的延迟会导致此错误。所以数据的条件检查也很好。
@override
void initState()
setState(()
docText=document['docTitle'];
);
super.initState();
....
title: new Text( docText == null? 'Loading ..',document['docTitle']),
试试这个方法
【讨论】:
【参考方案3】:如果您的数据不为空,则在您的项目终端上运行命令flutter clean
。它可能会消除您的错误。我有类似的问题。
【讨论】:
【参考方案4】:此消息试图指出 data 参数为空,不应该为空。如果您不想呈现文本,那么您根本不会提供Text widget
。所以你需要将一个字符串传递给 Text 构造函数
明白了。调用构造函数时字符串为空。
如果你真的想显示一个 Text 小部件,你可以使用 null-aware 运算符:
Text(theString ?? '')
【讨论】:
【参考方案5】:在 Cloud Firestore 和项目中的每个查询中更改集合的名称。
这将更改 firebase 页面上的名称,至少解决了我的问题
stream: Firestore.instance.collection("colection").snapshots(),
到
stream: Firestore.instance.collection("collection").snapshots(),
【讨论】:
以上是关于Flutter 错误 - 断言失败:第 213 行 pos 15:'data != null':在从 firestore 获取数据时不正确的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 中的 Dart Futures 问题:断言失败:第 146 行:'<optimized out>': is not true
断言失败:第 6075 行 pos 12:'child == _child':不正确
断言失败:第 22 行 pos 14: 'url != null': is not true
断言失败:第 551 行 pos 12:'child.hasSize':不正确