6. 입력용 위젯

3번 목차 RadioRadioListTile 에서 겪었던 오류이다.

enum Gender { MAN, WOMEN}
enum Sex { Man, Women}

class _MyHomePageState extends State<MyHomePage> {
  Gender _gender = Gender.MAN;
  Sex _sex = Sex.Man;

...
...

ListTile(
                title: Text("남자"),
                leading: Radio(
                  value: Gender.MAN,
                  groupValue: _gender,
                  onChanged: (value) {
                    setState(() {
                      _gender = value;
                    });
                  },
                ),
              ),
...
...

본래 초기 위젯을 작성하여 앱을 만들 때 위 코드와 같이 작성했었다.

실행하니까 다음과 같은 오류가 발생했다.

Untitled

A value of type 'Object?' can't be assigned to a variable of type 'Gender'. Try changing the type of the variable, or casting the right-hand type to 'Gender'.

Radio class - material library - Dart API

에러가 발생하는 이유는

onchanged: () 안의 값의 타입이 정해져 있지 않아서이다.

오류를 해결하려면 다음과 같이 작성한다.

해결방법 1

enum Gender { MAN, WOMEN}

class _MyHomePageState extends State<MyHomePage> {
  Gender _gender = Gender.MAN;

...
...

ListTile(
                title: Text("남자"),
                leading: Radio(
                  value: Gender.MAN,
                  groupValue: _gender,
                  onChanged: (Gender? value) {
                    setState(() {
                      _gender = value!;   // flutter 2.0 Null Safety참고
                    });
                  },
                ),
              ),
...
...

해결방법 2

enum Gender { MAN, WOMEN}

class _MyHomePageState extends State<MyHomePage> {
  Gender _gender = Gender.MAN;

...
...

ListTile(
                title: Text("남자"),
                leading: Radio(
                  value: Gender.MAN,
                  groupValue: _gender,
                  onChanged: (value) {
                    setState(() {
                      _gender = value as Gender;
                    });
                  },
                ),
              ),
...
...

해결방법 3