I have statefull widget, I want to create list of number and then ad them aslist onanother list,
I initialize the list ` late List digits; late List listOfDigits;
@override
void initState() {
digits = [];
listOfDigits = [];
super.initState();
}`
I have textfiled with controller name = number, and button to add the number to digits list :
digits.add(int.parse(number.text)); setState(() {});
and another button to add digits list to listOfDigits and clear digits list:
listOfDigits.add(digits)
digits.clear();
setState(() {});
firs time create list of digits I get : [[]] when I create second digis like [1,8,-9] I get : [[1,8,-9]] for thisrd time any digit (for example 7) add to digits it add otamitcly to both list and be like this : [[1,8,-9,7],[1,8,-9,7]]
I tried same thing with provider I get same result
Your problem is that objects are "pass by reference" in Dart (and mostly all languages).
digits
and listOfDigits
are both instances of type List
. When you do listOfDigits.add(digits)
, you are adding that same instance of digits
to the list every time. When you do digits.clear()
, you remove all the items inside it, and since listOfDigits
holds a reference to that same instance of digits
, it is empty too.
What you can do to fix that is to create a copy (a new instance) of the list of integers and pass that to the listOfDigits
, so that when you clear digits
, you don't clear the one inside of listOfDigits
.
You can do that by either using List.from
or creating a new list for digits
.
// List.from creates a new list with the same values as `digits`.
listOfDigits.add(List.from(digits));
digits.clear();
setState(() {});
New list:
listOfDigits.add(digits);
// Here, instead of clearing the same list inside `listOfDigits`,
// you are simply creating a new one for that variable (and keeping
// the old instance unmodified).
digits = [];
setState(() {});