Один из вариантов (не рекомендуется) - это вложение 2-х провайдеров:
ChangeNotifierProvider<Reader>(
create: (_) => Reader(),
child: ChangeNotifierProvider<SomethingElse>(
create: (_) => SomethingElse(),
child: ChangeNotifierProvider<AnotherThing>(
create: (_) => AnotherThing(),
child: someWidget,
),
),
),
Это не рекомендуется, потому что, как указано в документации:
При вводе большого числа значений в больших приложения, провайдер может быстро стать довольно вложенным:
Но еще одно предложение от самого пакета Provider заключается в использовании MultiProvider :
providers: [
ChangeNotifierProvider<Reader>(create: (_) => Reader()),
ChangeNotifierProvider<SomethingElse>(create: (_) => SomethingElse()),
ChangeNotifierProvider<AnotherThing>(create: (_) => AnotherThing()),
],
child: _HomeBody(),
)
Оба подхода работают одинаково, но второй более читабелен. В документации приведены слова:
Поведение обоих примеров строго одинаково. MultiProvider изменяет только внешний вид кода.
Пример, адаптированный со страницы пакета флаттера провайдера и адаптированный к вашему случаю.