使用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
无法理解出了什么问题。
答案 0 :(得分:1)
此错误是因为您试图向Text添加一些空数据。 用于将文本内容动态添加到“文本”小部件中,以更好地动态地获取要获取数据的文本位置的setState。延迟获取内容会导致此错误。因此条件检查数据也很好。
@override
void initState() {
setState(() {
docText=document['docTitle'];
});
super.initState();
}
....
title: new Text( docText == null? 'Loading ..',document['docTitle']),
尝试这种方式
答案 1 :(得分:0)
这是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);
用
最终字符串数据;
如您所见,数据是必填字段,且必须不为空。
如果数据可能为空,您可以使用以下代码
title: document['docTitle'] != null? new Text(document['docTitle']) : new Text("Hello"),
答案 2 :(得分:0)
此消息试图指出data参数为null,不应为null。如果您不希望呈现文本,则想法是您根本不会提供Text widget
。因此您需要将字符串传递给Text构造函数
了解。在调用构造函数时,该字符串为null。
如果确实要显示“文本”小部件,则可以使用可识别null的运算符:
Text(theString ?? '')
答案 3 :(得分:0)
如果数据不为空,则在项目终端flutter clean
上运行命令。它可能会消除您的错误。我有类似的问题。