Flutter “颤振进程”对话框似乎具有影响所有实例的静态字段
我遇到了ProgressDialog在运行时失败的问题。有几个问题,但最大的问题是,在正确的情况下,调用Discover时ProgressDialog不会关闭。相反,我看到了日志条目“ProgressDialog已被解除”。一旦发生这种情况,应用程序将被ProgressDialog冻结 我的测试表明,以前的活动正在溢出并影响ProgressDialog的所有实例,即使我想使用ProgressDialog时创建了新的ProgressDialog实例 这里的应用程序是我能构造的用来显示问题的最小应用程序。在本例中,dismise可以工作,但一旦在一个实例中设置了“message”字段,它就会溢出到未设置“message”的另一个实例中 如有任何见解,将不胜感激Flutter “颤振进程”对话框似乎具有影响所有实例的静态字段,flutter,dart,progressdialog,Flutter,Dart,Progressdialog,我遇到了ProgressDialog在运行时失败的问题。有几个问题,但最大的问题是,在正确的情况下,调用Discover时ProgressDialog不会关闭。相反,我看到了日志条目“ProgressDialog已被解除”。一旦发生这种情况,应用程序将被ProgressDialog冻结 我的测试表明,以前的活动正在溢出并影响ProgressDialog的所有实例,即使我想使用ProgressDialog时创建了新的ProgressDialog实例 这里的应用程序是我能构造的用来显示问题的最小应用
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;
}
}