#flutter #dart #text #radio-button #row
Вопрос:
Как вы можете видеть на рисунке выше, текст «kg» имеет огромный пробел. но виджет высоты text field
идеален. И это показывает следующую ошибку.
Исключение, обнаруженное библиотекой виджетов
Неправильное использование ParentDataWidget.
Пожалуйста, дайте мне знать, в чем проблема
(Я новичок в трепете)
Material(
elevation: 30.0,
shadowColor: Colors.grey,
child: Container(
height: 100,
width: 375,
decoration: BoxDecoration(
border: Border.all(
color: Colors.blue,
),
),
alignment: Alignment.topCenter,
child: SizedBox(
height: 300,
width: 500,
child: Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 300,
child: SingleChildScrollView(
child: TextField(
controller: weightcon,
style: TextStyle(
color: Colors.black,
fontSize: 30,
),
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Weight',
focusedBorder: OutlineInputBorder(
borderRadius:
BorderRadius.circular(0.0),
borderSide: BorderSide(
color: Colors.black,
width: 2.0,
),
),
enabledBorder: OutlineInputBorder(
borderRadius:
BorderRadius.circular(0.0),
borderSide: BorderSide(
// color: Colors.redAccent[100],
color: Colors.black54,
width: 2.0,
),
),
),
onChanged: (weightval) {
print('First text field: $weightval');
globals.weightvalue =
double.parse(weightval);
},
),
),
),
SizedBox(
width: 5,
),
Container(
height: 130,
width: 30,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 30,
height: 50,
child: Flexible(
child: SizedBox(
child: Radio(
value: 0,
groupValue: 1,
onChanged: (value) {},
)),
)),
SizedBox(
width: 30,
),
SizedBox(
child: Flexible(
child: Text("KG"),
),),
Flexible(
child: SizedBox(
width: 30,
height: 25,
child: Radio(
value: 1,
groupValue: 1,
onChanged: (value) {},
)),
),
SizedBox(
width: 30,
),
SizedBox(
child: Flexible(
child: Text("LB"),
),),
],
),
),
],
),
),
),
),
),
Комментарии:
1. Можете ли вы включить родительский виджет
Material
?
Ответ №1:
Удалите высоту для sizedbox радиобуттона, высота занимает дополнительное пространство
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 30,
child: Flexible(
child: SizedBox(
child: Radio(
value: 0,
groupValue: 1,
onChanged: (value) {},
)),
)),
SizedBox(
width: 30,
),
SizedBox(
child: Flexible(
child: Text("KG"),
),),
Flexible(
child: SizedBox(
width: 30,
child: Radio(
value: 1,
groupValue: 1,
onChanged: (value) {},
)),
),
SizedBox(
width: 30,
),
SizedBox(
child: Flexible(
child: Text("LB"),
),),
],
),
),
],
),
Выход
Комментарии:
1. Нужно ли оборачивать столбец строкой
2. Скорее всего, в этом нет необходимости
3. Спасибо за ответ, тогда как мне добавить виджет радио по горизонтали в текстовое поле без виджета строки?
4. Внутри столбца свяжите переключатель и текст со строкой
Ответ №2:
Вы Expanded
неправильно использовали виджет! Это должны быть дочерние элементы Flex
виджета ( Row, Column, ListView, GridView, Wrap,...
). Как видите, вы написали:
Expanded(
child: Row( // this is where the error pointing at
),
),
Поэтому, чтобы исправить это, удалите этот Expanded
виджет и используйте его в качестве родительского для виджетов в стороне Row
виджета. Это пример:
Row(
children: [
Expanded( // Expanded Widget inside children parameter of Row Widget
child: Widget1(),
),
Expanded(
child: Widget2(),
),
],
),