首页 > 解决方案 > 如何从另一个类访问列表的长度

问题描述

在我正在构建的应用程序中,我添加了您可以在 peopleCheck 属性中看到的人名。现在我想创建一个新列表,如果每个人在这里与否,它都会包含一个布尔值。(此处不为 false,反之亦然)我声明了一个新列表“chk1”以及为每个人填写的内容作为默认 false,并且我想让整个列表的长度与 peopleCheck 列表的长度相同。我该怎么做?我尝试使用“widget.peopleCheck.length()”,但它返回两个错误。1. 在初始化器中只能访问静态成员。2.表达式不计算为函数,因此无法调用。

提前致谢。

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




  @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) {}, //(bool val) => setState(() => chk1[value] = val),
                ),
              ),
            ),
          );
        },
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: Icon(Icons.check),
      ),
    );
  }
}
/*

 for (int i=0; i<widget.peopleCheck.length();i++){

  }



*/

标签: androidiosfluttermobiledart

解决方案


长度是列表的一个属性,所以你可以这样做:

widget.peopleCheck.length

您收到错误,因为长度不是函数

您需要在 build 方法中访问小部件,您可以这样做:

   List<bool> chk1;

   Widget build(BuildContext context) {
     chk1  = List.filled(widget.peopleCheck.length, false);

   }   

推荐阅读