gpt4 book ai didi

android - Flutter - 如何在 Checkbox 的动态列表中设置 Checkbox 小部件的状态

转载 作者:IT王子 更新时间:2023-10-29 06:58:22 25 4
gpt4 key购买 nike

抱歉,如果这不是很清楚。我欢迎任何关于澄清的建议,因为我是 Flutter 的新手,也是在 StackOverflow 上提问的新手。

我将发布有效和无效的内容。基本上我想要一个 Perk 小部件,其中包含不同数量的 Checkbox 小部件。当我在 build 方法中创建小部件时,我可以设置它们的状态(选中或未选中),但是在列表中使用 for 循环动态创建 Checkbox 小部件并将该列表传递给 Row 会使 Checkbox 无响应。

不起作用(但我不知道为什么,这就是我想要的)

import 'package:flutter/material.dart';
import 'package:gloomhaven_enhancement_calc/data/constants.dart';

class Perk extends StatefulWidget {
final int numOfChecks;
final String details;
final List<String> icons;

Perk(this.numOfChecks, this.details, this.icons);

@override
State<StatefulWidget> createState() => PerkState();
}

class PerkState extends State<Perk> {
int _numOfChecks;
String _details;
List<String> _icons;
bool _isChecked = false;

List<Checkbox> checkList = [];

@override
void initState() {
super.initState();
_numOfChecks = widget.numOfChecks;
_details = widget.details;
_icons = widget.icons;

setState(() {
void _itemChange(bool val) {
// setState(() {
_isChecked = val;
// });
print('clliccked' + val.toString());
}
for (int x = 0; x < _numOfChecks; x++) {
checkList.add(Checkbox(
value: _isChecked,
onChanged: (bool value) => _itemChange(value),
),);
}
});
}



Widget build(BuildContext context) {
return Container(
color: Colors.grey.withOpacity(0.75),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
// here I pass the list of checkboxes created above, but they
// don't respond to user clicks
Row(children: checkList),
Expanded(
child: Text(
_details,
style: TextStyle(fontFamily: secondaryFontFamily),
),
),
],
));
}
}

可行(但我必须硬编码复选框的数量 - 我需要能够根据 numOfChecks 参数动态创建它们)

import 'package:flutter/material.dart';
import 'package:gloomhaven_enhancement_calc/data/constants.dart';

class Perk extends StatefulWidget {
final int numOfChecks;
final String details;
final List<String> icons;

Perk(this.numOfChecks, this.details, this.icons);

@override
State<StatefulWidget> createState() => PerkState();
}

class PerkState extends State<Perk> {
int _numOfChecks;
String _details;
List<String> _icons;
bool _isChecked = false;

List<Checkbox> checkList = [];

@override
void initState() {
super.initState();
_numOfChecks = widget.numOfChecks;
_details = widget.details;
_icons = widget.icons;
}

void checkboxChecked(bool val) {
// setState(() {
_isChecked = val;
// });
print('clliccked' + val.toString());
}

Widget build(BuildContext context) {
return Container(
color: Colors.grey.withOpacity(0.75),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Row(children:
<Widget>[
// here I create checkboxes based on the number but it's
// obviously a hack just to make it work
Checkbox(
value: _isChecked,
onChanged: (bool value) => checkboxChecked(value),
),
_numOfChecks > 1 ? Checkbox(
value: _isChecked,
onChanged: (bool value) => checkboxChecked(value),
) : Container(),
_numOfChecks > 2 ? Checkbox(
value: _isChecked,
onChanged: (bool value) => checkboxChecked(value),
) : Container(),
_numOfChecks > 3 ? Checkbox(
value: _isChecked,
onChanged: (bool value) => checkboxChecked(value),
) : Container(),
_numOfChecks > 4 ? Checkbox(
value: _isChecked,
onChanged: (bool value) => checkboxChecked(value),
) : Container(),
]
),
Expanded(
child: Text(
_details,
style: TextStyle(fontFamily: secondaryFontFamily),
),
),
],
));
}
}

奖金

我还需要在 sharepreferences 中保存每个复选框状态。我本来打算为每个人创建一个单独的条目,但我确信有一种更有效的方法。他们不需要做任何事情,只需要记住他们是被选中还是未被选中,并通过重新启动来保持这一点。

最佳答案

DOESN'T WORK 部分有很多错误。

您必须在 Perk 类中存储复选框的详细信息(标题、图标、计数)。您只需要标题和图标。然后您可以通过调用 titles.length 检索复选框计数。选中项目的状态必须在 State 类(List checkList)中。

将 _checkList 的类型更改为 List 并在 initState 中对其进行初始化。

@override
void initState() {
super.initState();
...
_checkList = List(widget.titles.length);// or List.generate(widget.numOfChecks, (i) => false);
}

要构建许多小部件(或其他项目),您可以使用这种方法:

Row(
children: List.generate(
_numOfChecks,
(i) => Checkbox(
value: _checkList[i],
onChanged: (bool value) => setState(() { _checkList[i] = value; }),
)
).toList();
)

希望我的回答能帮助您找到正确的解决方案。

关于android - Flutter - 如何在 Checkbox 的动态列表中设置 Checkbox 小部件的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com