Laila Mattar
Laila Mattar

Reputation: 361

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

Upvotes: 2

Views: 1046

Answers (1)

Roman Pozdnyakov
Roman Pozdnyakov

Reputation: 408

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

Upvotes: 3

Related Questions