Флажок в флаттере - PullRequest
       5

Флажок в флаттере

0 голосов
/ 02 мая 2020

Как я могу реализовать AppTranslations виджет с флажком ?, Я хочу выбрать один из языков, нажав на поле справа от списка

Я пытаюсь использовать CheckBoxListTilie, но безуспешно : (

я хочу что-то вроде этого:

enter image description here

код:

class _LanguageSelectorState extends State<LanguageSelector> {
  static final List<String> languagesList = application.supportedLanguages;
  static final List<String> languageCodesList =
      application.supportedLanguagesCodes;


  final Map<dynamic, dynamic> languagesMap = {
    languagesList[0]: languageCodesList[0],
    languagesList[1]: languageCodesList[1],
  };

  @override
  Widget build(BuildContext context) {
    return Scaffold(
          backgroundColor: Colors.white,
          appBar: AppBar(
            backgroundColor: Colors.white,
            iconTheme: IconThemeData(color: Colors.black),
            title: Text(AppTranslations.of(context).text("settings_language"), style: TextStyle(color: Colors.black, letterSpacing: 1)),
            elevation: 0.0,
            centerTitle: true,
            bottom: PreferredSize(child: Container(color: Colors.black, height: 0.1), preferredSize: Size.fromHeight(0.1),),
          ),
      body: _buildLanguagesList(),
    );
  }

  String selectedLanguage = '';

  _buildLanguagesList() {
    return ListView.builder(
      itemCount: languagesList.length,
      itemBuilder: (context, index) {
        return _buildLanguageItem(languagesList[index]);
      },
    );
  }

  _buildLanguageItem(String language) {
    // return ListTile(
    //   onTap: () {
    //     selectedLanguage = language;
    //     application.onLocaleChanged(Locale(languagesMap[language]));
    //   },
    //   title: Text(language),
    //   leading: Icon(Icons.flag),
    // );
    bool _value = false;
    return CheckboxListTile(
      title: Text(language),
      value: _value,
      onChanged: (value) {
        _value = value;
        application.onLocaleChanged(Locale(languagesMap[language]));
      },
      controlAffinity: ListTileControlAffinity.trailing,
    );
  }
}

Сейчас у меня есть только по центру списка: (

спасибо за любую помощь

1 Ответ

2 голосов
/ 02 мая 2020

Просто используйте CheckboxListTile, вот пример

CheckboxListTile(
        title: Text("This is the label text"),
        value: _value,
        onChanged: (newValue) {...},
        controlAffinity: ListTileControlAffinity.trailing,
      ),

А вот полный пример использования CheckboxListTile:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Checkbox Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CheckboxPage(),
    );
  }
}

class CheckboxPage extends StatefulWidget {
  @override
  _CheckboxPageState createState() => _CheckboxPageState();
}

class _CheckboxPageState extends State<CheckboxPage> {
  bool _value = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: CheckboxListTile(
          title: Text("This is the label text"),
          value: _value,
          onChanged: (newValue) {
            setState(() {
              _value = newValue;
            });
          },
          controlAffinity: ListTileControlAffinity.trailing,
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...