flutter - 如何为仅限于实例的复选框小部件定义变量?

标签 flutter variables dart arraylist stateful

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

关于flutter - 如何为仅限于实例的复选框小部件定义变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63521422/

相关文章:

dart - 在 Dart 中将字符串转换为 map

flutter - dart语言中的问号(?)和点号(.)是什么意思?

javascript - 使用选择器作为变量循环 .append()

Javascript 从 url 读取 html 到字符串

Flutter:带相机插件的 Live ml kit 文本识别

flutter - 在 Flutter 中将 base64 字符串转换为 PDF 文件

dart - showBottomSheet 支架问题与上下文

xcode - 如何在 Xcode macosx 中安装 flutter 和 dart?

parsing - go/types 查找结构是否实现了接口(interface)

oop - this.field 构造函数参数列表和继承字段的语法糖。