如何通过代码强制关闭GetX框架的Snackbar提示组件?
解决方案
你可以直接调用GetX原生提供的全局方法 Get.closeCurrentSnackbar() 实现编程式关闭snackbar,该方法不需要依赖context,且天然兼容你提到的所有边界场景:
- 无正在展示的snackbar时调用不会抛出异常,覆盖应用重启、用户手动关闭的场景
- 调用后会立刻关闭当前展示的snackbar,适配请求毫秒级完成的场景
- 可以在任意代码位置调用,不管是请求成功的回调还是异常捕获分支都能正常使用
修改后的代码示例:
@override Future<List> getImportantData(String inputData) async { try { final token = basicApiAuthString; print("requesting API with the following request: $inputData"); Get.snackbar( "Requesting very important data...", "", duration: 60.seconds, snackPosition: SnackPosition.BOTTOM, showProgressIndicator: true, isDismissible: true, backgroundColor: Colors.lightGreen, colorText: Colors.white, ); List importantData = await _client.requestAPI(basicAuthString: token, body: inputData); // 请求成功关闭snackbar Get.closeCurrentSnackbar(); return importantData; } on DioError catch (error) { // 发生异常时也关闭snackbar Get.closeCurrentSnackbar(); // 其余异常处理逻辑 } }
如果你的业务场景中存在同时弹出多个snackbar的情况,还可以用 Get.closeAllSnackbars() 一次性关闭所有已弹出的snackbar。
内容的提问来源于stack exchange,提问作者Constantine Kurbatov
相关产品推荐
相关产品推荐

