Я боролся с этим со вчерашнего дня - я создаю новый объект ScopedModel в контроллере вкладок (ScreenTabs), а затем передаю его нескольким вкладкам в BottomNavigationBar (потомки 1-го уровня, например: ScreenBook), оборачивая каждыйвкладка как ScopedModelDescendant.Пока все хорошо - все работает как положено.
Проблема возникает, когда на одной из моих вкладок я бы хотел перейти к его дочернему элементу (потомок 2-го уровня, например: ScreenBookDetails) и использовать там ScopedModel,Я уже пытался использовать ScopedModelDescendant и ScopedModel.of (контекст) без удачи - получаю Ошибка: Не могу найти правильный ScopedModel каждый раз.
Мой код (некоторые пропущены для краткости):
TabController
...
class ScreenTabsState extends State<ScreenTabs> {
ModelTabs modelTabs = ModelTabs(); //new Model object
var screens = [new ScreenHome(),new ScreenBook(),];
@override
Widget build(BuildContext context) {
return ScopedModel<ModelTabs>(
model: modelTabs,
child: Scaffold(...)
body: Builder (builder: (context) => Container(child:
screens.elementAt(selectedIndex),)),
bottomNavigationBar: BottomNavigationBar(
currentIndex: selectedIndex,
items: [...],
onTap: onTabTapped,
),)...}
ScreenBook (1-й этап - ScpodedModel работает, как и ожидалось)
...
class ScreenBookState extends State<ScreenBook> {
@override
Widget build(BuildContext context) {
return new Scaffold(
body: ScopedModelDescendant<ModelTabs>(builder: (context, child, model) {
print(TAG + "model status:" + model.status.toString());
return model.status == Status.LOADING ? MyCircularProgressIndicator() :
Builder (builder: (context) =>
Card(...
child: InkWell(
onTap: (){
Navigator.of(context).pushNamed("/ScreenBookDetails");},))}}
ScreenBookDetails (1-й этап - ошибка)
...
class ScreenBookDetailsState extends State<ScreenBookDetails>{
@override
Widget build(BuildContext context) {
return Scaffold(
body: ScopedModelDescendant<ModelTabs>(builder: (context, child, model) {
print(TAG + "scoped model status: " + model.status.toString()); //Error: Could not find the correct ScopedModel.
return model.status == Status.LOADING ? MyCircularProgressIndicator() : Builder(builder: (context) => Column(...)
...
может кто-нибудь указать мнеправильный способ решить эту проблему, пожалуйста?Я новичок в Dart и Flutter, так что может быть что-то, что я не совсем понял, поскольку я сталкиваюсь с подобной проблемой при создании объекта ScopedModel в ScreenSplashScreen, затем переходе к ScreenLogIn и попытке использовать его там.
Спасибо!:)