Я пытаюсь использовать ChangeNotifierProvider для установки заголовка / информации AppBar и использую PlatformApp / PlatformScaffold / PlatformAppBar из flutter_platform_widgets
вместо написания отдельных виджетов материалов / Купертино для каждого маршрута. Однако при переходе на эту страницу или с этой страницы я получаю ProviderNotFoundException
со следующей ошибкой:
Error: Could not find the correct Provider<MyModel> above this Consumer<MyModel> Widget
Я попытался разделить свой ChangeNotifierProvider
на отдельный виджет без сохранения состояния. над виджетом, содержащим PlatformScaffold
, но это не решило проблему. Я также попытался обернуть дочерний элемент ChangeNotifierProvider виджетом Builder
, но это тоже не сработало. Я предполагаю, что это как-то связано с жизненным циклом PlatformScaffold
, поскольку ошибка присутствует только на экране устройства, когда страница находится в процессе перехода к странице или ее всплывающего окна. Я также пробовал переключиться на обычные строительные леса или скаффолды из Купертино (без использования виджетов платформы), и провайдер работал должным образом, как я и ожидал, при этом провайдер был правильно включен в BuildContext
.
class MyPageProvider extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyModel>(
create: (BuildContext context) => MyModel(
pageTitle: 'Initial Page Title',
// Rest of initial provider class fields set here
),
// I have tried wrapping this with a Consumer<MyModel> and with a Builder widget, but neither have solved this problem
child: MyPage(),
);
}
}
class MyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<MyModel>(
builder: (_, mymodel, __) => PlatformScaffold(
appBar: PlatformAppBar(
title: Text(mymodel.pageTitle),
material: (_, __) => MaterialAppBarData(),
cupertino: (_, __) => CupertinoNavigationBarData(
leading: GestureDetector(
onTap: () => Navigator.pop(context),
child: Icon(
Icons.arrow_back_ios,
color: CupertinoTheme.of(context).primaryContrastingColor,
),
),
),
),
body: MyPageBodyWidget(),
),
);
}
}
При необходимости я могу отказаться от виджетов платформы и go обратно, чтобы разделить виджеты Material / Cupertino, но я бы хотел, чтобы это работало, если это возможно. Спасибо за любую / всю помощь!