修改对象的副本同时修改了原始对象

问题描述 投票:0回答:1

[更改对象副本的DateTime属性时,它也在更新原始对象。在下面的代码中,当按下按钮时,我希望仅_reminder.dueDate被更新,但是_reminder.dueDatewidget.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?
      },
    );
  }
}

_reminder.dueDate = DateTime.now();之前:enter image description here

[C0之后:_reminder.dueDate = DateTime.now();

flutter dart
1个回答
0
投票

由于我知道了_reminder = widget.reminder仍引用相同的对象,因此通过制作对象的实际副本来解决。

在提醒对象中,我制作了一个复制功能,该功能返回了一个具有与原始属性相同的新提醒。

提醒对象:

enter image description here

Widget:

  Reminder clone() {
    return Reminder(
      dueDate: this.dueDate,
    );
  }
© www.soinside.com 2019 - 2024. All rights reserved.