Group radio button in listView

Okay well I have built you a working version based on what you provided here. Please keep in mind that it would probably be a good idea to look at the documentation more in-depth so you get a feeling of how some widgets behave and what specific properties (like groupValue) are for. Also keep in mind that the following code is not optimised or whatsoever, I just got it worked out for your case – thinking about how to structure your data overall is some fundamental thing you should take a look at. Maybe try some out some flutter courses which are available or look at some youtube content from known flutter coders. But now back to some code stuff.

I used those properties in my StatefulWidget to work with. Since you use some kind of question map and I don’t know how it looks like, I just used something bare bones:

/// Map which has the question ID as its key and the answer from the user (currently true for yes and false for no (or n/a as in your case)
Map<int, bool> _answers = {};

/// Map which holds the information of your questions. Right now only an ID to be able to reference it and the actual question - again very bare bones
Map<String, dynamic> _item = {
  'questions': [
      'id': 0,
      'question': 'Is this legit?',
      'id': 1,
      'question': 'Oh really?',

Then the method which will be called by the Radio widget once onChanged is triggered:

/// We need to know which question has been answered (therefore the ID) and which (bool) answer has been clicked by the user
_setSelectedRadioTile(int id, bool answer) {
  setState(() {
    _answers[id] = answer;

And now the widget part – since your code starts where you iterate over the questions, I also share this part specifically:

/// Since the map itself is typed as <String, dynamic>, accessing 'questions' will return dynamic. Only we, as we know the structure, know that this is indeed a list. Therefore we need to cast this as "List<dynamic>" so we can iterate over it and won't get exceptions
(_item['questions'] as List<dynamic>)
  (question) => TableRow(children: [
        padding: EdgeInsets.all(10),
        child: Text(question['question'])),
      children: [
          /// The [value] property of Radio tells us, which property is used in [onChanged] - therefore now once this Radio is clicked, true is provided in the [onChanged] callback 
          value: true,
          /// [groupValue] is the value which this Radio is bound to. As you probably know, only one Radio button should be active for a group. So if you have a question which has several possible answers as radio buttons, we only want one of them to be active at a time. Thats what the [groupValue] is for. Since we iterate over all questions and every entity of a question (currently) has two possible answers (Yes and N/A), both those answers are for a specific question - the question with the current ID
          groupValue: _answers[question['id']],
          onChanged: (answer) {
            _setSelectedRadioTile(question['id'], answer);
          value: false,
          groupValue: _answers[question['id']],
          onChanged: (answer) {
            _setSelectedRadioTile(question['id'], answer);

This should work on your side once you updated this example to fit with your data model. Again: I advise you to think about how you structure your data generally.

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top