建立CollectionReference

  • database.dart的DataService class中新增以下程式碼 :
    1
    final CollectionReference userCollection = FirebaseFirestore.instance.collection('users');

    這樣我們就能針對user這個Collection去做讀寫的動作

updateUserName()

  • 接著新增 :

    1
    2
    3
    Future updateUserName(String name) async {
    return await userCollection.doc(userid).set({'name' : name});
    }
    • 說明 :
      1. 此函式是要更新使用者名稱,故input參數為name的字串
      2. 透過非同步函式(async) + await + 回傳值為Future的特性,使此函式被呼叫時,必須要做完set的動作後才能回傳
      3. userCollection.doc(userid)可以去確認userCollection中,是否擁有內容為userid的Document
        • 如果有 : 接續後面的讀取動作
        • 如果沒有 : 自動新增一個新的userid,再接續後面讀取動作
  • 使用方式(以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);
    }
    )
    • 說明 :
      1. 在呼叫此函式時,記得要把OnPressed()設為非同步,並函式內也要加上await
      2. DataService(userid) : 我們先將userid丟入DataService物件中
      3. 接著利用updateUserName(name: username)去判斷Collection中是否有內容為userid的Document
        • 如果有 : 在其Document中,將名為name的Reference新增/修改為username(依是否原本就有name的Reference存在而定)
        • 如果沒有 : 新增一個內容為userid的Document,並同時新增名為name的Reference,其值定為username

getUserName()

  • 新增 :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Future<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!';
    }
    • 說明 :
      1. 此函式是要透過userid去尋找使用者名稱,故不需要input參數
      2. 透過非同步函式(async) + await + 回傳值為Future的特性,使此函式被呼叫時,必須要get到資料後才能回傳name
      3. 透過userCollection.doc(userid),建立名為documentReference的DocumentReference物件
      4. 之後利用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();
    }
    )
    • 說明 :
      1. 在呼叫此函式時,記得要把OnPressed()設為非同步,並函式內也要加上await
      2. DataService(userid) : 我們先將userid丟入DataService物件中
      3. 接著利用getusername()去抓取useridDocument中的name Reference
        • 如果有抓到 : 回傳之值會放入username
        • 如果沒抓到 : username會變為Something is wrong!

總結

* 這次我們利用了set()get(),去實作了讀寫Username的函式;之後就會輪到實作讀寫Comments的函式嘍~