簡體   English   中英

如何在 Dart 中的兩個屏幕之間傳遞數據

[英]How to pass Data between two Screens in Dart

我需要使用 dart 將數據發送到另一個屏幕我嘗試在另一個屏幕(editdata.dart)上創建構造函數以從主屏幕(readdata.dart)獲取數據它是有狀態的小部件問題在於: createState() => EditFire() EditFire class 需要傳參但是我還沒有數據

編輯數據.dart:

class EditData extends StatefulWidget {
  @override

  //Here the Error Occurs//

  State<StatefulWidget> createState() => EditFire();
}

class EditFire extends State<EditData> {
  EditFire(String ID, String date, String time, String dest, String src){
    currentID = ID;
    olddate = date;
    oldtime = time;
    _destinationcontroller.text = dest;
    _sourcecontroller.text = src;
  }
  late String currentID;
  final _destinationcontroller = TextEditingController();
  final _sourcecontroller = TextEditingController();
  late String olddate;
  late String oldtime;
}

在 readdata.dart 中:

EditFire("2","17/6/2022","2:25","NewYork","Japan");

第一頁

onPressed: () { 
      Navigator.of(context).push(MaterialPageRoute(builder: (_){
        return EditData("2","17/6/2022","2:25","NewYork","Japan");
      }));
    },

您要接收數據的第二頁

class EditData extends StatefulWidget {

 String currentID;
   String _destinationcontroller;
   String _sourcecontroller;
   String olddate;
   String oldtime;


   EditData(this.currentID, this._destinationcontroller, this._sourcecontroller,
      this.olddate, this.oldtime, {Key? key}) : super(key: key);

  @override
  State<EditData> createState() => _EditDataState();
}

class _EditDataState extends State<EditData> {

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Center(child:
        Text('${widget.currentID}'),),
    );
  }
}

要將EditData的數據訪問到EditFire ,您不需要在構造函數中傳遞它。 如您所見, EditFireEditData的 state。

因此,如果您想在EditFire中獲取EditData中使用的任何內容,您可以像widget.abc一樣使用它

class EditData extends StatefulWidget {
  // here, in constructor of widget, we are gathering values.
  EditData(
      {required this.currentID,
      required this.olddate,
      required this.oldtime,
      Key? key})
      : super(key: key);
  String currentID;
  String olddate;
  String oldtime;

  State<StatefulWidget> createState() => EditFire();
}

// this is a state widget of EditData. so no need to pass value in constructor of state widget.

class EditFire extends State<EditData> {
  final _destinationcontroller = TextEditingController();
  final _sourcecontroller = TextEditingController();
  String? currentID;
  String? olddate;
  String? oldtime;

  @override
  void initState() {
    super.initState();

    // you can get the values like this
    currentID = widget.currentID;
    olddate = widget.olddate;
    oldtime = widget.oldtime;
  }
}

要將值傳遞給 EditData,您需要將其傳遞給構造函數。 喜歡,

EditData(currentID: "", olddate: "", oldtime: "");

希望,這將解決您的問題,仍未解決請對問題發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM