Передача данных во флаттере назад и четвёртыйIOS

Программируем под IOS
Ответить
Гость
 Передача данных во флаттере назад и четвёртый

Сообщение Гость »


У меня есть первый экран с несколькими полями формы. при нажатии кнопки создается объект из полей формы и добавления его в список. после добавления пары объектов вы можете перейти на экран обзора, на котором мы можем увидеть список, который мы только что создали, в виде списка. А когда вы хотите отредактировать объект, у меня на каждой карточке списка есть кнопка для редактирования. Я хочу, чтобы при щелчке по объекту я повторно использовал первый экран с полями формы для редактирования этого объекта, по сути, он вернет список со всеми объектами и идентификатором объекта, который нужно редактировать. объект заполнит поля формы, а затем будет отредактирован пользователем и заменит текущий объект, который мы хотим отредактировать. после редактирования идентификатора хотелось бы вернуться на второй экран с обновленным списком, который будет отображаться в списке. это экран поля формы:

// ignore_for_file: require_const_constructors, use_build_context_synchronous, non_constant_identifier_names, ignore_print, curly_braces_in_flow_control_structures импортировать «пакет:cloud_firestore/cloud_firestore.dart»; импортировать «пакет: firebase_auth/firebase_auth.dart»; импортировать «пакет: флаттер/материал.dart»; импортировать «пакет: flutter/services.dart»; импортировать «пакет: titan_coach_app/Exercision.dart»; импортировать «пакет: titan_coach_app/WorkoutReviewScreen.dart»; импортировать «main.dart»; окончательный список_тренировок = []; класс TrainingCreateScreen расширяет StatefulWidget { _TrainingCreateScreenState createState() => _TrainingCreateScreenState(); } окончательный _exercisionNotes = TextEditingController(); class _TrainingCreateScreenState расширяет State { окончательный GlobalKey _formKey = GlobalKey(); @переопределить Сборка виджета (контекст BuildContext) { вернуть эшафот( AppBar: AppBar( title: Text(user?.email ?? 'Электронная почта не подключена'), Цвет фона: Цвета.янтарный, действия: [ buildSeeingAllTheExercisions() ], ), тело: AnnotatedRegion( значение: SystemUiOverlayStyle.dark, ребенок: Стек( дети: [ Контейнер( высота: двойная бесконечность, ширина: двойная бесконечность, украшение: BoxDecoration( цвет: Цвет (0xff333333), ), дочерний элемент: SingleChildScrollView( отступ: EdgeInsets.symmetric(вертикаль: 50), ребенок: Столбец( mainAxisAlignment: MainAxisAlignment.center, дети: [ построитьУпражнение(), SizedBox(высота: 10), построитьУпражнениеBt(), SizedBox(высота: 10), buildUploadTrainingBt(), Кнопка ПлавающегоДействия( onPressed: () асинхронный { пытаться { дождитесь FirebaseAuth.instance.signOut(); // После выхода возвращаемся на экран входа в систему Навигатор.pushReplacement( контекст, MaterialPageRoute (строитель: (контекст) => LoginScreen()), ); } поймать (е) { print('Ошибка выхода: $e'); } }, дочерний элемент: Текст («Выйти»), ), ], ), ), ), ], ), ), ); } // просто формы, ничего интересного Виджет buildExercision() { Форма возврата( ), ), ], ), ), ); } //кнопка добавления упражнения в список Виджет buildExercisionBt() { вернуть FloatingActionButton( onPressed: () { if(_formKey.currentState!.validate()){ Training_list.add(Упражнение( _имяупражнения.текст, int.tryParse(_numberOfSets.text) ?? 0, int.tryParse(_numberOfReps.text) ?? 0, int.tryParse(_exercisionRPE.text) ?? 0, _exercisionNotes.text.isEmpty? '': _exercisionNotes.text) ); окончательный snAdeded = SnackBar( content: Text("Добавлено в тренировку"), действие: SnackBarAction (метка: «отменить», onPressed: () {training_list.removeLast();}),); ScaffoldMessenger.of(context).showSnackBar(snAdeded); } печать (training_list); }, Цвет фона: Цвета.янтарный, дочерний элемент: Значок(Icons.add), ); } //Кнопка перехода на экран, на котором можно увидеть все упражнения Виджет buildSeeingAllTheExercisions() { вернуть ElevatedButton( onPressed: (){ Navigator.push(context, MaterialPageRoute(builder: (контекст) => WorkoutReviewScreen(training_list: Training_list))); }, стиль: ButtonStyle( высота: MaterialStateProperty.all(0), backgroundColor: MaterialStateProperty.all(Colors.transparent), ), дочерний элемент: Icon(Icons.check)); } // Чтобы числовые формы проверяли, являются ли они числами NumberValidator (Строковое значение) { } } это второй экран со списком:

// ignore_for_file: предпочитает_const_constructors импортировать «пакет: флаттер/cupertino.dart»; импортировать «пакет: флаттер/материал.dart»; импортировать «пакет: titan_coach_app/create_training_screen.dart»; импортируйте «create_training_screen.dart»; импортировать «Exercision.dart»; класс WorkoutReviewScreen расширяет StatefulWidget { окончательный список обучающий_список; WorkoutReviewScreen({required this.training_list}); @переопределить State createState() => _WorkoutReviewScreenState(); } class _WorkoutReviewScreenState расширяет State { @переопределить Сборка виджета (контекст BuildContext) { вернуть эшафот( AppBar: AppBar( title: Text(user?.email ?? 'Электронная почта не подключена'), Цвет фона: Цвета.янтарный, ), тело: ListView.builder( отступ: EdgeInsets.symmetric (по горизонтали: 30, по вертикали: 10), itemCount: Training_list.length, itemBuilder: (контекст, индекс) => Контейнер( поле: EdgeInsets.symmetric(вертикаль: 3), дочерний элемент: exersiceCard(training_list[index])), ), фонЦвет: Цвет (0xff333333), ); } //это блок, в котором каждое упражнение находится в виде списка Виджет exersiceCard (Упражнение) { возврат карты( ребенок: Заполнение( отступ: const EdgeInsets.symmetric (по горизонтали: 7, по вертикали: 12), ребенок: Столбец( Ряд( mainAxisAlignment: MainAxisAlignment.end, дети: [ buildEditExercisionBt (упражнение), buildDeleteExercisionBt (упражнение), ], ), ], ), ), ); } /// используется для удаления упражнения из списка упражнений Виджет buildDeleteExercisionBt (Упражнение delExercision) { вернуть IconButton( } /// используется для редактирования упражнения из списка упражнений Виджет buildEditExercisionBt (Упражнение EditExercision) { вернуть IconButton( onPressed: (){ Навигатор. push(контекст, MaterialPageRoute(builder: (context) => TrainingCreateScreen(editExercision))); }, значок: Значок( Иконки.редактировать, )); } } Я пытался вызвать экран поля формы при редактировании, но он попросил создать конструктор. Я не хочу создавать конструктор, потому что у меня есть другой экран, который вызывает экран поля формы, на котором нет объекта/списка для предоставления.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»