【Flutter疑問診療室】 Cloud Firestore資料傳輸 - 讀寫Username
建立CollectionReference
- 在
database.dart的DataService class中新增以下程式碼 :1
final CollectionReference userCollection = FirebaseFirestore.instance.collection('users');
這樣我們就能針對
user這個Collection去做讀寫的動作
updateUserName()
接著新增 :
1
2
3Future updateUserName(String name) async {
return await userCollection.doc(userid).set({'name' : name});
}- 說明 :
- 此函式是要更新使用者名稱,故input參數為
name的字串 - 透過非同步函式(
async) +await+ 回傳值為Future的特性,使此函式被呼叫時,必須要做完set的動作後才能回傳 userCollection.doc(userid)可以去確認userCollection中,是否擁有內容為userid的Document- 如果有 : 接續後面的讀取動作
- 如果沒有 : 自動新增一個新的
userid,再接續後面讀取動作
- 此函式是要更新使用者名稱,故input參數為
- 說明 :
使用方式(以
FlatButton為例) :1
2
3
4
5
6
7
8
9//.....
String userid = 'ACJDJFUVHFASD'
String username = 'Amy';
//....
FlatButton(
onPressed : () async{
await DataService(userid).updateUserName(name: username);
}
)- 說明 :
- 在呼叫此函式時,記得要把
OnPressed()設為非同步,並函式內也要加上await DataService(userid): 我們先將userid丟入DataService物件中- 接著利用
updateUserName(name: username)去判斷Collection中是否有內容為userid的Document- 如果有 : 在其Document中,將名為
name的Reference新增/修改為username(依是否原本就有name的Reference存在而定) - 如果沒有 : 新增一個內容為
userid的Document,並同時新增名為name的Reference,其值定為username
- 如果有 : 在其Document中,將名為
- 在呼叫此函式時,記得要把
- 說明 :
getUserName()
新增 :
1
2
3
4
5
6
7
8
9
10
11Future<String> getusername() async {
DocumentReference documentReference = userCollection.doc(userid);
String name = '';
await documentReference.get().then((snapshot) {
name = snapshot.data()['name'].toString();
});
if(name != ''){
return name;
}
return 'Something is wrong!';
}- 說明 :
- 此函式是要透過
userid去尋找使用者名稱,故不需要input參數 - 透過非同步函式(
async) +await+ 回傳值為Future的特性,使此函式被呼叫時,必須要get到資料後才能回傳name - 透過
userCollection.doc(userid),建立名為documentReference的DocumentReference物件 - 之後利用
get().then{}的方式,解析尋找出來的snapshot,也就是利用snapshot.data()['name'],把抓出來的名字放入name中
- 此函式是要透過
- 說明 :
使用方式(以
FlatButton為例) :1
2
3
4
5
6
7
8
9//.....
String userid = 'ACJDJFUVHFASD'
String username = '';
//....
FlatButton(
onPressed : () async{
username = await DataService(userid).getusername();
}
)- 說明 :
- 在呼叫此函式時,記得要把
OnPressed()設為非同步,並函式內也要加上await DataService(userid): 我們先將userid丟入DataService物件中- 接著利用
getusername()去抓取useridDocument中的nameReference- 如果有抓到 : 回傳之值會放入
username - 如果沒抓到 :
username會變為Something is wrong!
- 如果有抓到 : 回傳之值會放入
- 在呼叫此函式時,記得要把
- 說明 :
總結
* 這次我們利用了set()與get(),去實作了讀寫Username的函式;之後就會輪到實作讀寫Comments的函式嘍~
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


