![](/img/trans.png)
[英]How can I update my Firebase data when my flutter app closes?
[英]How can I use my data model in my Flutter app?
我是新手,所以我很抱歉。 但是我創建了一個 Firebase Firestore 數據模型來表示我在 Firestore 中的文章帖子。 當我將其輸入到 AppBar 的標題部分時,出現錯誤。 你如何處理這個問題? 我很感激任何形式的幫助或提示,因為我是新手,所以我仍在學習。 我還為此下載了所有必需的依賴項。
這是我的 Post 模型,它為我的 Firestore 數據庫中的文章建模。
class Post {
String title;
String imageURL;
String text;
Post({this.title, this.imageURL, this.text});
factory Post.fromFirestore(DocumentSnapshot doc) {
var data = doc.data();
return Post(
title: data['title'],
imageURL: data['imageURL'],
text: data['text']
);
}
}
這是我的文章頁面 (ReaderPage)
// This page displays article to the user.
class ReaderPage extends StatelessWidget {
CollectionReference posts = FirebaseFirestore.instance.collection('posts');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// This line is causing errors...
title: Post.fromFirestore().title,
),
body: Container(
),
);
}
}
該模型是正確的,但您沒有從 Firestore 讀取數據。 只有當 firestore 查詢給出的承諾得到解決時,您才能使用 FutureBuilder 來構建內容:
return FutureBuilder<DocumentSnapshot>(
future: posts.doc(documentId).get(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return Text("Something went wrong");
}
if (snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> data = snapshot.data.data();
return return Scaffold(
appBar: AppBar(
title: data.title,
),
body: Container(
),
);
}
return Text("loading");
},
);
但是通過這種方式,您並沒有使用您創建的模型。
在我看來,最好的方法是實現一個 DatabaseService 類:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'dart:async';
import 'posts.dart';
class DatabaseService {
final Firestore _db = Firestore.instance;
/// Get a stream of a single document
Stream<Post> streamPost(String uid) {
return _db
.collection('posts')
.document(uid)
.snapshots()
.map((snap) => Post.fromFirestore(snap.data));
}
/// Query a subcollection
Stream<List<Post>> streamPost(String uid) {
var ref = _db.collection('posts');
return ref.snapshots().map((list) =>
list.documents.map((doc) => Post.fromFirestore(doc)).toList());
}
}
但是通過這種方式,您必須使用流。 我建議你看看這個庫: Flutter Provider這篇文章可以幫助你:這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.