Flutter - 如何在“Future”中显示“snackbar”
Posted
技术标签:
【中文标题】Flutter - 如何在“Future”中显示“snackbar”【英文标题】:Flutter - How to show a `snackbar` in `Future` 【发布时间】:2019-08-28 01:35:17 【问题描述】:在我的颤振应用程序中,我正在将数据从移动设备发送到服务器。该部分如下所示。
register.dart
void _createUser()
DataFetch().createUser(AppNavigation.getAPIUrl() +
"user/saveUser", user).then((String result)
print("RESULT IS: "+result);
);
data_fetch.dart
Future<String> createUser(String url, User body) async
print("BODY: " + body.toJson().toString());
return http.post(url, body: convert.json.encode(body.toJson()), headers:
"Accept": "application/json",
"content-type": "application/json"
).then((http.Response response)
final int statusCode = response.statusCode;
print("RESPONSE: " + response.body);
print("STATUS CODE: " + statusCode.toString());
if (statusCode < 200 || statusCode > 400 || response.body == null)
throw new Exception("Error while fetching data");
else
return response.body;
);
我的 UI 在 register.dart 中,而 data_fetch.dart 是一个单独的类,其中包含支持各种数据传递工作的方法。
我需要显示snackbar
,直到数据保存完成。我知道我可以使用FutureBuilder
,将它作为一个小部件附加到它返回一些用户界面的地方是没有用的,因为在保存数据后我没有要显示的用户界面。我正在尝试向服务器发送数据,我只需要指出这一点。
我该怎么做?无论如何Future
似乎没有这样的设施。
【问题讨论】:
【参考方案1】:像这样为你的脚手架创建一个密钥:
var _key = new GlobalKey<ScaffoldState>();
然后将它与你的脚手架连接起来:
Scaffold(
key: _key,
body: your_ui_here,
)
把这把钥匙传递给你的未来
void _createUser(var key)
DataFetch().createUser(AppNavigation.getAPIUrl() +
"user/saveUser", user).then((String result)
key.currentState.showSnackbar(
Snackbar(content:Text("hello"))
);
);
你可以在任何地方传递这个密钥,只要附加的 Scaffold 没有被释放,它就可以工作。
【讨论】:
以上是关于Flutter - 如何在“Future”中显示“snackbar”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flutter 数据模型和 Future Builder
如何在 Flutter 的 StreamBuilder 中使用 Future [重复]
如何在 Flutter 中返回 Future<Response>?
如何在 Flutter 中基于 Future 结果构建 Stream?
使用flutter_local_notifications时如何在Flutter中将Future<Null>转换为Future<dynamic>?