Flutter getx控制器获取当前页面上下文

erhoui1w  于 2023-04-07  发布在  Flutter
关注(0)|答案(4)|浏览(417)

我想使用context在getxcontroller方法中显示cool alert的自定义对话框。

class HomePageController extends GetxController {
 
   @override
   void onInit() {
     super.onInit();
     getData();
   }

   void getData(){
    //perform http request here 
     //show cool alert 

     CoolAlert.show(
      context: context,  //here needs the build context
      type: CoolAlertType.success
      );
   }

}

我在我的无状态小部件中使用这个控制器

class HomePage extends StatelessWidget {
   HomePage({ Key? key }) : super(key: key);

   final _c = Get.find<HomePageController>();

    @override
    Widget build(BuildContext context) {
        return Container(
  
          );
    }
 }

我怎样才能在控制器中获得当前主页BuildContext,以便显示很酷的警报。

mm5n2pyu

mm5n2pyu1#

如果你想显示一个对话框或snackbar,需要上下文作为必需的agument。你可以使用Get.dialog()Get.snackbar,它们的功能与showDialogshowSnackbar相同,但*without*上下文或scaffod

icnyk63a

icnyk63a2#

你可以将上下文添加到construct函数中:

@override
Widget build(BuildContext context) {
  Get.put(HomePageController(context: context));
  return Container();
}

对于HomePageController:

注意:需要用Future.delayed(Duration.zero) Package 函数,否则会抛出错误

class HomePageController extends GetxController {
  late BuildContext context;

  HomePageController({required this.context});
  
   void getData(){
     Future.delayed(Duration.zero,(){
       CoolAlert.show(
         context: context,  //here needs the build context
         type: CoolAlertType.success
       );
     });
   }
  ...
}
i2byvkas

i2byvkas3#

你可以简单的使用

Get.context

它看起来会像这样

class HomePageController extends GetxController {
 
   @override
   void onInit() {
     super.onInit();
     getData();
   }

   void getData(){
    //perform http request here 
     //show cool alert 

     CoolAlert.show(
      context: Get.context,  //here needs the build context
      type: CoolAlertType.success
      );
   }

}
guicsvcw

guicsvcw4#

您需要在主页上初始化控制器,如下所示

class HomePage extends StatelessWidget {
   HomePage({ Key? key }) : super(key: key);

   final _c = Get.put(HomePageController())..getData(context);

    @override
    Widget build(BuildContext context) {
        return Container(
  
          );
    }
 }

这将调用getData Function并删除getData Function中的onInit Function和Pass Buildcontext上下文参数。

相关问题