Search code examples
androidiosfluttercustomdialogstatelesswidget

How to use setState() function inside statelessWidget class


I can't use setState function inside dialogContent and I got this error :

The method 'setState' isn't defined for the class 'CustomDialog'

and here I used setState()

Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: status ? <Widget>[
                    Container(
                      child: Padding(
                        padding: EdgeInsets.only(right: 5,top: 0),
                        child: Image.asset(
                          'assets/images/profile.png',
                          width: 60.0,
                          height: 60.0,
                        ),
                      ),
                    ),
                    Padding(
                        padding: const EdgeInsets.only(top: 0.0),
                        child: Container(
                          width: 200.0,
                          decoration: BoxDecoration(
                            color: Colors.white,
                            borderRadius: BorderRadius.only(
                              topLeft: const Radius.circular(50.0),
                              topRight: const Radius.circular(50.0),
                              bottomLeft: const Radius.circular(50.0),
                              bottomRight: const Radius.circular(50.0),
                            ),
                          ),
                          child: Padding(
                            padding: const EdgeInsets.all(20.0),
                            child: Center(
                              child: Text(
                                'test',
                                style: TextStyle(
                                    color: Colors.black,
                                    fontWeight: FontWeight.bold,
                                    fontSize: 25.0
                                ),
                              ),
                            ),
                          ),
                        )
                    ),
                    Padding(
                      padding: const EdgeInsets.only(left: 5.0),
                      child: CustomSwitch(
                        activeColor: Colors.green,
                        value: status,
                        onChanged: (value) {
                          print("VALUE : $value");
                          setState(() {
                            status = value;
                          });
                        },
                      ),
                    ),
                  ] :
                  [
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.only(left :25.0),
                        child: Center(
                          child: Text(
                            'test',
                            style: TextStyle(
                              color: Colors.red,
                              fontSize: 15.0,
                            ),
                          ),
                        ),
                      ),
                    ),
                    Padding(
                      padding: const EdgeInsets.only(left: 0.0),
                      child: CustomSwitch(
                        activeColor: Colors.green,
                        value: status,
                        onChanged: (value) {
                          print("VALUE : $value");
                          setState(() {
                            status = value;
                          });
                        },
                      ),
                    ),
                  ]
              ),

Solution

  • Sure you can't use setState() in StatelessWidget, that's the idea of this widget. StatelessWidget should be used only for "dumb" views that shouldn't hold any state. If you should set any state to your widget, consider to use StatefulWidget.

    Take a look on official flutter documentation: https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html