歴史事象のアーカイブをつくろうとしているのだが
ユーザーに情報を入力してもらう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回避についてご報告まで。