Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter “颤振进程”对话框似乎具有影响所有实例的静态字段_Flutter_Dart_Progressdialog - Fatal编程技术网

Flutter “颤振进程”对话框似乎具有影响所有实例的静态字段

Flutter “颤振进程”对话框似乎具有影响所有实例的静态字段,flutter,dart,progressdialog,Flutter,Dart,Progressdialog,我遇到了ProgressDialog在运行时失败的问题。有几个问题,但最大的问题是,在正确的情况下,调用Discover时ProgressDialog不会关闭。相反,我看到了日志条目“ProgressDialog已被解除”。一旦发生这种情况,应用程序将被ProgressDialog冻结 我的测试表明,以前的活动正在溢出并影响ProgressDialog的所有实例,即使我想使用ProgressDialog时创建了新的ProgressDialog实例 这里的应用程序是我能构造的用来显示问题的最小应用

我遇到了ProgressDialog在运行时失败的问题。有几个问题,但最大的问题是,在正确的情况下,调用Discover时ProgressDialog不会关闭。相反,我看到了日志条目“ProgressDialog已被解除”。一旦发生这种情况,应用程序将被ProgressDialog冻结

我的测试表明,以前的活动正在溢出并影响ProgressDialog的所有实例,即使我想使用ProgressDialog时创建了新的ProgressDialog实例

这里的应用程序是我能构造的用来显示问题的最小应用程序。在本例中,dismise可以工作,但一旦在一个实例中设置了“message”字段,它就会溢出到未设置“message”的另一个实例中

如有任何见解,将不胜感激

import 'dart:async';
import 'package:progress_dialog/progress_dialog.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  MyHomePage() ;

  @override
  Widget build(BuildContext context) {
    final test1Button = Material(
      borderRadius: BorderRadius.circular(30.0),
        color: Color(0xff01A0C7),
      child: MaterialButton(
        onPressed: () {
          print("Test1");
          final ProgressDialog pr = new ProgressDialog(context);
          pr.style(message: "Test 01");
          pr.show();
          new Timer(Duration(seconds: 3), () {
                pr.dismiss();
          });
        },
        child: Text("Test 01"),
      ),
    );
    final test2Button = Material(
      borderRadius: BorderRadius.circular(30.0),
      color: Color(0xff01A0C7),
      child: MaterialButton(
        onPressed: () {
          final ProgressDialog pr = new ProgressDialog(context);
          pr.show();
          new Timer(Duration(seconds: 3), () {
            pr.dismiss();
          });
        },
        child: Text("Test 02"),
          ),
        );

    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            test1Button,
            test2Button,
          ],
        ),
      ),
    );
  }
}
导入'dart:async';
导入“package:progress_dialog/progress_dialog.dart”;
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:MyHomePage(),
);
}
}
类MyHomePage扩展了无状态小部件{
我的主页();
@凌驾
小部件构建(构建上下文){
最终测试1按钮=材料(
边界半径:边界半径。圆形(30.0),
颜色:颜色(0xff01A0C7),
子:材质按钮(
已按下:(){
打印(“测试1”);
最终ProgressDialog pr=新ProgressDialog(上下文);
公关风格(信息:“测试01”);
pr.show();
新计时器(持续时间(秒数:3),(){
pr.解雇();
});
},
子项:文本(“测试01”),
),
);
最终测试2按钮=材料(
边界半径:边界半径。圆形(30.0),
颜色:颜色(0xff01A0C7),
子:材质按钮(
已按下:(){
最终ProgressDialog pr=新ProgressDialog(上下文);
pr.show();
新计时器(持续时间(秒数:3),(){
pr.解雇();
});
},
子项:文本(“测试02”),
),
);
返回脚手架(
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
Test1按钮,
Test2按钮,
],
),
),
);
}
}

当您检查进度对话框时,您将设置:

  • ProgressDialog
    类只有一个成员变量,它是dialog:
  • 传递给
    ProgressDialog
    构造函数或
    style
    方法的任何参数都不会影响实例。。。但是覆盖顶级变量 平心而论,这不是最好的编程实践。我建议放弃使用这个库,因为它非常混乱,正如您所说,您已经遇到了一些问题


    是的,你的怀疑是对的:
    ProgressDialog
    实际上有影响所有实例的静态字段。

    ProgressDialog的版本是“progress\u dialog:^1.2.0”,谢谢你的回复。我不熟悉flift和Dart,所以我试图理解代码是如何工作的:-)我不明白为什么_Body是类级变量而不是实例变量。我曾经尝试过小类,当我试图复制这段代码时,以这种方式定义的变量似乎是实例变量。。。像_dialogMessage这样的变量是在类之外的文件中定义的。作为Dart的新手,我假设这会将它们置于全局静态上下文/范围中。没错,您可能会将顶级变量视为静态变量。
    class ProgressDialog {
      _Body _dialog;
    
    String _dialogMessage = "Loading...";
    
    class ProgressDialog {
      _Body _dialog;
    
      void style({
          String message,
          }) {
        _dialogMessage = message ?? _dialogMessage;
      }
    }