Недавно я играл с 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.
Когда кнопка нажата, я хочу открыть соответствующую страницу и передать «подмодели», необходимые из AppModel.
В настоящее время у меня есть onPressed
для моих кнопок, выглядящих примерно так, где я вставляю Scoped Models
() => 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()
Это правильный способ поделиться (несколькими) моделями? Или есть более элегантное решение?