Open RightonSK opened 2 years ago
provider packageだとログインしたユーザー情報ってどこに保存しておくんだ?
riverpodだとStateProviderに保存しておけばよい。
明日やること: 書いたものをchemistoryの方に移植してみる。
土日でやること:
Edit My PageのUIを完成させること。 Userクラスを変更したことの報告。
Userクラスなんですけど、freezedを用いた形に変更しても良いですか?freezedのcopyWithメソッド使いたいので。 immutableな属性のままで、機能が増えるだけなのでおそらく問題ないと思います。
プロフィール編集画面のUIの作り方が分からない。→ 調べる。 https://zenn.dev/masarufuruya/articles/flutter-row-textfield
TextFieldを使うと、onchangedで文字を打つたびにStateが変わってしまう。 おそらく、TextFormFieldを使えばとControllerを使えば、おそらくクリアできる。
プロフィール画像変更の機能を作る
2/27
現在、mypageとedit mypageが同じstateを見ているから、text fieldのonChangedメソッドで問題が起こる。 ← 随時、stateの中身を変更してしまうため。 なのでmypage_stateとは別にedit mypage_stateを作れば問題がなくなる。
edit pageにて、最初にcopy book methodでstateの中身を更新すると毎回build時にstateを更新→stateが更新されたので、rebuildの無限ループが起きてしまう。 最初のbuild時にだけ、実行したいものはどうすれば?
遷移前のpageでNavigator push時に、遷移pageのnotifierに先にstateとなる情報を渡せばいいのでは?
何かの機能に頼るだけじゃなくて、自らロジックを作ればいいのか? 仕様を理解して、上手く利用するとか
上手いことtextEditingControllerが機能しない。 実機でも同じようになるのか検証してみたい。
Row(
children: <Widget>[
Expanded(
flex: 3,
child: Text('Username: '),
),
Expanded(
flex: 7,
child: TextField(
controller: _userController,
),
),
],
),
expandedとflexプロパティを使えば上手くレイアウトの調節が出来そう。 https://flutter.keicode.com/basics/textcontroller.php
3/1 プロフィール画像変更機能。 レイアウト調整の勉強と実装。
3/31 マイページの大まかなレイアウトの変更は完了した。 なので、次はプロフィール編集画面の方を変更していく
4/1 ヘッダー画像のheightは、画面サイズの何割にするか?
drop down buttonの実装
データを保存ロジックの見直しをしたい。 文字が入力される度にstateを更新するのか or 完了ボタンを押した時に、stateを更新するのか 完了ボタンを押すまでの間、どうやってデータを保持するか? (MVVM的に考えたい)
それにdrop down buttonのデータも含めて考える!
結論: TextFieldに関しては、controllerで管理して、完了ボタンを押した際に、stateを更新する。 drop down buttonで選ぶデータに関しては、逐次stateの値を更新する。
4/6 text editing controllerを使うには、stateful widgetにするか、hook widgetを使うかのどちらか
https://qiita.com/tabe_unity/items/4c0fa9b167f4d0a7d7c2
Columnの中でListViewを使うにはどうすればいいか?
shrinkWrap: true, //追加 physics: const NeverScrollableScrollPhysics(),
これらを追加すればうまくいったが、なぜうまくいくのか調べたい!
どうやって、drop down buttonの表示されているvalueを変化させるか?
選択されたvalueのindexをstate側で保持して、それを基に表示するvalueを変化させる。
エラーコード: Unsupported operation: Cannot modify an unmodifiable list
もしかしたら、ListViewの中では、dropdownButtonは使えないかも?
おそらくListviewがUnmodifiable list
思いつく解決策の一つとして、 Columnのchildrenにfor文を使って実装すればいけるかも? そもそもlistviewがunmodifiable listなのかどうか調べる。 Columnとlistviewの違いについても調べたい
上記のエラーコードについて
stateless widgetなのが理由なのか? stateless widgetの中ではdrop down buttonは使えない、みたいな それともlistview自体に問題があるのか? そもそもlistviewで作るよりもcolumn + forで作った方が見やすいのではないだろうか?
stateless widgetは、stateが変更した時にリビルドして、再描画するので、drop down buttonが変更されても、それをtriggerにリビルドは起きない。 それを解決する一つの方法として、stateでdrop down buttonのvalueを管理する
listviewじゃなくてlistview.builderが原因でエラーが起きている可能性がある。
/// [ListView.builder] by default does not support child reordering. If /// you are planning to change child order at a later time, consider using /// [ListView] or [ListView.custom].
riverpod official state providerのところに、drop down buttonを用いたsample codeがある。
4/12 コードの整理とdrop down button, enum, state providerについての使い方について再確認した。
明日は、drop down buttonで選ばれたvalueをfirestore側に保存できるようにする。
4/14 基本情報用のコレクションを用意して、そこにデータを格納する。 配列型で保存はしたくないので
2/24 とりあえずエンティティの追加処理の際、document idを先に取得して、それを用いて追加する。