Android 具有许多选项的复选框

Android 具有许多选项的复选框,android,ios,flutter,dart,checkbox,Android,Ios,Flutter,Dart,Checkbox,我创建了两个复选框,但单击其中一个复选框后,两个复选框都被标记,如下图所示,是否有人可以帮助我解决此问题 只能标记一个 我的代码: class _LanguageSelectorState extends State<LanguageSelector> { static final List<String> languagesList = application.supportedLanguages; static final List<String>

我创建了两个复选框,但单击其中一个复选框后,两个复选框都被标记,如下图所示,是否有人可以帮助我解决此问题

只能标记一个

我的代码:

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

   bool _value = false;
  _buildLanguageItem(String language) {
    return CheckboxListTile(
      title: Text(language),
      value: _value,
      onChanged: (value) {
        setState(() {
          _value = value;
          application.onLocaleChanged(Locale(languagesMap[language]));
        });
      },
      controlAffinity: ListTileControlAffinity.trailing,
    );
  }
}
感谢您的帮助:
////////////////////////////////////////////////////////////////////

因为ListView创建的所有小部件都具有相同的值\u值,如果选中其中一个小部件,则所有小部件的值都会发生变化,因为所有小部件都依赖于相同的变量

下面是一个演示如何做到这一点。它可能包含错误

import 'package:flutter/material.dart';

class LanguageItem extends StatefulWidget {

  Key key;
  bool isSelected = false;
  YOURCLASS application;
  String language;

  LanguageItem({@required language, @required this.application, this.key 
}):super(key:key);


  @override
  _LanguageItemState createState() => _LanguageItemState();
}

class _LanguageItemState extends State<LanguageItem> {


  @override
  Widget build(BuildContext context) {
    return CheckboxListTile(
      title: Text(widget.language),
      value: widget.isSelected,
      onChanged: (value) {
        setState(() {
          widget.isSelected = value;
          widget.application.onLocaleChanged(Locale(languagesMap[language]));
        });
      },
      controlAffinity: ListTileControlAffinity.trailing,
    );
  }
}

看看这个例子。。希望这能回答您关于如何在listView中使用复选框的问题

List<Map<String, dynamic>> languagesList = [
  {'value': false},
  {'value': false}
];

  ListView.builder(
      itemCount: languagesList.length,
      itemBuilder: (context, index) {
        return CheckboxListTile(
          title: Text(languagesList[index]['value'].toString()),
          value: languagesList[index]['value'],
          onChanged: (value) {
            setState(() {
              languagesList[index]['value'] = value;
            });
          },
          controlAffinity: ListTileControlAffinity.trailing,
        );
      }),

您的方法不起作用的原因是,您为所有复选框指定了一个变量,因此您的复选框一起更新了。

这不起作用,因为语言列表来自另一个来源,我编辑了我的主post@halohalohalo我不知道你的消息来源是什么。。你必须在这里提出明确的问题。问问题时要慢慢来,让每个人都清楚。最好的方法是创建一个新的简单示例,该示例易于复制。帮帮我们you@halohalohalo您必须将其打包并制作一个小部件,以便每个小部件都有自己的小部件variable@halohalohalo检查example@halohalohalo您可以在这方面发挥创意。似乎复选框位于recyclerview中,因此您应该指定标记或未标记项目的复选框。