Home > Mobile >  Issue with statefulWidget unable to make desired changes
Issue with statefulWidget unable to make desired changes

Time:12-30

I am working on a statefulWidget and my purpose is to make sure that the next button is not clickable until an option (in this language is selected). However it doesn't seem to work

 return AlertDialog(
                                    content: Column(children: [
                                      InkWell(
                                          onTap: () {
                                            _handleTap;
                                          },
                                          child: ListTile(
                                              trailing: Icon(
                                                  Icons.flag_circle_rounded),
                                              title: Text(
                                                "French",
                                                style: TextStyle(
                                                    color: Colors.blueGrey),
                                              ))),
                                      _active
                                          ? InkWell(
                                              onTap: () {},
                                              child: Image.asset(
                                                  "assets/nextactive.png",
                                                  height: height * 0.2,
                                                  width: width * 0.4),
                                            )
                                          : Image.asset(
                                              "assets/nextinactive.png",
                                              height: height * 0,
                                              width: width * 0)
                                    ]),
                                  )

CodePudding user response:

Since your in a Dialog, for setState to work, you need to wrap it with a StatefulBuilder.

You haven't included your full code, so I'm using this example taken from the docs:

await showDialog<void>(
  context: context,
  builder: (BuildContext context) {
    int? selectedRadio = 0;
    return AlertDialog(
      content: StatefulBuilder(
        builder: (BuildContext context, StateSetter setState) {
          return Column(
            mainAxisSize: MainAxisSize.min,
            children: List<Widget>.generate(4, (int index) {
              return Radio<int>(
                value: index,
                groupValue: selectedRadio,
                onChanged: (int? value) {
                  setState(() => selectedRadio = value);
                },
              );
            }),
          );
        },
      ),
    );
  },
);

See also

A YouTube video by the Flutter team explaining StatefulBuilder

CodePudding user response:

To update dialog UI, you can use StatefulBuilder's setState

 return StatefulBuilder(
    builder: (context, setState) =>  
      AlertDialog(
          content: Column(children: [

More about using StatefulBuilder

  • Related