在更改对象副本的DateTime
属性时,它也在更新原始对象。在下面的代码中,当按下按钮时,我希望仅更新_reminder.dueDate
,但是同时更新_reminder.dueDate
和widget.reminder.dueDate
。
import 'package:flutter/material.dart';
import 'package:realminder/models/reminder.dart';
class Test extends StatefulWidget {
final Reminder reminder; // <-- Original object
Test({
@required this.reminder,
});
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
Reminder _reminder;
@override
void initState() {
_reminder = widget.reminder; // <-- Create a copy of object
super.initState();
}
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: () {
_reminder.dueDate = DateTime.now(); // <-- Both objects being updated here... Why?
},
);
}
}
答案 0 :(得分:0)
由于我知道_reminder = widget.reminder仍引用相同的对象,因此通过制作对象的实际副本来解决。
在提醒对象中,我创建了一个复制功能,该功能返回了一个与原始属性相同的新提醒。
提醒对象:
Reminder clone() {
return Reminder(
dueDate: this.dueDate,
);
}
小部件:
@override
void initState() {
_reminder = widget.reminder.clone();
super.initState();
}