'The method 'setState' isn't defined for the type 'NasabahDataTableSource'

I want to use setState method in class "NasabahDataTableSource" but when i use setState in this class cannot work and Error: The method 'setState' isn't defined for the class 'NasabahDataTableSource'.

  • 'NasabahDataTableSource' is from 'package:flutter_auth/screens/Menu/DataNasabah/datanasabah.dart' ('lib/screens/Menu/DataNasabah/datanasabah.dart'). Try correcting the name to the name of an existing method, or defining a method named 'setState'. setState(() { ^^^^^^^^

This is mystatefullwidget.

class DataNasabah extends StatefulWidget {
  @override
  _DataNasabahState createState() => _DataNasabahState();
}

class _DataNasabahState extends State<DataNasabah> {
  String nama_debitur = '';
  List<Nasabah> _nasabah = [];


  @override
  void initState() {
    super.initState();
    _loadUserData();
    _getNasabah();
  }

  _loadUserData() async {
    SharedPreferences localStorage = await SharedPreferences.getInstance();
    var user = jsonDecode(localStorage.getString('user'));

    if (user != null) {
      setState(() {
        nama_debitur = user['nama_debitur'];
      });
    }
  }

  _getNasabah() {
    NasabahService.getUser().then((nasabah) {
      if (mounted) {
        setState(() {
          _nasabah = nasabah;
        });
      }
    });
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text('Data Nasabah'),
        backgroundColor: Color(0xff151515),
        // automaticallyImplyLeading: false,
      ),
      body: SingleChildScrollView(
        child: PaginatedDataTable(
          rowsPerPage: 10,
          columns: [
            DataColumn(
              label: Expanded(
                  child: Text(
                'ID Nasabah',
                textAlign: TextAlign.center,
              )),
            ),
            DataColumn(
              label: Expanded(
                  child: Text(
                'Nama Nasabah',
                textAlign: TextAlign.center,
              )),
            ),
            DataColumn(
              label: Expanded(
                  child: Text(
                'Aksi',
                textAlign: TextAlign.center,
              )),
            ),
          ],
          source: NasabahDataTableSource(userData: _nasabah, context: context),
        ),
      ),
    );
  }
}

I want to use setState method in this class.but cann't use.I comment setState place

class NasabahDataTableSource extends DataTableSource {
  BuildContext context;
  NasabahDataTableSource({this.context, this.userData});
  final List<Nasabah> userData;

  @override
  DataRow getRow(int index) {
    return DataRow.byIndex(
      index: index,
      cells: [
        DataCell(Align(
            alignment: Alignment.center,
            child: Text(
              "${userData[index].id}",
            ))),
        DataCell(Align(
          alignment: Alignment.center,
          child: Text("${userData[index].nama_debitur}"),
        )),
        DataCell(
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              IconButton(
                icon: Icon(Icons.navigate_next),
                color: Colors.blueAccent,
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) =>
                          DetailNasabah(
                            nasabah: userData[index],
                          ),
                    ),
                  );
                },
              ),
              IconButton(
                icon: Icon(Icons.delete),
                color: Colors.red,
                onPressed: () {
                  showDialog(
                    context: context,
                    builder: (context) =>
                        AlertDialog(
                          title: Text('Hapus Data Nasabah'),
                          content: Text(
                              'Apakah anda yakin ingin menghapus data nasabah ini?'),
                          actions: [
                            TextButton(
                                child: Text('Yes'),
                                onPressed: () {
                                  NasabahService.deleteUser(userData[index].id);
                                  setState(() {
                                    //Cann't use
                                  });
                                })
                          ],
                        ),
                  );
                },
              )
            ],
          ),
        ),
      ],
    );
  }

i haven't find that solution. Please help.



Solution 1:[1]

you cant setstate in NasabahDataTableSource because not extends StatefulWidget. only stateful who can setstate. but you can change variable without setstate using getx in stateless.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 anggadaz