Flutter - 如何在“Future”中显示“snackbar”

Pea*_*Gen 3 android ios dart flutter flutter-layout

在我的颤振应用程序中,我将数据从移动设备发送到服务器。这部分是按如下方式完成的。

注册.dart

void _createUser()
  {
    DataFetch().createUser(AppNavigation.getAPIUrl() +
          "user/saveUser", user).then((String result){
            print("RESULT IS: "+result);
          });
  }
Run Code Online (Sandbox Code Playgroud)

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;
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

我的用户界面在register.dart 中,data_fetch.dart是一个单独的类,具有支持各种数据传递工作的方法。

我需要显示一个snackbar直到数据保存完成。我知道我可以使用一个FutureBuilder没有用的附加它作为返回一些 UI 的小部件,因为在保存数据后我没有 UI 可以显示。我正在尝试将数据发送到服务器,我只需要指出这一点。

我怎样才能做到这一点?Future反正似乎没有这样的设施。

小智 5

为您的脚手架创建一个密钥,如下所示:

var _key = new GlobalKey<ScaffoldState>();
Run Code Online (Sandbox Code Playgroud)

然后用你的脚手架连接它:

Scaffold(
    key: _key,
    body: your_ui_here,
)
Run Code Online (Sandbox Code Playgroud)

把这把钥匙传递给你的未来

void _createUser(var key)
  {
    DataFetch().createUser(AppNavigation.getAPIUrl() +
          "user/saveUser", user).then((String result){
            key.currentState.showSnackbar(
          Snackbar(content:Text("hello"))
      );
          });
  }
Run Code Online (Sandbox Code Playgroud)

您可以在任何地方传递此密钥,只要不处理附加的 Scaffold,它就会起作用。