archive

[flutter]기본 위젯 Radio와 RadioListTile

I'mDawon 2020. 6. 7. 16:57

 

Radio는 그룹 내에서 하나만 선택할 때 사용합닏. 그룹이 되는 항목을 열거형(enum)으로 정의하고, groupValue 프로퍼티에 열거형으로 정의한 Gender 타입의 변수를 지정하고, onChanged이벤트에서 변경된 값을 반영합니다.

현재는 ListTile을 사용했기 때문에 라디오 버튼을 터치해야 인식됩니다.

 

enum Gender {MAN, WOMEN}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  var _isChecked = false;
  Gender _gender = Gender.MAN;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Checkbox / Radio / Switch'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
             ListTile(
               title: Text('남자'),
               leading: Radio(
                 value: Gender.MAN,
                 groupValue: _gender,
                 onChanged: (value) {
                   setState(() {
                     _gender = value;
                   });
                 },
               ),
             ),
              ListTile(
                title: Text('여자'),
                leading: Radio(
                  value: Gender.WOMEN,
                  groupValue: _gender,
                  onChanged: (value) {
                    setState(() {
                      _gender = value;
                    });
                  },
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

 

RadioListTile을 사용하면 가로 전체가 터치영역이 됩니다.

 

enum Gender {MAN, WOMEN}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  var _isChecked = false;
  Gender _gender = Gender.MAN;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Checkbox / Radio / Switch'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
             RadioListTile(
               title: Text('남자'),
               value: Gender.MAN,
               groupValue: _gender,
               onChanged: (value) {
                 setState(() {
                   _gender = value;
                 });
               },
             ),
              RadioListTile(
                title: Text('여자'),
                value: Gender.WOMEN,
                groupValue: _gender,
                onChanged: (value) {
                  setState(() {
                    _gender = value;
                  });
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}