Bar*_*sum 2 flutter flutter-getx
我正在寻找一种最佳实践方法来实现在显示第一页之前等待我的应用程序初始化数据。
该应用程序有一个主控制器以及每页一个控制器。主控制器最初从服务器加载数据,在完成之前我想显示一个启动页面(或者至少在打开实际的应用程序页面之前等待)
一个简单的解决方案是,页面等待主控制器初始化
class MainController extends GetxController {
final isInitialized = false.obs;
@override
void onInit() async {
Future f1 = server.get('service1').then(....)
Future f2 = server.get('service1').then(....)
Future f3 = server.get('service1').then(....)
await Future.wait([f1, f2, f3]);
isInitialized.value = true;
}
}
Run Code Online (Sandbox Code Playgroud)
页面组件可以:
class HandleTaskPage extends GetView<HandleTaskPageController> {
@override
Widget build(BuildContext context) {
MainController mainController = Get.find();
return Obx(() {
if (mainController.isInitialized().value) {
return TaskPanelWidget();
} else {
return WaitingPage();
}
})
}
}
Run Code Online (Sandbox Code Playgroud)
但我的应用程序允许用户使用直接 URL(网络应用程序)在任何给定页面启动,例如http://app.com/showtask/123 这意味着我必须在每个页面上等待全局控制器。
有什么方法可以让 Get 等待(并可能显示欢迎页面),直到 GlobalController 准备好,然后再转到路线中描述的页面?
我尝试向 GetMaterialApp 添加 WelcomePage,以阻止应用程序直接转到请求的网址。然后,WelcomeController 应在重定向之前等待 MainController。但即使欢迎页面确实被渲染,应用程序仍然会自动继续访问 url 中请求的页面。
void main() {
runApp(GetMaterialApp(
home: WelcomePage(),
...
...
...
Run Code Online (Sandbox Code Playgroud)
小智 11
您可以使用名称StateMixin实现 mixin 。
示例(控制器):
class UserController extends GetxController with StateMixin {
getData() {
// make status to loading
change(null, status: RxStatus.loading());
// Code to get data
await service.getData()
// if done, change status to success
change(null, status: RxStatus.success());
}
}
Run Code Online (Sandbox Code Playgroud)
示例(用户界面):
class HomePage extends GetView<UserController> {
@override
Widget build(BuildContext context) {
// controller from GetView
return controller.obx((state) {
return OtherWidget()
},
onLoading: CircularProgressIndicator(),
)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15240 次 |
| 最近记录: |