【发布时间】:2022-01-05 17:39:05
【问题描述】:
我正在尝试从 Firebase 中的实时数据库中读取对象列表,但到目前为止没有成功。
我在以下链接上关注 Firecasts 的官方教程: https://www.youtube.com/watch?v=sXBJZD0fBa4
这是我写的代码:
以下是我为将从数据库中读取的对象创建的类:
class TestData {
final String name;
final String surname;
final String age;
TestData({
required this.name,
required this.surname,
required this.age,
});
factory TestData.fromRTDB(Map<dynamic, dynamic> data) {
return TestData(
name: data["Name"],
surname: data["Surname"],
age: data["Age"],
);
}
}
这是我尝试从数据库中读取它的方法:
class TestDataGetter {
final _db = FirebaseDatabase.instance.ref();
Stream<List<TestData>> getTestDataStream() {
final csPostprocessedStream = _db.child("test_data/").onValue;
var streamToPublish = csPostprocessedStream.map((event) {
final testDataMap = Map<dynamic, dynamic>.from(
event.snapshot.value as Map<dynamic, dynamic>);
final testDataList = testDataMap.entries.map((element) {
return TestData.fromRTDB(Map<dynamic, dynamic>.from(element.value));
}).toList();
return testDataList;
});
return streamToPublish;
}
}
这是我要显示数据的屏幕:
class TestDataScreen extends StatelessWidget {
const TestDataScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
StreamBuilder(
stream: TestDataGetter().getTestDataStream(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
print("Waiting");
return const CircularProgressIndicator(color: Colors.white);
} else if (snapshot.hasError) {
print("Error occured...");
return const CircularProgressIndicator(color: Colors.white);
} else {
final testDataList = snapshot.data as List<TestData>;
return Text(
testDataList[0].name + " / " + testDataList[1].name,
style: Theme.of(context).textTheme.headline3,
textAlign: TextAlign.center);
}
}),
],
),
);
}
}
但我永远看不到屏幕上的数据。纺车是我唯一看到的东西,在控制台上我看到打印输出为“等待”(因为我在上面的代码中打印出这个文本)。
卡在if (!snapshot.hasData)。
花了几个小时后我一无所知。
【问题讨论】:
标签: firebase flutter dart firebase-realtime-database stream-builder