gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:12:53 25 4
gpt4 key购买 nike

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

Only static members can be accessed in initializers.

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

),
);
}
}

最佳答案

问题很清楚:

您正在尝试在静态构造函数中使用非静态成员。所以这个代码:List<bool> chk1 = List.filled(widget.peopleCheck.length, false);将在_PersonCheckState之前执行执行构造函数并 widget属性只能在此之后使用,这就是为什么你不能使用 widget那里。

您只需填写列表chk1即可在 initState()在那里您可以使用widget属性(property)。

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

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

PersonCheck({Key key, this.peopleCheck}) :
assert(peopleCheck != null),
super(key: key);

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

class _PersonCheckState extends State<PersonCheck> {
List<bool> chk1;

@override
void initState() {
super.initState();
chk1 = List<bool>.filled(widget.peopleCheck.length, 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),
),
),
),
);
},
),
);
}
}

关于android - 如何定义与另一个列表长度相同的默认列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59510171/

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