Я недавно играл с Scoped Model, и мне было интересно, есть ли лучший способ поместить несколько моделей в дерево для использования детьми.
Предположим, у меня есть 'AppModel', который представляет собой композицию всехнеобходимые мне модели
class AppModel extends Model
{
ModelA a = new ModelA();
ModelB b = new ModelB();
ModelC c = new ModelC();
}
Я начинаю с добавления этой модели в дерево из main
runApp(ScopedModel<AppModel>(
model: AppModel(),
child: MaterialApp(
title: 'MyApp',
home: Home(),
)),);
. Это приводит к запуску приложения на домашней странице с доступной моделью приложения вдерево
Домашняя страница - это серия кнопок, каждая из которых ведет на другую страницу, которая может использовать несколько моделей из AppModel
. При нажатии кнопки я хочу открыть соответствующую страницу и передать«подмодели», которые необходимы из AppModel
В настоящее время у меня есть onPressed
для моих кнопок, выглядящих примерно так, где я вкладываю модели Scoped
() => Navigator.push(context,
MaterialPageRoute(builder: (context) => ScopedModel<ModelA>
model: ScopedModel.of<AppModel>(context).a,
child: ScopedModel<ModelB>(
model: ScopedModel.of<AppModel>(context).b,
child: PageAB())))))),
Внутри PageAB
Я могу получить доступ к соответствующей модели через ScopedModel.of()
ScopedModel.of<ModelA>(context).modelAGet
ScopedModel.of<ModelA>(context).modelAFunc()
ScopedModel.of<ModelB>(context).modelBGet
ScopedModel.of<ModelB>(context).modelBFunc()
. Это правильный способ обмена (несколькими) моделями?Или есть более элегантное решение?