I have a TextField
to enter the year and two RadioListTiles
for AD or BC. I would like to have a Row
with the TextField
first, and then the RadioListTiles
stacked after that and in a smaller font size. Can someone help?
Here's what it looks like now:
And here is the code:
TextField(
focusNode: inputNode,
autofocus: true,
keyboardType: const TextInputType.numberWithOptions(),
controller: yearController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: "Enter the Year of the Event",
)),
Row(
children: [
Flexible(
child: RadioListTile<Era>(
title: const Text('A.D.'),
value: Era.ad,
groupValue: _era,
onChanged: (Era? value) {
setState(() {
_era = value;
});
},
),
),
Flexible(
child: RadioListTile<Era>(
title: const Text('B.C.'),
value: Era.bc,
groupValue: _era,
onChanged: (Era? value) {
setState(() {
_era = value;
});
},
),
),
],
),
This is how I would approach this:
import 'package:flutter/material.dart';
enum Era { ad, bc }
class YearInputWidget extends StatefulWidget {
@override
_YearInputWidgetState createState() => _YearInputWidgetState();
}
class _YearInputWidgetState extends State<YearInputWidget> {
final TextEditingController yearController = TextEditingController();
final FocusNode inputNode = FocusNode();
Era? _era;
@override
Widget build(BuildContext context) {
return Row(
children: [
// TextField for Year Input
Expanded(
flex: 2,
child: TextField(
focusNode: inputNode,
autofocus: true,
keyboardType: const TextInputType.numberWithOptions(),
controller: yearController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: "Enter the Year of the Event",
),
),
),
// Column for the RadioListTiles
Expanded(
flex: 1,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
RadioListTile<Era>(
title: Text(
'A.D.',
style: TextStyle(fontSize: 12.0),
),
value: Era.ad,
groupValue: _era,
onChanged: (Era? value) {
setState(() {
_era = value;
});
},
),
RadioListTile<Era>(
title: Text(
'B.C.',
style: TextStyle(fontSize: 12.0),
),
value: Era.bc,
groupValue: _era,
onChanged: (Era? value) {
setState(() {
_era = value;
});
},
),
],
),
),
],
);
} }