Начнем с основного вопроса . Является ли модель с областью действия MVVM? Мой ответ - да, она должна использоваться как таковая, если сущности должны быть где-то сохранены.
Итак, я бы хотелачтобы ответить вам хорошо после его использования в течение двух месяцев.На мой взгляд, есть две возможности, которые могут быть более абстрактными без необходимости воссоздания структуры моделей, и одна, которую я видел, использовавшейся, которая должна быть исключена, если вы не хотите сталкиваться с проблемами управления данными между представлениями.
Первый - классический:
Widget build(BuildContext context) {
// At the top level of our app, we'll, create a ScopedModel Widget. This
// will provide the CounterModel to all children in the app that request it
// using a ScopedModelDescendant.
return ScopedModel<UserModel>( // <========
model: userModel,
child: ScopedModel<CounterModel>( // <========
model: counterModel,
child: MaterialApp(
title: 'Scoped Model Demo',
home: CounterHome('Scoped Model Demo'),
),
),
);
}
}
Второй, на мой взгляд, самый интеллектуальный метод - загрузка наиболее важных моделей в мире, которые нужны только для некоторых представлений.например, таймер, чтобы вставить их на самом верхнем используемом уровне страницы.
Второй пример: In main.dart
return ScopedModel<UserModel>(
model: UserModel(),
child: MaterialApp(
theme: ThemeData(
primaryColor: PrimaryColor,
),
home: new SplashScreen2(),
),
);
В workout.dart:
return ScopedModel<TimerModel>(
model: TimerModel(),
child: Scaffold(
child:Center(_widget)
),
);
Теперь в своем _widget вы можете использовать ScopedModelDescendant для UserModel и TimerModel ..
Чего я не советую вам делать, так это создать основную модель со смесью и расширить все остальные модели.К сожалению, я видел некоторые видео, которые делают это, не объясняя последствия.Или, если вы хотите сделать это, убедитесь, что между ними нет ссылок, потому что это может создать путаницу между тем, что действительно нужно обновить, или нет, я советую вам использовать это решение, только если у вас есть 2-3 модели .
Надеюсь, я помог кому-то, кому было интересно, как его использовать