一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
Riverpod的官方文档有多国语言,但是没有汉语,所以个人简单翻译了一版。
官网文档:Riverpod
GitHub:GitHub - rrousselGit/river_pod
Pub:riverpod | Dart Package (flutter-io.cn)
译时版本:riverpod 1.0.3
^0.13.0 to ^0.14.0
随着 Riverpod 0.14.0
版本的发布,使用 StateNotifierProvider 的语法发生了变化,(查看 github.com/rrousselGit… 的说明)。
对于整篇文章,考虑下面的 StateNotifier :
class MyModel {}
class MyStateNotifier extends StateNotifier<MyModel> {
MyStateNotifier(): super(MyModel());
}
变更点
-
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
:之前:
Widget build(BuildContext context, ScopedReader watch) { MyModel state = watch(provider.state); }
之后:
Widget build(BuildContext context, ScopedReader watch) { MyModel state = watch(provider); }
使用迁移工具自动用新语法升级工程
随着 0.14.0 版本带来的命令行工具,它可以帮助迁移你的工程。
安装命令行工具
要安装迁移工具,运行:
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
。