Я использую провайдера для предоставления моему приложению списка 'Enfant', который является классом моей модели, из Firebase:
class EnfantService extends ChangeNotifier {
FirestoreApi _api = FirestoreApi('enfant');
Stream<QuerySnapshot> fetchEnfantsAsStream(String idUtilisateur) {
return _api.streamDataCollectionByIdUtilisateur(idUtilisateur);
}
...
Мне удалось создать экран обновления, который является виджетом Statefull, передав данные для его конструктора, такие как:
class EnfantDetailsScreen extends StatefulWidget {
final Enfant enfant;
EnfantDetailsScreen({@required this.enfant});
@override
_EnfantDetailsScreenState createState() => _EnfantDetailsScreenState();
}
class _EnfantDetailsScreenState extends State<EnfantDetailsScreen> {
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
...
TextFormField(initialValue: widget.enfant.nom, ...)
...
}
}
Вот маршрут, определенный для go к этому экрану:
MaterialPageRoute(builder: (_) => EnfantDetailsScreen(enfant: settings.arguments));
Все работает правильно, но на моем экране обновления я Мне нужно вызвать widget.enfant для доступа к модели, а сам виджет, кажется, содержит модель.
Мне интересно, лучше ли в моем случае иметь в моем провайдере один синглтон этой модели? объект, который будет отредактированной моделью, чтобы предоставить данные на экран обновления, используя Provider.of. А затем, перед вызовом моего маршрута, мой экран List должен поместить хороший объект в синглтон класса EnfantService.
Я ищу наилучшую практику, чтобы иметь чистый код перед реализацией дополнительных функций.