Наилучшая практика передачи данных на экран обновления (пример CRUD) с помощью Provider, Flutter, Firebase - PullRequest
0 голосов
/ 22 апреля 2020

Я использую провайдера для предоставления моему приложению списка '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.

Я ищу наилучшую практику, чтобы иметь чистый код перед реализацией дополнительных функций.

...