I have the following layout for an alert dialog:
AlertDialog(
title: Text('Some Text'),
content: StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
return Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: ListView(
children: [
ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: usersWithoutBirthdays.length,
itemBuilder: (BuildContext context, int index) {
return CheckboxListTile(
title: Text("More Text Here"),
value: someValue,
onChanged: (bool? value) {
if (value != null) {
setState(() {
//Set state logic here
});
}
}
);
},
),
Spacer(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
TextButton(
child: Text("Cancel"),
onPressed: () {
Navigator.pop(context);
},
),
TextButton(
child: Text("Continue"),
onPressed:
//OnPressed logic here
),
],
)
],
)
);
}
)
);
In the console all I see is:
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════ Incorrect use of ParentDataWidget.
This happens every time I scroll down within the alert when it is shown.
I have looked at similar questions (here, here) and have tried the following solutions:
As you can see, there is no Expanded widget as part of the ListView's layout and since the stacktrace is not informative, I don't understand where the problem lies.
Should I have laid out the alert dialog differently? What I set to accomplish is have a layout that is scrollable and has a list of checkboxes the user can mark.
Ignoring this error, all the functionality works and there is no other issue.
Remove Spacer Widget from your code. Try below code hope its help to you.
bool variable for test checked and unchecked CheckBox
bool someValue = false;
Your Widget:
ElevatedButton(
onPressed: () {
// write your onPressed function here
alertDialog();
print('Button Pressed');
},
child: const Text('Press Me'),
),
Your alertDialog method:
alertDialog() {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('Some Text'),
content: StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: ListView(
children: [
ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: 30,//usersWithoutBirthdays.length,
itemBuilder: (BuildContext context, int index) {
return CheckboxListTile(
title: Text("More Text Here"),
value: someValue,
onChanged: (bool value) {
if (value != null) {
setState(() {
//Set state logic here
});
}
});
},
),
],
),
);
},
),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
TextButton(
child: Text("Cancel"),
onPressed: () {
Navigator.pop(context);
},
),
TextButton(
child: Text("Continue"),
onPressed: () {},
//OnPressed logic here
),
],
),
],
);
},
);
}
You can test your code Dartpad