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 中延迟 SnackBar

如何使用 Flutter 数据模型和 Future Builder

如何在 Flutter 的 StreamBuilder 中使用 Future [重复]

如何在 Flutter 中返回 Future<Response>?

如何在 Flutter 中基于 Future 结果构建 Stream?

使用flutter_local_notifications时如何在Flutter中将Future<Null>转换为Future<dynamic>?