flutter - 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();
}
我怎样才能纠正它?提前致谢
解决方案
在代码中的任何地方,像这样定义数据并初始化它。
Datum datum = Datum():
而 remove final
,因为你想改变它的属性,这不是final
,应该工作。
推荐阅读
- python - 根据用户在python中的意愿,类中的while循环迭代次数
- powershell - 将多个 PowerShell 脚本转换为一个 Exe 文件
- cordova - 内部导航被拒绝 -
未设置 url='mycustomprotocol://localhost' - machine-learning - 剂量预测
- asp.net-mvc - HttpPostedFileBase 在控制器 post 方法中总是返回 null
- python - 根据条件重写 Python 方法
- sql - 在 SQL 查询中添加货币
- typo3 - 将新页面访问组设置为父页面访问组
- python - Onnx模型的量化
- methods - 用mathematica插值的拉格朗日方法