如何强行关闭GetX Snackbar?
How to forcefully close GetX Snackbar?
我正在使用 Get.snackbar()
来显示连接到 API 的过程。
我不明白如何以编程方式关闭小吃店?
我有以下代码:
@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, // it could be any reasonable time, but I set it lo-o-ong
snackPosition: SnackPosition.BOTTOM,
showProgressIndicator: true,
isDismissible: true,
backgroundColor: Colors.lightGreen,
colorText: Colors.white,
);
List importantData = await _client.requestAPI(basicAuthString: token, body: inputData);
.then((importantData) {
// Here I need to dismiss the snackbar I am still showing to user
print("I want to close snackbar here but I don't know how to do that!");
// Then I return data for future processing...
return importantData;
});
return importantData;
} on DioError catch (error) {
// Here I handle all possible API errors... Also I want to close snackbar here as well.
}
} // getImportantData() function.
我需要考虑以下因素:
- 应用程序可能会在请求期间关闭并再次打开(因此小吃店可能会关闭,但我可以通过状态回调(未显示)知道它
- 用户在请求期间可能会关闭快餐栏
- 请求可能会在几毫秒内完成
- 可能存在 API 个错误,
.then()
部分永远不会执行。
所以,我需要一些外部方式来关闭小吃。 Navigator.of(context).hide...
不是我使用 GetX 的解决方案。
——————
PS:这里是snackbar的定义,不能帮我搞清楚:
https://pub.dev/documentation/get/3.4.2/route_manager/GetNavigation/snackbar.html
使用此方法立即关闭当前Snackbar
ScaffoldMessenger.of(context).removeCurrentSnackBar();
Use Get.back() to close the snack bar.
如果你想让用户关闭小吃店,你可以在 mainButton 或 onTap
中使用 Get.back
Get.snackbar(
"Requesting very important data...",
"",
duration: 60.seconds, // it could be any reasonable time, but I set it lo-o-ong
snackPosition: SnackPosition.BOTTOM,
showProgressIndicator: true,
isDismissible: true,
backgroundColor: Colors.lightGreen,
colorText: Colors.white,
mainButton: TextButton(
onPressed: Get.back,
child: const Text(
"Close"
)));
);
如果关闭时出现 debugLocked 问题,请使用 SchedulerBinding
SchedulerBinding.instance!.addPostFrameCallback((_) {
// Your Get Snackbar
}):
GetX 已经有一个名为 closeAllSnackbars()
和 closeCurrentSnackbar()
的方法。
所以使用closeAllSnackbars()
关闭所有打开的Snackbars。
Get.closeAllSnackbars();
要关闭当前活动的 snakbar,只需调用 closeCurrentSnackbar()
。
Get.closeCurrentSnackbar();
您还可以通过调用 isSnackbarOpen()
来检查小吃店是否 open/active。
Get.isSnackbarOpen();
我正在使用 Get.snackbar()
来显示连接到 API 的过程。
我不明白如何以编程方式关闭小吃店?
我有以下代码:
@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, // it could be any reasonable time, but I set it lo-o-ong
snackPosition: SnackPosition.BOTTOM,
showProgressIndicator: true,
isDismissible: true,
backgroundColor: Colors.lightGreen,
colorText: Colors.white,
);
List importantData = await _client.requestAPI(basicAuthString: token, body: inputData);
.then((importantData) {
// Here I need to dismiss the snackbar I am still showing to user
print("I want to close snackbar here but I don't know how to do that!");
// Then I return data for future processing...
return importantData;
});
return importantData;
} on DioError catch (error) {
// Here I handle all possible API errors... Also I want to close snackbar here as well.
}
} // getImportantData() function.
我需要考虑以下因素:
- 应用程序可能会在请求期间关闭并再次打开(因此小吃店可能会关闭,但我可以通过状态回调(未显示)知道它
- 用户在请求期间可能会关闭快餐栏
- 请求可能会在几毫秒内完成
- 可能存在 API 个错误,
.then()
部分永远不会执行。
所以,我需要一些外部方式来关闭小吃。 Navigator.of(context).hide...
不是我使用 GetX 的解决方案。
—————— PS:这里是snackbar的定义,不能帮我搞清楚:
https://pub.dev/documentation/get/3.4.2/route_manager/GetNavigation/snackbar.html
使用此方法立即关闭当前Snackbar
ScaffoldMessenger.of(context).removeCurrentSnackBar();
Use Get.back() to close the snack bar.
如果你想让用户关闭小吃店,你可以在 mainButton 或 onTap
中使用Get.back
Get.snackbar(
"Requesting very important data...",
"",
duration: 60.seconds, // it could be any reasonable time, but I set it lo-o-ong
snackPosition: SnackPosition.BOTTOM,
showProgressIndicator: true,
isDismissible: true,
backgroundColor: Colors.lightGreen,
colorText: Colors.white,
mainButton: TextButton(
onPressed: Get.back,
child: const Text(
"Close"
)));
);
如果关闭时出现 debugLocked 问题,请使用 SchedulerBinding
SchedulerBinding.instance!.addPostFrameCallback((_) {
// Your Get Snackbar
}):
GetX 已经有一个名为 closeAllSnackbars()
和 closeCurrentSnackbar()
的方法。
所以使用closeAllSnackbars()
关闭所有打开的Snackbars。
Get.closeAllSnackbars();
要关闭当前活动的 snakbar,只需调用 closeCurrentSnackbar()
。
Get.closeCurrentSnackbar();
您还可以通过调用 isSnackbarOpen()
来检查小吃店是否 open/active。
Get.isSnackbarOpen();