如何解析“只能在初始化程序中访问静态成员",而不是“扑扑? [英] How to resolve "Only static members can be accessed in initializers" in flutter?
问题描述
我正在开发一个flutter应用程序,我需要在其中扫描一些条形码,因此,为此,我使用了名为barcode_scan( https://pub.dartlang.org/packages/barcode_scan ). 因此,当我尝试从存储在步骤列表中的RaisedButton调用函数时出现问题,因为当我在onPressed Android Studio上调用初始化条形码扫描器的函数时,我需要在Stepper小部件内显示该按钮显示此消息只能在初始化程序中访问静态成员".
I'm developing a flutter app, where I need to scan some barcodes, so, for that, I use a plugin called barcode_scan (https://pub.dartlang.org/packages/barcode_scan). So, the problem comes when I try to call a function from a RaisedButton which is stored on a List of Steps, because I need show that button inside Stepper widget, when I call the function for init the barcode scanner on the onPressed, Android studio show this message 'only static members can be accessed in initializers'.
初始化条形码扫描仪的功能:
The function for init barcode scanner:
Future scan() async {
try {
String barcode = await BarcodeScanner.scan();
setState(() => this.barcode = barcode);
} on PlatformException catch (e) {
if (e.code == BarcodeScanner.CameraAccessDenied) {
setState(() {
this.barcode = 'The user did not grant the camera permission!';
});
} else {
setState(() => this.barcode = 'Unknown error: $e');
}
} on FormatException{
setState(() => this.barcode = 'null (User returned using the "back"-button before scanning anything. Result)');
} catch (e) {
setState(() => this.barcode = 'Unknown error: $e');
}}
以及步骤列表"的代码
List<Step> mySteps = [
new Step(title: new Text("Scan first"),
content: new Column(
children: <Widget>[
new Text("Code"),
new Container(
padding: EdgeInsets.only(top: 20),
child: new Text("A08B",style: TextStyle(
fontSize: 30,
color: Colors.red
),
)
,),
new Container(
child: new RaisedButton(onPressed: scan ,
child: new Text("Scan"),),
)
],
))];
全飞镖类:
void main() => runApp(MaterialApp(
home: Ubicacion(),
));
class Ubicacion extends StatefulWidget {
@override
_UbicacionState createState() => _UbicacionState();}
class _UbicacionState extends State<Ubicacion> {
String barcode = "";
Future scan() async {
try {
String barcode = await BarcodeScanner.scan();
setState(() => this.barcode = barcode);
} on PlatformException catch (e) {
if (e.code == BarcodeScanner.CameraAccessDenied) {
setState(() {
this.barcode = 'The user did not grant the camera permission!';
});
} else {
setState(() => this.barcode = 'Unknown error: $e');
}
} on FormatException{
setState(() => this.barcode = 'null (User returned using the "back"-button before scanning anything. Result)');
} catch (e) {
setState(() => this.barcode = 'Unknown error: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('hello'),
),
body: Container(
padding: EdgeInsets.all(32.0),
child: Center(
child: Column(
children: <Widget>[
new Container(
child: new Stepper(steps: mySteps,
currentStep: this.pasoActual,
onStepContinue: (){
setState(() {
if(pasoActual <mySteps.length -1){
pasoActual++;
}else{
pasoActual = 0;
}
});
},
onStepCancel: (){
setState(() {
if(pasoActual >0){
pasoActual--;
}else{
pasoActual = 0;
}
});
},),
)
],
),
),
),
);
}
int pasoActual = 0;
List<Step> mySteps = [
new Step(title: new Text("Escanear palet"),
content: new Column(
children: <Widget>[
new Text("Codigo"),
new Text("ID",),
new Text("PLU"),
new Container(
padding: EdgeInsets.only(top: 20),
child: new Text("A08B",style: TextStyle(
fontSize: 30,
color: Colors.red
),
)
,),
new Container(
child: new RaisedButton(onPressed: null ,
child: new Text("Escanear"),),
)
],
))
];
}
推荐答案
当您在类中声明非静态变量时尝试直接对其进行初始化时,会发生上述错误.
在您的情况下,我认为这是您正在直接初始化的mySteps
列表.
The above error occurs when you try to initialize a non-static variable directly when declaring it inside a class.
In your case I assume it's the mySteps
list which you are initializing directly.
如果使用Stateful Widget
或在类构造函数中,请尝试在initState()
方法内部对其进行初始化,该错误将消失.
Try initializing it inside your initState()
method if you are using a Stateful Widget
or inside a class constructor and the error will go away.
您也可以查看此答案,以获取有关同一问题的详细说明.
You can also check this answer for a detailed explanation regarding the same issue.
这篇关于如何解析“只能在初始化程序中访问静态成员",而不是“扑扑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!