StatefulWidget에 데이터를 전달하고 Flutter의 상태에서 액세스


124

Flutter 앱에는 기록 목록과 기록 생성 및 편집을위한 화면이 있습니다.

두 번째 화면에 개체를 전달하면 편집 할 것임을 의미하고 null을 전달하면 새 항목을 만들고 있음을 의미합니다. 편집 화면은 Stateful 위젯이며 제 경우에 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) {
   //.....
  }
}

_RecordPageState 내에서 recordObject에 어떻게 액세스 할 수 있습니까?



_RecordPageState 클래스의 함수에서 'recordObject'변수 값을 어떻게 사용할 수 있습니까?
Kamlesh

답변:


208

_RecordPageState에서 recordObject를 사용하려면 아래와 같이 widget.objectname을 작성하면됩니다.

class _RecordPageState extends State<RecordPage> {
  @override
  Widget build(BuildContext context) {
   .....
   widget.recordObject
   .....
  }
}

9
Flutter를 처음 사용하는 분들은 '@override RecordPage get widget => super.widget;'과 같은 위젯을 정의하는 것을 잊지 마십시오.
hhk

22
@hhk 왜 필요한가요?
Herohtar

2
수업의 recordObject일부가되어야하지 State않나요? 논리적으로 그것을 갖는 것은 StatefulWidget(응집력 측면 에서 ) 정확하지 않습니다. 게다가의 모든 필드는 StatefulWidget불변이어야합니다. recordObject참조 를 변경하려면 어떻게해야합니까?
알렉스 Semeniuk

나는 정확히 Text(widget.recordObject)
Dani

_RecordPageState 클래스의 함수에서 'recordObject'변수 값을 어떻게 사용할 수 있습니까?
Kamlesh

32
class RecordPage extends StatefulWidget {
  final Record recordObject;

  RecordPage({Key key, @required this.recordObject}) : super(key: key);

  @override
  _RecordPageState createState() => new _RecordPageState(recordObject);
}

class _RecordPageState extends State<RecordPage> {
  Record  recordObject
 _RecordPageState(this. recordObject);  //constructor
  @override
  Widget build(BuildContext context) {.    //closure has access
   //.....
  }
}

1
이것이 statefull 위젯 인 이유를 설명해주세요.
localhoost

@atilkan OP 초기 스크립트는 StatefulWidget이므로 필요에 맞게 몇 줄을 추가했습니다.
adadion 19

3
나는 recordObject필드 StateStatefulWidget클래스 모두에 필드 를 갖는 것이 그렇게 좋은 생각 이라고 생각하지 않습니다 . 의 필드에 액세스하는 방법 StatefulWidget을 사용하여 widget의 필드 State클래스는 더 올바른 접근 방식 (그것의 자신의 문제가있다하더라도)처럼 보일
알렉스 Semeniuk

21

전체 예

생성자를 사용하여 State에 매개 변수를 전달할 필요가 없습니다. widget.myField를 사용하여 쉽게 액세스 할 수 있습니다 .

class MyRecord extends StatefulWidget {
  final String recordName;
  const MyRecord(this.recordName);

  @override
  MyRecordState createState() => MyRecordState();
}

class MyRecordState extends State<MyRecord> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.recordName); // Here you direct access using widget
  }
}

탐색 화면에서 데이터 전달 :

 Navigator.of(context).push(MaterialPageRoute(builder: (context) => MyRecord("WonderWorld")));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.