我正在尝试在视图内创建一个复选框。我在状态类中声明了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,
);
}
}
答案 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(
//...
)
此外,别忘了从状态声明中删除静态变量(永远不要在有状态的网格中这样做)。