如何解决flutter中的“只能在初始化程序中访问静态成员”?

2024-01-15

我正在开发一个flutter应用程序,我需要扫描一些条形码,因此,为此,我使用一个名为barcode_scan的插件(https://pub.dartlang.org/packages/barcode_scan https://pub.dartlang.org/packages/barcode_scan)。 因此,当我尝试从存储在步骤列表中的 RaisingButton 调用函数时,问题就出现了,因为当我在 onPressed、Android studio 上调用初始化条形码扫描仪的函数时,我需要在 Stepper 小部件中显示该按钮显示此消息“只能在初始化程序中访问静态成员”。

初始化条码扫描器的函数:

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列出您直接初始化的内容。

尝试在你的内部初始化它initState()方法,如果您使用的是Stateful Widget或者在类构造函数中,错误将会消失。

您还可以检查this https://stackoverflow.com/a/50151625/10959473回答有关同一问题的详细解释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决flutter中的“只能在初始化程序中访问静态成员”? 的相关文章

  • 升级到最新支持库后Android JACK编译器错误

    Android Studio 2 2 3 Windows 10 64位 构建工具版本 25 Android Gradle插件版本2 2 3 升级到最新的支持库 从 23 4 0 到 25 1 0 并更改编译版本 从 23 到 25 后 我收
  • 为什么不能在 Fragment 中使用 ViewPager?它实际上是

    有信息无法使用ViewPager在一个Fragment在许多来源中 例如 Android 开发者繁忙编码指南 http commonsware com 作者 Mark Murphy 或者类似的帖子this https stackoverfl
  • 音频流的最佳实践

    我正在编写一个应用程序来播放远程服务器的音频 我尝试了多种方法来实现流音频 但它们对我来说都不够好 这就是我尝试过的 幼稚地使用 MediaPlayer 就像是 MediaPlayer player new MediaPlayer play
  • 无法在 Android Studio 中导出签名的 APK

    当我使用keytool list keystore path to keyfile jks并提供我的密码 我可以看到那里的条目 但是当我在尝试使用相同的密码生成签名的 APK 时使用相同的密码时 我收到错误 无法加载密钥库 密钥库被篡改 或
  • 如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

    我从新的 Google 通知服务开始 Firebase Cloud Messaging 感谢这段代码https github com firebase quickstart android tree master messaging htt
  • CoordinatorLayout 和 ImageView 在滚动时调整宽度的问题

    我正在尝试放置一个ImageView in a CollapsingToolbarLayout它在加载时占据整个屏幕 并且当您滚动内容时 16x9 分辨率图像宽度会调整大小 直到图像占据屏幕的整个宽度 那时 我希望图像具有视差app lay
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • 什么是 Android 测试协调器?

    谷歌最近发布了Android测试支持库1 0 读完后overview https android developers googleblog com 2017 07 android testing support library 10 is
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • AndEngine MenuScene - 无法单击按钮

    我有一个关于 android 和 andengine 的小问题 这是我的主菜单的源代码 AbstractScene is extending Scene public class MainMenuScene extends Abstract
  • 如何在Android模拟器中隐藏应用程序图标?

    我有一个应用程序在启动完成后自动启动 但应用程序图标显示在android模拟器中 现在我想向用户隐藏该图标 这样用户就无法知道应用程序已启动 并且他们无法启动该应用程序手动申请 在您的 AndroidManifest xml 文件中 您可能
  • 如何将 JSON 数据从 Android 发送到 php url?

    我想将登录信息从我的应用程序发送到 php url 因为这我的应用程序将崩溃 任何人都可以帮助我解决这个问题 这是我的服务器登录方法 我想将数据发送到此登录方法 Method public method login Parameters 3
  • Android 的 Intent 和 Parcelable 对象

    为什么我需要打包我的对象 即使我只需将其发送到同一任务的另一个线程 实际上 我需要打开一个甚至可以在同一线程 主线程 上运行的活动 换句话说 为什么 Google 不提供一个 startActivity 版本 它采用通用对象广告参数而不是捆
  • onPrepareOptionsMenu 复制 ActionBar 中的项目

    当我使用 onPrepareOptionsMenu 添加菜单项时 该菜单项会在操作栏中复制其自身 我正在使用片段并在主要活动的 ActionBar 中创建初始菜单 如下所示 Override public boolean onCreateO
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 动态更改按钮上的图像视图

    在我的应用程序中 我有按钮和ImageView 当我按下按钮时我想改变ImageView 我的可绘制文件夹中有 5 张图像 按下按钮时 ImageView 根据按钮单击一张一张地更改图像 我想要它的解决方案 感谢任何可以提供帮助的人 维护一
  • 如何从DataSource.Factory获取数据

    我必须调用此方法才能获取所有人员 我根本无法修改这个方法 Query SELECT FROM PERSON TABLE ORDER BY NAME DESC abstract fun getElements DataSource Facto
  • 如何更改 Flutter 中的默认字体系列

    如何更改应用程序的每个文本以使用特定字体 我可以使用以下命令单独更改它们TextStyle 但如何让我的应用程序默认使用特定字体 你能告诉我怎么做吗 您可以按照以下步骤更改 Flutter 应用程序的默认字体系列 1 将字体文件添加到项目文
  • 我想测量 ListView 的高度 (getHight() = 0)

    我无法自己决定任务将是问 我想测量 ListView 的高度 无法捕捉渲染 ListView 的时刻 rssListView getHight 0 public class RSSactivity extends Activity publ

随机推荐