Лучшая практика Flutter для отправки форм

У меня возникли проблемы с поиском хороших ресурсов для того, какие лучшие практики будут для разработки Flutter, особенно для обработки форм.

Все, что я нахожу при отправке форм, довольно ясное, но проблема в том, что все они имеют логику проверки и логику отправки непосредственно в виджете формы. Мне это не нравится, так как кажется, что это очень быстро станет очень запутанным с более чем, скажем, 3 входами и какой-либо более чем базовой логикой проверки. Это также, кажется, нарушает разделение интересов, думая, что я должен был быть большой вещью во Flutter/Dar (по крайней мере, из того, что я читал).

Поэтому моим решением для этого был мой класс FormHandler, который я определил в файле form_handler.dart. Он имеет несколько статических методов для проверки ввода, несколько методов для обработки отправки и formInput типа Map<String, dynamic> для хранения пар ключ-значение пользовательского ввода.

Это работает следующим образом:

  1. Экземпляр FormHandler создан
  2. Пользователь вводит данные
  3. В form.save() для каждого пользовательского ввода входные данные сохраняются в карте formInput, где ключ — это заголовок ввода, а значение — ввод пользователя.
  4. Кнопка отправки будет запускать функции проверки и сохранения, а затем брать данные из formInput и отправлять их чему-то вроде обработчика базы данных, который будет хранить их в базе данных.

form_handler.dart:

class FormHandler {
  // make new form handler with empty map
  FormHandler({required this.formInput});


  // for storing input key value pairs
  Map<String, dynamic> formInput;




  // Form submissions
  // new course
  void submitCourse({required formKey}){
    final form = formKey.currentState;

    // save on validate
    if ( form.validate() ){
      form.save();

      // then make new course via the database controller
    }
  }

  // Input validations
  static String? validateTextInput(String? input){
    if ( input == null || input.isEmpty ){
        return 'Field must not be empty';
    } else {
      return null;
    }
  }
}

Мне просто интересно, хорошее ли это решение, каковы возможные подводные камни, какие-либо предложения и т. д.

Мне это кажется хорошим решением, но я хотел бы получить отзыв от кого-то с большим опытом, чем у меня.

Спасибо, Сет.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете обратиться к этому каналу YouTube для получения инструкций. Вот ссылка на видео, связанное с текстовыми полями и проверкой — https://thewikihow.com/video_2rn3XbBijy4

Ответ принят как подходящий

Общепринятой практикой было бы создание объектов-значений или сущностей, которые содержат логику для проверки самих себя. Возможно, с интерфейсом (абстрактным классом) в качестве основы, чтобы убедиться, что вы не забыли реализовать такую ​​проверку.

Тем самым перемещая такую ​​логику проверки из пользовательского интерфейса и вместо этого заботясь о том, что важно в вашем домене. Можно будет проверить в нескольких местах вашего кода, а не только из формы, что не так легко достижимо с вашим предлагаемым решением. Ваше решение по-прежнему смешивает пользовательский интерфейс с логикой через formKey. Вы можете захотеть проверить «вещи», когда вы получаете данные из своего бэкэнда, или выполнять другие расчеты/изменения значений позже в приложении.

Итак, вы предлагаете мне создать объект для каждого типа ввода, скажем, TextInput, который имеет логику проверки для ввода текста? И затем интерфейс, который будет использоваться для создания объектов для каждого типа ввода?

Seth Harlaar 22.11.2022 21:04

Нет. Я предлагаю, если у вас есть поле ввода текста, которое должно собирать, например. адрес электронной почты, затем вы создаете объект с именем EmailAddress и позволяете этому объекту обрабатывать проверку. Таким образом, этот объект может хранить значение, а также сообщать, является ли оно действительным на основе набора правил. Затем форма может, в свою очередь, запросить у решения управления состоянием (по вашему выбору), является ли объект, в котором хранится значение, действительным или нет, и сообщить об этом пользователю.

Robert Sandberg 22.11.2022 21:09

Другие вопросы по теме