问题
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