簡體   English   中英

如何在我的 Flutter 應用程序中使用我的數據模型?

[英]How can I use my data model in my Flutter app?

我是新手,所以我很抱歉。 但是我創建了一個 Firebase Firestore 數據模型來表示我在 Firestore 中的文章帖子。 當我將其輸入到 AppBar 的標題部分時,出現錯誤。 你如何處理這個問題? 我很感激任何形式的幫助或提示,因為我是新手,所以我仍在學習。 我還為此下載了所有必需的依賴項。

我的 Firestore 數據庫屏幕,以防萬一這也需要

這是我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM