Android 如何定义与另一个列表长度相同的默认列表

Android 如何定义与另一个列表长度相同的默认列表,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我需要一些小东西的帮助。在下面的代码中,我创建了一个名为PersonCheck的新对象,其中有一个列表,是我从另一个名为PersonCheck的对象移动过来的。问题是,我想制作一个bool列表,它的长度与我移动的personCheck相同,以便bool的索引与此人相同。 在下面的代码中,我列出了一个人员列表,每个人都有一个复选框,可以告诉你他是否在这里。 问题是我需要将列表默认为false。 我尝试过类似的操作,但它返回以下错误: 在初始值设定项中只能访问静态成员 导入“包装:颤振/材料.省道”

我需要一些小东西的帮助。在下面的代码中,我创建了一个名为
PersonCheck
的新对象,其中有一个列表,是我从另一个名为
PersonCheck
的对象移动过来的。问题是,我想制作一个bool列表,它的长度与我移动的
personCheck
相同,以便bool的索引与此人相同。 在下面的代码中,我列出了一个人员列表,每个人都有一个复选框,可以告诉你他是否在这里。 问题是我需要将列表默认为false。 我尝试过类似的操作,但它返回以下错误:

在初始值设定项中只能访问静态成员

导入“包装:颤振/材料.省道”;
类PersonCheck扩展了StatefulWidget{
最终人员名单检查;
PersonCheck({Key-Key,this.peopleCheck}):超级(Key:Key);
//PersonCheck(this.peopleCheck);
@凌驾
_PersonCheckState createState()=>\u PersonCheckState();
}
类_PersonCheckState扩展状态{
List chk1=List.filled(widget.peopleCheck.length,false);
//bool chk1=假;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:对,
标题:正文(
“现在的人”,
样式:TextStyle(字体大小:30),
),
),
正文:ListView.builder(
itemCount:this.widget.peopleCheck.length,
itemBuilder:(上下文、值){
回程卡(
颜色:Colors.amberAccent[200],
标高:3,
子:容器(
孩子:ListTile(
前导:文本(value.toString()),
标题:正文(
widget.peopleCheck[value],
),
尾随:复选框(
值:chk1[值],
一旦更改:(bool val)=>setState(()=>chk1[value]=val),
),
),
),
);
},
),
),
);
}
}

问题很清楚:

您试图在静态构造函数中使用非静态成员。所以这个代码:
List chk1=List.filled(widget.peopleCheck.length,false)
将在执行
\u PersonCheckState
构造函数之前执行,并且
小部件
属性只能在执行之后使用,这就是为什么不能在那里使用
小部件
的原因

您只需在
initState()
中填写列表
chk1
,就可以使用
小部件
属性

在下面的代码中,我初始化了
initState()
中的列表,这样您就可以开始了

class PersonCheck扩展StatefulWidget{
最终人员名单检查;
PersonCheck({Key,this.peopleCheck}):
断言(peopleCheck!=null),
超级(键:键);
@凌驾
_PersonCheckState createState()=>\u PersonCheckState();
}
类_PersonCheckState扩展状态{
清单chk1;
@凌驾
void initState(){
super.initState();
chk1=List.filled(widget.peopleCheck.length,false);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:对,
标题:正文(
“现在的人”,
样式:TextStyle(字体大小:30),
),
),
正文:ListView.builder(
itemCount:this.widget.peopleCheck.length,
itemBuilder:(上下文、值){
回程卡(
颜色:Colors.amberAccent[200],
标高:3,
子:容器(
孩子:ListTile(
前导:文本(value.toString()),
标题:正文(
widget.peopleCheck[value],
),
尾随:复选框(
值:chk1[值],
一旦更改:(bool val)=>setState(()=>chk1[value]=val),
),
),
),
);
},
),
);
}
}
import 'package:flutter/material.dart';

class PersonCheck extends StatefulWidget {
  final List<String> peopleCheck;

  PersonCheck({Key key, this.peopleCheck}) : super(key: key);
  //PersonCheck(this.peopleCheck);

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

class _PersonCheckState extends State<PersonCheck> {
  List<bool> chk1 = List.filled(widget.peopleCheck.length, false);
  //bool chk1=false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text(
          'People Now',
          style: TextStyle(fontSize: 30),
        ),
      ),
      body: ListView.builder(
        itemCount: this.widget.peopleCheck.length,
        itemBuilder: (context, value) {
          return Card(
            color: Colors.amberAccent[200],
            elevation: 3,
            child: Container(
              child: ListTile(
                leading: Text(value.toString()),
                title: Text(
                  widget.peopleCheck[value],
                ),
                trailing: Checkbox(
                  value: chk1[value],
                  onChanged: (bool val) => setState(() => chk1[value] = val),
                ),
              ),
            ),
          );
        },
      ),

      ),
    );
  }
}