LoginSignup
4
0

More than 1 year has passed since last update.

初心者 flutter x firestoreの複合クエリに挑戦する2 未記入項目の処理

Last updated at Posted at 2022-06-13

歴史事象のアーカイブをつくろうとしているのだが

 ユーザーに情報を入力してもらうWikipedia方式を考えている。ということで、こんな情報を入れてください、という項目が、必須項目4、オプションが8、自由記述が10、textformfieldとして用意されている。必須項目については書かないと「未記入です」とアラートが出るようにしたけれど、他は放置したら、firestoreのfieldがnullだらけになってしまった。
 アーカイブだから当然、検索で情報を抽出したいわけだけれど、nullだらけのfieldを横断検索するって、どうするのね、という問題に直面。

arrayContainsAnyを走らせるための未記入項目処理

 必須項目以外も「必ず書いてね」とユーザーに要求するのはUXが悪すぎる。ちゃんと書かなくても、「・・・」でもいいから入れてもらえればnullは回避できるけれど、自分がユーザーだったら、二度と来ないぞ、という気分がする。なので、ぜひともコードで処理したい。

 今自分でできるのは、「未記入です」とアラートを出すこと。これはFlutter大学の教材から習得済み。

 これを流用して「未記入だったら'blank'いう値を追加する」というif文をつくろう、ということ。基本的には教材のadd_modelに、以下のようなコードを追加。

class AddFactsModel extends ChangeNotifier {

中略

 Future addFacts() async {


   if (year == null || year == "") {
      throw 'year needed';
    }

    if (date == null || date == "") {
      date = 'blank';

中略

    await FirebaseFirestore.instance.collection('events').add({
   
      'year': year,
      'name': name,
      'country': country,

      'latitude': latitude,
      'longitude': longitude,

      'keywords_arr': [date, ・・・・・・・],
     
       });
   }
}

 上のif文はスナックバーでアラートを出す。下のif文は未記入項目に'blank'という文字列を入れることでfirestoreのfieldが Null ではなく String になるよう対応しています。そしてaddのところでarrayに追加。

試行錯誤しすぎて

 できていたfetchが不調になるという元も子もない状態になっているけれど、とりあえずnull回避についてご報告まで。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0