1

When changing a DateTime property of a copy of an object, it is also updating the original object. In the below code, when the button is pressed, I expect only the _reminder.dueDate to be updated, but both _reminder.dueDate and widget.reminder.dueDate are being updated at the same time.

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?
      },
    );
  }
}

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

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

Ned
  • 490
  • 4
  • 15
  • 1
    [see this on passing by reference](https://stackoverflow.com/questions/25170094/what-is-the-true-meaning-of-pass-by-reference-in-modern-languages-like-dart) – cmd_prompter Dec 24 '19 at 15:05

1 Answers1

0

Resolved by making an actual copy of the object since I learned _reminder = widget.reminder is still referencing the same object.

In my reminder object, I made a copy feature which returned a new reminder with the same properties as the original.

Reminder object:

  Reminder clone() {
    return Reminder(
      dueDate: this.dueDate,
    );
  }

Widget:

  @override
  void initState() {
    _reminder = widget.reminder.clone();

    super.initState();
  }
Ned
  • 490
  • 4
  • 15
  • I am trying the same solution, but it is not working for me. Could you please help me – Dev94 Aug 03 '22 at 16:26
  • https://stackoverflow.com/questions/73208409/making-changes-in-cloned-object-instance-reflects-everywhere-the-object-is-being – Dev94 Aug 04 '22 at 11:02
  • This is my query, same issue. Kindly help me with this problem. It would be highly appreciable. – Dev94 Aug 04 '22 at 11:04