如何创建一个复选框并从类访问全局变量?

时间:2019-05-13 11:26:02

标签: flutter

我正在尝试在视图内创建一个复选框。我在状态类中声明了bool变量isChecked = false,并且在为复选框编写构造函数时在isChecked变量上获取错误,因为“在初始化器中只能访问静态成员”。我将变量设为静态,这消除了布尔变量的错误,但对setState()给出了相同的错误。我该如何解决?





import 'package:flutter/material.dart';

class CardScreen extends StatelessWidget{
  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      title: 'Card Screen',
      home: new myPetScreen()
    );
  }
}


class myPetScreen extends StatefulWidget{

  myPetScreen({Key key, this.title}) : super(key: key);
  final String title;



  @override
  _myPetScreenState createState() => new _myPetScreenState();
}

class _myPetScreenState extends State<myPetScreen>{

   static bool isChecked = false;

  final view = new Column(

    children: <Widget>[
      //did other UI Implementation here 
      Container(

        child: Flexible(
          child: ListView.builder(itemBuilder: (context, position){

            return Card( 
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Row(
                    children: <Widget>[
                      Text(position.toString(), style: TextStyle(fontSize: 14.0, color: Colors.black),),
                      Spacer(),
                      Checkbox(
                       value: isChecked,
                        onChanged: (value) {
                       setState(() {
                          isChecked = value;
                        });
                     },
                      ),

                    ],
                  ),
                )
            );
          }
          ),
        ),

      ) ,

    ],
  );

  @override Widget build(BuildContext context) {


    return Scaffold(
      appBar: AppBar(
          title: Text('Card Screen')),
      body: view,
    );
  }
}

2 个答案:

答案 0 :(得分:0)

进行一些更改,将您的列代码放入一个方法,然后将该方法调用到小部件中。 就像这样。

Column getView(){
var view = new Column(
  children: <Widget>[
    //did other UI Implementation here
    Container(
      child: Flexible(
        child: ListView.builder(itemBuilder: (context, position) {
          return Card(
              child: Padding(
                padding: const EdgeInsets.all(8.0),
                child: Row(
                  children: <Widget>[
                    Text(
                      position.toString(),
                      style: TextStyle(fontSize: 14.0, color: Colors.black),
                    ),
                    Spacer(),
                    Checkbox(
                      value: isChecked,
                      onChanged: (value) {
                        changeState(value);
                      },
                    ),
                  ],
                ),
              ));
        }),
      ),
    ),
  ],
);
return view;
}

之后就是这样。

 body: getView()

答案 1 :(得分:0)

您将视图声明为最终变量,因此它是不可变的。将其更改为如下功能:

Widget get view => Container(
   //...
)

此外,别忘了从状态声明中删除静态变量(永远不要在有状态的网格中这样做)。