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中,因此您应该指定标记或未标记项目的复选框。