С ^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.