首页 > 解决方案 > Flutter 对象未在函数内部初始化

问题描述

我是新来的,我遇到了一个问题。

我的应用程序中有一个基准模型,如下所示:

class Datum {
  Datum({
    this.id,
    this.boxId,
    this.userId,
    this.revisionType,
    this.revisionDate,
    this.revisionLocation,
    this.revisionTitle,
    this.kilometragePourVidange,
    this.repeatRevision,
    this.revisionStatus,
    this.kilometrageLastVidange,
    this.kilometrageRevision,
  });

  int id;
  int boxId;
  int userId;
  String revisionType;
  DateTime revisionDate;
  String revisionLocation;
  String revisionTitle;
  int kilometragePourVidange;
  int repeatRevision;
  int revisionStatus;
  dynamic kilometrageLastVidange;
  int kilometrageRevision;

  factory Datum.fromJson(Map<String, dynamic> json) => Datum(
        id: json["id"],
        boxId: json["box_id"],
        userId: json["user_id"],
        revisionType: json["revision_type"],
        revisionDate: DateTime.parse(json["revision_date"]),
        revisionLocation: json["revision_location"],
        revisionTitle: json["revision_title"],
        kilometragePourVidange: json["kilometrage_pour_vidange"] == null
            ? null
            : json["kilometrage_pour_vidange"],
        repeatRevision: json["repeat_revision"],
        revisionStatus: json["revision_status"],
        kilometrageLastVidange: json["kilometrage_last_vidange"],
        kilometrageRevision: json["Kilometrage_revision"] == null
            ? null
            : json["Kilometrage_revision"],
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "box_id": boxId,
        "user_id": userId,
        "revision_type": revisionType,
        "revision_date":
            "${revisionDate.year.toString().padLeft(4, '0')}-${revisionDate.month.toString().padLeft(2, '0')}-${revisionDate.day.toString().padLeft(2, '0')}",
        "revision_location": revisionLocation,
        "revision_title": revisionTitle,
        "kilometrage_pour_vidange":
            kilometragePourVidange == null ? null : kilometragePourVidange,
        "repeat_revision": repeatRevision,
        "revision_status": revisionStatus,
        "kilometrage_last_vidange": kilometrageLastVidange,
        "Kilometrage_revision":
            kilometrageRevision == null ? null : kilometrageRevision,
      };
}

现在我有我正在尝试将数据发送到服务器的 setRevision() 。我的问题是当我在发送数据之前检查数据==>我发现它是空的

打印(datum.repeatRevision);== 空打印(datum.revisionTitle);== 空

  void setRevision() async {
   if (_formKey.currentState.validate()) {
      datum.kilometragePourVidange =
          num.parse(_Kilometrage_revisionController.text);
      datum.revisionType = status.toString();
      datum.revisionTitle = _eventController.text;
      datum.revisionLocation = _EmplacementController.text;
      datum.revisionDate = _DateController.text as DateTime;
      datum.repeatRevision = status1;
      datum.kilometrageRevision =
          num.parse(_Kilometrage_revisionController.text);

print(datum.repeatRevision);
print(datum.revisionTitle);

 revisionApi
          .setRevision(
   datum.revisionTitle,
        datum.revisionType,
        datum.revisionDate,
        datum.revisionLocation,
        datum.repeatRevision,
        datum.kilometrageRevision,
        datum.kilometragePourVidange,
      )
 .then((data) {
        if (data != null) {
ScaffoldMessenger.of(context)
            .showSnackBar(SnackBar(content: Text(data)));
   }).catchError((error) {
        ScaffoldMessenger.of(context)
            .showSnackBar(SnackBar(content: Text(error.toString())));
      });
      setState(() {});
      _KilometrageController.clear();
      _eventController.clear();
      _EmplacementController.clear();
      _DateController.clear();
      _revision_agenceController.clear();
      _Kilometrage_revisionController.clear();

      Navigator.pop(context);

      //
    }
  }

Future<Datum> setRevision(
    String revision_type,
    String revision_title,
    DateTime revision_date,
    String revision_location,
    int kilometrage_pour_vidange,
    int repeat_revision,
    int kilometrage_revision,
  ) async {
    SharedPreferences localStorage = await SharedPreferences.getInstance();
    String token = localStorage.getString('access_token');
    await checkInternet();
    Map<String, String> headers = {
      'Content-type': 'application/json',
      'Accept': 'application/json',
      'Authorization': 'Bearer $token'
    };
    Map<String, dynamic> body = {
      'revision_type': revision_type,
      if (revision_title.isNotEmpty) 'revision_title': revision_title,
      'revision_date': revision_date,
      'revision_location': revision_location,
      'kilometrage_pour_vidange': kilometrage_pour_vidange,
      'repeat_revision': repeat_revision,
      'revision_agence': revision_location,
      'kilometrage_revision': kilometrage_revision,
    };
    print(body);
    try {
      final response = await http
          .post(Uri.parse(ApiUtil.SET_REVISION),
              headers: headers, body: jsonEncode(body))
          .timeout(const Duration(seconds: 15));
      final responseBody = jsonDecode(response.body);


      var data = body['message'];
      switch (response.statusCode) {
        case 200:
          throw Exception(data);
    if (response.statusCode != 200) throw Exception(responseBody['message']);
    } on TimeoutException catch (e) {
      throw ('The connection has timed out, Please try again!');
    } catch (error) {
      throw (error?.message ?? 'Server is down');
    }
  }

这是 initState()

 final datum = Datum();

    @override
      void initState() {
        WidgetsBinding.instance.addPostFrameCallback((_) {
          getTask1().then((val) => setState(() {
                _events = val;
              }));
        });
        super.initState();
        _controller = CalendarController();
        _eventController = TextEditingController();
        _events = {};
        initializeDateFormatting();
        _selectedEvents = [];
        prefsData();
      }

我怎样才能纠正它?提前致谢

标签: flutterdart

解决方案


在代码中的任何地方,像这样定义数据并初始化它。

Datum datum = Datum():

而 remove final,因为你想改变它的属性,这不是final,应该工作。


推荐阅读