В моем приложении Flutter есть 2 экрана: список записей и экран для создания и редактирования записей.
Если я передаю объект на второй экран, это означает, что я собираюсь его отредактировать, а если я передаю значение null, это означает, что я создаю новый элемент. Экран редактирования - это виджет с отслеживанием состояния, и я не уверен, как использовать этот подход https://flutter.io/cookbook/navigation/passing-data/ для моего случая.
class RecordPage extends StatefulWidget {
final Record recordObject;
RecordPage({Key key, @required this.recordObject}) : super(key: key);
@override
_RecordPageState createState() => new _RecordPageState();
}
class _RecordPageState extends State<RecordPage> {
@override
Widget build(BuildContext context) {
//.....
}
}
Как я могу получить доступ к recordObject внутри _RecordPageState ?
Ответы:
Чтобы использовать recordObject в _RecordPageState, вам нужно просто написать widget.objectname, как показано ниже
источник
recordObject
должно быть частьюState
класса? Логично, что этоStatefulWidget
неправильно (с точки зрения сплоченности). Кроме того, все поляStatefulWidget
должны быть неизменными - что, если вы захотите изменитьrecordObject
ссылку?Text(widget.recordObject)
, он говорит, что мой var равен нулюисточник
recordObject
поля в классахState
и внутриStatefulWidget
- такая уж хорошая идея (хотя я видел учебники, делающие именно это). Подход доступа к полямStatefulWidget
с использованиемwidget
field ofState
class кажется более правильным подходом (хотя у него есть свои проблемы)Полный пример
Вам не нужно передавать параметры в State с помощью его конструктора. Вы можете легко получить к ним доступ, используя widget.myField .
Передайте свои данные при навигации по экрану:
источник