К содержимому

С ^0.13.0 на ^0.14.0

С появлением 0.14.0 версии Riverpod синтаксис использования StateNotifierProvider изменился (объяснение: https://github.com/rrousselGit/riverpod/issues/341).

В этой статье рассмотрим следующий StateNotifier:

class MyModel {}

class MyStateNotifier extends StateNotifier<MyModel> {
MyStateNotifier(): super(MyModel());
}

Изменения

  • StateNotifierProvider принимает дополнительный generic параметр, который должен являться типом состояния нашего 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 появилась утилита командной строки для 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.