^0.13.0 到 ^0.14.0
隨著 Riverpod 版本 0.14.0 的釋出,使用 StateNotifierProvider 的語法發生了變化 (請參閱 https://github.com/rrousselGit/riverpod/issues/341 瞭解詳細解釋)。
在整篇文章中,請考慮以下的 StateNotifier:
class MyModel {}
class MyStateNotifier extends StateNotifier<MyModel> {
MyStateNotifier(): super(MyModel());
}
The changes
StateNotifierProvider 添加了一個額外的泛型引數,該引數應該是您的 StateNotifier狀態的型別。
之前:
final provider = StateNotifierProvider<MyStateNotifier>((ref) {
return MyStateNotifier();
});之後:
final provider = StateNotifierProvider<MyStateNotifier, MyModel>((ref) {
return MyStateNotifier();
});為了獲取 StateNotifier ,您現在應該使用
myProvider.notifier
而不是僅僅使用myProvider
:之前:
Widget build(BuildContext context, ScopedReader watch) {
MyStateNotifier notifier = watch(provider);
}之後:
Widget build(BuildContext context, ScopedReader watch) {
MyStateNotifier notifier = watch(provider.notifier);
}為了監聽 StateNotifier 的狀態,您現在應該使用
myProvider
而不是myProvider.state
:Before:
Widget build(BuildContext context, ScopedReader watch) {
MyModel state = watch(provider.state);
}After:
Widget build(BuildContext context, ScopedReader watch) {
MyModel state = watch(provider);
}
使用遷移工具自動升級專案到新的語法
隨著 0.14.0 版本的釋出,Riverpod 推出了一個命令列工具,可以幫助您遷移專案。
安裝命令列工具
要安裝遷移工具,請執行:
dart pub global activate riverpod_cli
現在您應該能夠執行:
riverpod --help
使用說明
既然命令列工具已經安裝,我們可以開始使用它了。
- 首先,在終端中開啟您想要遷移的專案。
- 不要 升級 Riverpod.
遷移工具會為您升級 Riverpod 的版本。 - 確保您的專案不包含錯誤。
- 執行:
riverpod migrate
然後,該工具將分析您的專案並提出更改建議。例如,您可能會看到:
Widget build(BuildContext context, ScopedReader watch) {
- MyModel state = watch(provider.state);
+ MyModel state = watch(provider);
}
Accept change (y = yes, n = no [default], A = yes to all, q = quit)?
要接受更改,只需按 y 鍵。否則,要拒絕更改,按 n 鍵。