Flutter 颤振/省道范围问题-返回防止重复文件上载所需的信息?
我有一个按钮,可以将文件上传到服务器并返回文件的Flutter 颤振/省道范围问题-返回防止重复文件上载所需的信息?,flutter,dart,scope,return,future,Flutter,Dart,Scope,Return,Future,我有一个按钮,可以将文件上传到服务器并返回文件的oldname。在上传之前,我想检查一下文件是否已经上传了。但不幸的是,范围似乎有问题,oldname变量总是返回null,即使上一次上传成功。这是代码 FlatButton( onPressed: () async { String oldname; if (oldname == null) { oldname = awa
oldname
。在上传之前,我想检查一下文件是否已经上传了。但不幸的是,范围似乎有问题,oldname
变量总是返回null,即使上一次上传成功。这是代码
FlatButton(
onPressed: () async {
String oldname;
if (oldname == null) {
oldname = await uploadAudio(
currentuserid: currentuserid,
filepath: _current.path);
} else {alertUpLoaded(context);}
},
)
您的问题是,
oldname
将始终为null
,因为它的初始化String oldname
在同一生成方法中
将
String oldname
移动到小部件的构建函数上方您的问题是oldname
将始终为null
,因为它的初始化String oldname
在同一构建方法中
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _oldName;
@override
Widget build(BuildContext context) {
return FlatButton(
onPressed: () async {
if (_oldName == null) {
_oldName = await uploadAudio(currentuserid: currentuserid, filepath: _current.path);
} else {
alertUpLoaded(context);
}
},
child: Text("Press Me"),
);
}
}
将字符串oldname
移动到小部件的构建函数上方类MyHomePage扩展StatefulWidget{
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _oldName;
@override
Widget build(BuildContext context) {
return FlatButton(
onPressed: () async {
if (_oldName == null) {
_oldName = await uploadAudio(currentuserid: currentuserid, filepath: _current.path);
} else {
alertUpLoaded(context);
}
},
child: Text("Press Me"),
);
}
}
MyHomePage({Key}):超级(Key:Key);
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
字符串_oldName;
@凌驾
小部件构建(构建上下文){
返回按钮(
onPressed:()异步{
如果(_oldName==null){
_oldName=wait uploadAudio(currentuserid:currentuserid,filepath:_current.path);
}否则{
警报(上下文);
}
},
孩子:文本(“按我”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key}):超级(Key:Key);
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
字符串_oldName;
@凌驾
小部件构建(构建上下文){
返回按钮(
onPressed:()异步{
如果(_oldName==null){
_oldName=wait uploadAudio(currentuserid:currentuserid,filepath:_current.path);
}否则{
警报(上下文);
}
},
孩子:文本(“按我”),
);
}
}
对不起,我本来会选择你的HBS,但我在“setState(()=>\u oldName=val”上出错,因为返回类型“void”显然不是未来或字符串。是的,我不好。不需要调用setState。编辑了我的回答对不起,我本来会选择你的HBS,但在“setState(()=>\u oldName=val”上出错因为返回类型“void”显然不是future或string。是的,我的错。不需要调用setState。编辑了我的答案