Сохраняйте выделение с помощью раскрывающегося меню - PullRequest
0 голосов
/ 19 июня 2020

У меня есть раскрывающийся список для выбора языка для английского sh и малаялам
После выбора языка выбор остается пустым. Могу видеть только текст подсказки.

Я не получаю никаких ошибок. Флаттер-доктор в порядке

              Container(
                height: 250,
                width: double.infinity,
                child: Column(
                  children: <Widget>[
                    Flexible(
                      flex: 0,
                      child: Padding(
                        padding: EdgeInsets.only(left: 10, right: 10, top: 15),
                        child: Container(
                          width: double.infinity,
                          height: 45,
                          decoration: BoxDecoration(
                              color: Colors.white,
                              borderRadius: BorderRadius.circular(5),
                              border: Border.all(color: Colors.blueGrey)
                          ),
                          child:  DropdownButton(
                            isExpanded: true,
                            itemHeight: 50,
                            icon: Icon(Icons.arrow_drop_down),
                            iconSize: 40,
                            underline: SizedBox(),
                            hint: Padding(
                              padding: const EdgeInsets.all(8.0),
                              child: Text(AppLocalization.of(context).getTranslatedValues('selectlang'),style: TextStyle(fontSize: 15,color: Colors.black54),),
                            ),
                            onChanged: (Language language) {
                              _changeLanguage(language);
                              setState(() {
                                _selectedeLang = language;
                              });
                            },
                            items: Language.languageList()
                                .map<DropdownMenuItem<Language>>((lang) => DropdownMenuItem(
                              value: lang,

                              child: Row(
                                children: <Widget>[
                                  Center(child: Text((lang.name),style: TextStyle(fontSize: 15),))
                                ],
                              ),
                            ))
                                .toList(),
                          ),
                        ),
                      ),
                    ),
                    Flexible(
                      flex: 0,
                      child: Padding(padding: EdgeInsets.only(left: 8,top: 25,bottom: 8),
                        child: GestureDetector(
                          child:  Container(
                            height: 45,
                            width: 200,
                            child: Center(child: Text(AppLocalization.of(context).getTranslatedValues('submit'),style: TextStyle(color: Colors.white,fontSize: 12,fontWeight: FontWeight.bold),),),
                            decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(10),
                              color: Color.fromRGBO( 34, 83, 148,1),
                            ),
                          ),
                          onTap: (){
                            Navigator.push(
                              context,
                              MaterialPageRoute(
                                builder: (context) => RegisterScreen(),
                              ),
                            );

                          },),
                      ),
                    ),
                  ],
                ),
              ) 

Функция изменения

 void _changeLanguage(Language language) {
    Locale _temp;
    switch (language.languageCode) {
      case 'en':
        _temp = Locale(language.languageCode, 'US');
        break;
      case 'ml':
        _temp = Locale(language.languageCode, 'IN');
        break;
      default:
        _temp = Locale(language.languageCode, 'US');
    }

    MyApp.setLocale(context, _temp);
  }

1 Ответ

2 голосов
/ 19 июня 2020

Вам нужно добавить value: dropdownValue в DropdownButton;

    DropdownButton(value:_selectedeLang, ...

Также обновите свой языковой класс:

class Language {
  final int id;
  final String name;
  final String flag;
  final String languageCode;
  Language(this.id, this.name, this.flag, this.languageCode);

// add these operators, so could compare two Language instances
    @override
  bool operator ==(Object other) => other is Language && other.id == id;

    @override
  int get hashCode => id.hashCode;

  static List<Language> languageList() {
    return <Language>[
      Language(1, 'English', '??', 'en'),
      Language(2, 'മലയാളം', '??', 'ml'),
    ];
  }
}
...