gpt4 book ai didi

Firebase实时数据库Flutter流永不返回问题

转载 作者:行者123 更新时间:2023-12-02 01:48:42 25 4
gpt4 key购买 nike

我正在尝试从 Firebase 中的实时数据库读取对象列表,但到目前为止尚未成功。

我正在通过以下链接关注 Firecasts 的官方教程: https://www.youtube.com/watch?v=sXBJZD0fBa4

数据库如下所示: enter image description here

这是我编写的代码:

以下是我为将从数据库读取的对象创建的类:

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)

在花了几个小时之后我对此一无所知。

最佳答案

尝试以下操作

!snapshot.hasData || snapshot.data.documents.isEmpty

这里的问题是,当查询没有返回文档时,snapshots() 也会返回 QuerySnapshot。因此,您可以这样扩展您的条件:

这是我应该对你有帮助的内容

if (snapshot.hasError) {
//TODO: we need to make sure we caputer this error message snapshot.error
return const PlaceHolder(
url: 'assets/animations/404-error.json',
message: ErrorMessages.getDogsError,
);
} else if (snapshot.data == null || snapshot.data!.isEmpty) {
return const PlaceHolder(
url: 'assets/animations/no-dog-animation.json',
message: AppMessages.noDogMessage,
);
} else if (!snapshot.hasData) {
}

关于Firebase实时数据库Flutter流永不返回问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70597252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com