【Flutter疑問診療室】 Cloud Firestore資料傳輸 - 事前準備
安裝Package
在Flutter操作Firestore之前,要先安裝名為
cloud_firestore的Package
前往
pub.dev中的cloud_firestore頁面(連結)
點擊Installing頁面,可以看到目前
cloud_firestore的最新版本
打開你Flutter專案中的
pubspec.yaml,找到dependencies,並在其下方加上cloud_firestore : [你看到的最新版本]
此時你的VScode應該會自動安裝此Package,但如果沒有的話,可以在Terminal中執行以下指令 :
1
$ flutter pub get
Class建立 - Comment物件
如果要在Flutter專案中傳遞評論的資料,我建議可以新增一個名為
Comment的Object,這樣在傳遞時可以將所有資訊打包在一起,而不需要一個一個傳遞!
- 新增
Commentclass :1
2
3
4
5
6
7
8
9
10
11
12
13class Comment{
// 要儲存的資訊
String username;
String userID;
String commentID;
String time;
String title;
//Comment結構式
Comment({this.commentID, this.time, this.title, this.userID, this.username});
}
Class建立 - DataService物件
接下來,我們來建立跟Firestore互動的Class吧!
引入Package :
1
2
3
4
5//引入Comment Class
import 'package:[你的專案名稱]/.../Comment.dart';
//引入事前安裝好的Cloud Firestore Package
import 'package:cloud_firestore/cloud_firestore.dart';新增
DataServiceclass :1
2
3
4
5
6
7
8
9
10
11class DataService{
//會使用到的資訊
String userID;
String commentID;
//DataService結構式
DataService({this.userID, this.commentID});
//之後讀寫函式都能放在這裡~
}
Cloud Firestore初始化
開啟你的
main.dart,並引入Cloud Firestore Package :1
import 'package:cloud_firestore/cloud_firestore.dart';
接著在main function中加入以下程式碼 :
1
2
3
4
5
6
7
8
9
10
11void main() async{
//WidgetsFlutterBinding初始化,請見下方說明
WidgetsFlutterBinding.ensureInitialized();
//Firebase初始化
await Firebase.initializeApp();
//執行App內容
runApp(MyApp());
}WidgetsFlutterBinding初始化 :
- 以下是Flutter的架構圖 :
- 而在Flutter中,Firebase此套件必須依靠這些模組與功能來完成初始化,但在進行Firebase存取時,這些操作通常是非同步的(asynchronous)。
- 因此我們必須確認名為
WidgetsBinding的物件已經被初始化,以下為初始化的方式 :1
WidgetsFlutterBinding.ensureInitialized();
- 以下是
WidgetsBinding的結構圖 :
- 可以看到,
WidgetsBinding結合到許多其他Class,而在初始化時,這些Class將會被依序執行 - 欲了解更多有關
WidgetsBinding的資訊,可以去瀏覽ad6623的文章
- 以下是
- 以下是Flutter的架構圖 :
Firebase初始化 :
- 接著,就可以初始化Firebase了 :
1
await Firebase.initializeApp();
- 這裡很重要的一點,就是此初始化必須要加上
await。因為初始化是非同步的,必須等到套件完全被初始化,才能繼續後面的動作!也就是為何在程式碼中,
main後面要加上async的原因
- 接著,就可以初始化Firebase了 :
總結
- 我們目前已經把Flutter所需的事前準備都設定好了,下次就要開始練習讀取資料瞜!
引用與參考資料
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


