👀
今日の学び②
stateの更新方法
① viewModelに関数をつくる。
Future<void> selectGender(gender) async {
final data = state.requireValue;
state = AsyncData(data.copyWith(selectedGender: gender));
}
.requireValueはnullでない値であることを確認して値を使うメソッド。
viewでデータがあるときのみ使うのでrequireValueでオッケー。
.copywithはイミュータブルなオブジェクトを更新する。指定したプロパティだけを変更できる。便利。
② viewで呼び出す
例:DropdownButtonの場合
DropdownButton(
items: data.dropDownGenderMap.entries
.map(
(entry) => DropdownMenuItem(
value: entry.key,
child: Text(entry.value),
),
)
.toList(),
value: data.selectedGender,
onChanged: (gender) async {
await ref
.read(questionnaireViewModelProvider.notifier)
.selectGender(gender);
},
),
ref.read(questionnaireViewModelProvider.notifier).selectGender(gender);
でstateの変更。
とにかくread()の中に.notifierを付ければメソッドを使えるっぽい。
あと、DropdownButton.valueとDropdownMenuItem.valueは必ず一致するようにする。
extendsについて
クラスが別のクラスを継承することを示す。
例えば、
class ParentClass {
void someMethod() {
print('親クラスのメソッド');
}
}
class ChildClass extends ParentClass {
void someMethod() {
print('子クラスでオーバーライドされたメソッド');
}
}
こんな感じのクラスがあるときを考える。
このとき、ChildClassがParentClassを継承している。
そして@overrideでParentClassを継承しつつ上書きしていくイメージ?
Discussion