问题描述
我在 AlertDialog 框中有 FutureBuilder。最初,单击浮动操作按钮时会打开一个警报对话框,其中有一个提交按钮。单击它时,我调用另一个带有 FutureBuilder 的函数,因为我想在获取数据替换整个先前内容的同时在同一个 AlertDialog 框中显示加载图标。成功获取数据后,我想将用户导航到弹出该警报对话框的新页面。但似乎 futurebuilder 的未来正在发挥作用,但 builder 却没有。我尝试使用 StatefulBuilder,但似乎没有帮助。
对话框功能
Future<void> _showMyDialog() async {
return showDialog<void>(
context: context,barrierDismissible: false,// user must tap button!
builder: (BuildContext context) {
return StatefulBuilder(
builder: (context,setState) {
return AlertDialog(
title: Text('Your Image'),content: Column(
mainAxisSize: MainAxisSize.min,children: [
Padding(
padding: const EdgeInsets.all(18.0),child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),child: Image.file(File(image.path)),),Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [
RaisedButton(
onPressed: () {
Navigator.of(context).pop();
},child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [
Icon(Icons.clear_rounded),Text('Cancel'),],color: Colors.white,textColor: avtar_backGround1,shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5.0),side: BorderSide(width: 0.1)),padding: EdgeInsets.fromLTRB(10,10,10),RaisedButton(
onPressed: () {
setState(() {
imageUploader(myImage,widget.token);
});
print("##############134");
},children: [
Icon(Icons.upload_rounded),Text('Submit'),color: avtar_backGround1,textColor: Colors.white,);
}
);
},);
}
FutureBuilder 函数:
FutureBuilder imageUploader(PickedFile myImage,String token) {
return FutureBuilder(
future: imageFutureCaller(myImage,token),builder: (BuildContext context,AsyncSnapshot snapshot){
if (snapshot.hasError) {
print("++++++++ ${snapshot.error}");
return Center(
child: Container(
child: Text(
'${snapshot.error} occured',style: TextStyle(fontSize: 18),);
}
else if(snapshot.hasData){
if(snapshot.data==true){
print("fffffffff");
Navigator.pushReplacement(
context,MaterialPageRoute(
builder: (context) =>
Confetti()));
return Container(height: 0.0,width: 0.0,);
}
else{
return Container(child: Text("Sorry!,Image not uploaded"));
}
}
else{
return Center(
child:CircularProgressIndicator()
);
}
},);
}
未来功能
Future<bool> imageFutureCaller(PickedFile myImage,String token) async {
try {
String filename = myImage.path.toString();
var request = await http.MultipartRequest(
'POST',Uri.parse('http://green-earth.herokuapp.com/uploadphoto'));
request.headers['authorization'] = 'Bearer '+token;
request.files.add(await http.MultipartFile.fromPath('image',filename));
var res = await request.send();
if (res.statusCode == 200) {
print("image uploaded");
_dataAvailable=true;
successfulUploadedDate = DateFormat('yyyy-MM-dd').format(DateTime.now());
return true;
} else {
_dataAvailable=true;
return false;
print('error');
}
} catch (e) {
print(e);
print("image not uploaded");
}
}
}
将来我将返回 bool 值,即 true 或 false。 在成功获取数据时也帮助我进行导航。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)