Flutter get_server库 在响应过程中遇到async异步 (解决方法)

问题

import 'package:get_server/get_server.dart' as gs;

final app = gs.GetServer();

app.get('/users', (ctx) async{
   List users = await UserService.getUsers();
  //移步返回执行会没有响应
   return gs.Json(users);
})

解决

说明:您可以使用 WidgetEmpty 类来阻止服务器发送任何响应,直到返回的小部件更改其状态。因此,您有多个选项可以执行相同的操作,并且任何可以更改状态的小部件都可以解决问题

1.FutureBuilder(解决方法一)

return FutureBuilder(
          future: [你的异步函数在这里],
          builder: (context, snapshot) {
            if (snapshot != null && snapshot.connectionState == ConnectionState.done) {
              return [你的返回,可能是Json()或一个widget];
            } else {
            // 这将阻止服务器发送任何响应,直到你的异步函数执行完成。
              return WidgetEmpty();
            }
          },
        );

2.StatefulWidget(解决方法二)

class MyRequestHandlingWidget extends StatefulWidget {
  @override
  _MyRequestHandlingWidgetState createState() => _MyRequestHandlingWidgetState();
}

class _MyRequestHandlingWidgetState extends State<MyRequestHandlingWidget> {
  bool loaded = false;

  @override
  void initState() async {
  //初始化里面调用异步函数
    await myAsyncFunction();
    super.initState();
  }
 //定义一个异步函数
  Future myAsyncFunction() async {
    // My Async Code
    // ...
    // ...
    // ...
  //调用刷新状态
    setState(() {
      loaded = true;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (loaded) {
      // 你的返回
      // return Json(.....);
      // return Widget(....);
    } else {
      // 这将阻止服务器发送任何响应,直到您的异步功能完成刷新状态。
      return WidgetEmpty();
    }
  }
}

GitHub地址:https://github.com/jonataslaw/get_server/issues/59

THE END
喜欢就支持一下吧
点赞5 分享