1

This is all the code for the screen for this question to understand the problem

import 'package:flutter/material.dart';
import 'package:pos/utils/FCIStyle.dart';
class TestScreen extends StatefulWidget {
  const TestScreen({Key? key}) : super(key: key);

  @override
  _TestScreenState createState() => _TestScreenState();
}

class _TestScreenState extends State<TestScreen> {

  @override
  void initState() {
     super.initState();
     testController= TestController();
   }
late TestController testController;
   @override
  Widget build(BuildContext context) {
    return SafeArea(
        child: Scaffold(
          appBar: AppBar(
            backgroundColor: FCIColors.primaryColor(),
            elevation: 0,
            leading: Container(),
          ),
          body: Column(
            children: [
              Text('data 1'),
              Container(
                height: 100,
                child: Column(
                  children: List.generate(
                    testController.data1.length,
                        (index) => Text('itemCount:${testController.data1[index].itemCount}',),),
                ),
              ),
              SizedBox(height: 50),
              Text('data 2'),
              Container(
                height: 200,
                child: Column(
                  children: List.generate(
                    testController.data2.length,
                        (index) => Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Text('  itemCount:${testController.data2[index].itemCount}',),
                        InkWell(
                            onTap: (){
                              setState(() {
                                testController.changeStrData(index);
                              });
                            },
                            child: Icon(Icons.add_circle,size: 35,color: Colors.indigo,
                            ))
                      ],
                    )
                    ,),
                ),
              ),
            ],
          ),
        ));
  }
}

class TestController{
 final List<Data>data1=[
    Data(  itemCount: 0),
    Data( itemCount: 0),
    Data(  itemCount: 0),
  ];
   late List<Data>data2;
 TestController(){
     data2= data1;
   }
 changeStrData(index){
   data2[index].itemCount+=1;
 }
}
class Data{
  int itemCount;
  Data({ required this.itemCount});
}

The problem is equal to .

TestController(){
     data2= data1;
   }

how does the list of data model equal other?

lepsch
  • 8,927
  • 5
  • 24
  • 44

1 Answers1

0

The instance of Data is same here. so to create new instance .toList() isnt enough.

The solution is create new Data from the list.

 data2 = data.map((e) => Data(itemCount: e.itemCount)).toList();

You can explore Is Dart pass by reference?

Md. Yeasin Sheikh
  • 54,221
  • 7
  • 29
  • 56