Как мне получить доступ к провайдеру Riverpod из другого файла?

Я привык к вызову провайдера Provider.of() для получения провайдера из другого места в дереве виджетов, но каждый найденный мной ресурс Riverpod полагается на уже имеющийся доступ к переменной провайдера (имея оба виджета в одном файле). Для провайдера, который обращается только через два виджета, передать эту переменную достаточно просто, но я не думаю, что это возможно для доступа к провайдерам, которые созданы высоко в дереве виджетов. Есть ли способ найти поставщика?


person UnicornsOnLSD    schedule 23.05.2021    source источник


Ответы (1)


Вы можете просто импортировать файл, в котором определен поставщик. Провайдеры Riverpod создаются в глобальном масштабе, поэтому доступны где угодно.

Например:

// hello_provider.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';

final helloWorld = Provider<String>((_) => 'Hello World');

// widget.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:my_app/hello_provider.dart'

class MyWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, ScopedReader watch) {
    return Text(watch(helloWorld));
  }
}
person Alex Hartford    schedule 24.05.2021