【问题标题】:Checkbox in FlutterFlutter 中的复选框
【发布时间】:2020-08-17 05:52:42
【问题描述】:

如何使用复选框实现AppTranslations 小部件?,我想通过单击列表块右侧的框来选择一种语言

我尝试使用CheckBoxListTilie,但没有成功:(

我想要这样的东西:

代码:

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,
    );
  }
}

现在我只有简单的居中列表:(

感谢您的帮助

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    只需使用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,
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 我尝试使用它,但我无法处理我的功能组合来选择正确的语言,您能否在评论中说明应该如何完成?
    • 我在主帖中编辑了我的 _buildLanguageItem 函数,这样我的 checkbocx​​ 不起作用
    • _value = value; application.onLocaleChanged(Locale(languagesMap[language])); 应该从 setState 调用
    • 仔细看看我是如何实现onChange
    • 我做到了,但点击时我的方格仍然是空的
    猜你喜欢
    • 2021-08-26
    • 2021-12-27
    • 2020-04-01
    • 2020-11-11
    • 2023-01-29
    • 2020-03-06
    • 1970-01-01
    • 2021-08-18
    • 2019-11-23
    相关资源
    最近更新 更多