У меня есть следующий макет для диалогового окна предупреждения:
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
),
],
)
],
)
);
}
)
);
В консоли вижу только:
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════ Incorrect use of ParentDataWidget.
Это происходит каждый раз, когда я прокручиваю предупреждение, когда оно отображается.
Я просмотрел похожие вопросы (здесь, здесь) и попробовал следующие решения:
Как видите, в макете ListView нет расширенного виджета, и, поскольку трассировка стека неинформативна, я не понимаю, в чем проблема.
Должен ли я выложить диалоговое окно предупреждения по-другому? То, что я решил сделать, это создать макет с возможностью прокрутки и списком флажков, которые пользователь может отметить.
Игнорируя эту ошибку, все функции работают, и других проблем нет.
Удалите Spacer Widget из вашего кода. Попробуйте приведенный ниже код, надеюсь, он вам поможет.
логическая переменная для теста проверил и непроверенныйCheckBox
bool someValue = false;
Ваш виджет:
ElevatedButton(
onPressed: () {
// write your onPressed function here
alertDialog();
print('Button Pressed');
},
child: const Text('Press Me'),
),
Ваш метод alertDialog:
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
),
],
),
],
);
},
);
}
Вы можете протестировать свой код Dartpad
@tomerpacific Я думаю, что если бы вы использовали Spacer
внутри Column
, это действительно сработало бы, когда-нибудь Спейсер занял желаемое место в этом
Но почему элемент Spacer генерировал исключение в отношении ParentDataWidget? Я знаю, что делает виджет Spacer.
Можете ли вы объяснить, почему виджет Spacer вызывал ошибку?