[官文翻译]Flutter状态管理库Riverpod - 迁移 - ^0.13.0 to ^0.14.0

133 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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)? 

截屏2022-03-29 13.41.15.png

要接受这些改动,只需要按 y 。否则要拒绝,按 n