类型'bool'不是'函数结果'的类型'List <bool>'的子类型

时间:2020-08-24 15:10:09

标签: flutter

我正在尝试创建可折叠的listView。

为了使列表中的每个项目都能单独处理点击,我创建了一个布尔列表。但是,当我构建页面时,出现此错误。 我看不到我在做什么错。

你能帮我吗?

List<bool> toogleList;

Container(
  padding: EdgeInsets.fromLTRB(23, 0, 20, 20),
  child: ListView.builder(
    physics: new NeverScrollableScrollPhysics(),
    shrinkWrap: true,
    itemCount: widget.responseDaily['list'].length,
    itemBuilder: (BuildContext ctxt, int index) {
      setState(() {
        toogleList.insert(index, false);
      });
      return InkWell(
        onTap: (){
          setState(() {
            toogleList[index] = !toogleList[index];
          });
        },
        child: Flexible(
          flex: 2,
          fit: FlexFit.tight,
          child: RotationTransition(
            turns: (toogleList[index] == false) ? AlwaysStoppedAnimation(0) : AlwaysStoppedAnimation(180 / 360),
            child: Icon(
              Icons.expand_less,
              size: 16,
            ),
         ),
       ),
  ),
)

2 个答案:

答案 0 :(得分:0)

class _HmeState extends State<Hme> 
{

    List<bool> toogleList = [false, false, false];

    @override
    Widget build(BuildContext context)
    {

        return MaterialApp
        (
            home: Scaffold
            (
                body: Container
                (
                    padding: EdgeInsets.only(top: 100),
                    width: double.infinity,
                    color: Colors.blue,
                    child: ListView.builder
                    (
                        itemCount: 3,
                        itemBuilder: (BuildContext context, int index)
                        {
                            return Card
                            (
                                child: InkWell
                                (
                                    child: Text(toogleList[index].toString()),
                                    onTap: ()
                                    {
                                        print(index);
                                        setState(()
                                        {
                                            toogleList[index] = !toogleList[index];
                                        });
                                    },
                                )
                            );
                        }
                    )
                )
            ),
        );
    }
}

答案 1 :(得分:0)

首先,在setState构建项目时,您不应该调用ListView。如果这样做,您会得到一个错误。

第二,您的逻辑将继续在每次单击项目时插入false,并且bool的值不会按预期变化(当多次单击某个项目时,它们将始终为true`:

INSTEAD:

生成bool的列表,其值设置为false

  List<bool> toogleList = List.generate(widget.responseDaily['list'].length, (index) => false);

在检测到点击/单击项目时更改值:

 onTap: () {
     setState(() {
     toogleList[index] = !toogleList[index];
     });
   },