如何解决如何为仅限于实例的复选框小部件定义变量?
class MemberList extends StatefulWidget {
@override
_MemberListState createState() => _MemberListState();
}
class _MemberListState extends State<MemberList> {
@override
Widget build(BuildContext context) {
final members = Provider.of<List<Member>>(context);
final presentMembers = new List();
bool _present = false;
return ListView.builder(
scrollDirection: Axis.vertical,shrinkWrap: true,physics: ClampingScrollPhysics(),itemCount: members.length,itemBuilder: (context,index){
return Padding(
padding: EdgeInsets.only(top: 8.0),child: Card(
color: Colors.white,margin: EdgeInsets.fromLTRB(20.0,6.0,20.0,0),child: ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20.0),title: Text(members[index].name,style: TextStyle(color: Colors.black,fontWeight: FontWeight.bold),),trailing: Checkbox(
value: members[index] != null,onChanged: (bool value) {
setState(() {
_present = value;
});
if(_present == true){
presentMembers.add(members[index].name);
}else{presentMembers.remove(members[index].name);}
},activeColor: Colors.black,);
}
);
}
}
在上面的代码中,如果看到“ _present”被重复创建,则进行编码。我想要该变量,使其仅限于该实例。因为使用此代码,发生的事情是每当我选中复选框时,它就会在几秒钟内被取消选中,因为在其他实例中,同一变量的值仍然为false。我的最终目标是获得一个动态的成员列表,该列表通过选中复选框来生成。我希望问题会很清楚。:))
解决方法
您应该将变量放在State类中,但应在build方法之外,如下所示:
class MemberList extends StatefulWidget {
@override
_MemberListState createState() => _MemberListState();
}
class _MemberListState extends State<MemberList> {
bool _present = false;
@override
Widget build(BuildContext context) {
final members = Provider.of<List<Member>>(context);
final presentMembers = new List();
return ListView.builder(
scrollDirection: Axis.vertical,shrinkWrap: true,physics: ClampingScrollPhysics(),itemCount: members.length,itemBuilder: (context,index){
return Padding(
padding: EdgeInsets.only(top: 8.0),child: Card(
color: Colors.white,margin: EdgeInsets.fromLTRB(20.0,6.0,20.0,0),child: ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20.0),title: Text(members[index].name,style: TextStyle(color: Colors.black,fontWeight: FontWeight.bold),),trailing: Checkbox(
value: members[index] != null,onChanged: (bool value) {
setState(() {
_present = value;
});
if(_present == true){
presentMembers.add(members[index].name);
}else{presentMembers.remove(members[index].name);}
},activeColor: Colors.black,);
}
);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。