如何取消 cubit 旧函数调用?
How to cancel cubit old function call?
我正在尝试在我的 flutter 项目中使用 cubit 但我遇到了这个问题我正在尝试调用一个函数它的函数具有未来 return 类型所以它需要时间来完成但同时我收到通知,所以我需要在这个 cubit 中调用另一个函数,但我想先取消之前的函数我该怎么做,谢谢你的帮助。
class ConnectionCheckerCubit extends Cubit<ConnectionCheckerState> {
ConnectionCheckerCubit() : super(ConnectionCheckerInitial());
void whenConnectedFunction() {
print('test1');
}
void whenDisconnectedFunction() async {
print('test2');
await Future.delayed(Duration(seconds: 10));
print('test3');
}
}
我调用第二个函数 whenDisconnectedFunction 它的打印 test2 然后我调用上面的函数whenConnectedFunction 在 10 秒结束之前打印 test1 但它也是 test3 打印出来我该如何解决这个问题。谢谢.
您不能在函数调用后取消它,但是您可以做的是在 future 完成后放置一个检查器来检查该函数是否需要继续进行。
我写了一个示例代码来帮助您更好地理解这一点,您可以粘贴这个 dartpad 自己尝试。
void main() async {
print("Testing without cancel");
final cubitWithoutCancel = ConnectionCheckerCubit();
cubitWithoutCancel.whenDisconnectedFunction();
cubitWithoutCancel.whenConnectedFunctionWithoutCancel();
await Future.delayed(const Duration(seconds: 11));
print("Testing with cancel");
final cubit = ConnectionCheckerCubit();
cubit.whenDisconnectedFunction();
cubit.whenConnectedFunction();
}
class ConnectionCheckerCubit {
ConnectionCheckerCubit();
bool _cancelFunctionIfRunning = false;
void whenConnectedFunction() {
_cancelFunctionIfRunning = true;
print('test1');
}
void whenConnectedFunctionWithoutCancel(){
print('test1');
}
void whenDisconnectedFunction() async {
print('test2');
await Future.delayed(Duration(seconds: 10));
if(_cancelFunctionIfRunning) return;
print('test3');
}
}
以上代码输出结果如下:
Testing without cancel
test2
test1
test3
Testing with cancel
test2
test1
这是一个相当简单的实现,可帮助您理解如何根据外部因素中途退出函数的概念,您可以创建一个函数来为您完成此任务,而不是手动更改布尔值。
我正在尝试在我的 flutter 项目中使用 cubit 但我遇到了这个问题我正在尝试调用一个函数它的函数具有未来 return 类型所以它需要时间来完成但同时我收到通知,所以我需要在这个 cubit 中调用另一个函数,但我想先取消之前的函数我该怎么做,谢谢你的帮助。
class ConnectionCheckerCubit extends Cubit<ConnectionCheckerState> {
ConnectionCheckerCubit() : super(ConnectionCheckerInitial());
void whenConnectedFunction() {
print('test1');
}
void whenDisconnectedFunction() async {
print('test2');
await Future.delayed(Duration(seconds: 10));
print('test3');
}
}
我调用第二个函数 whenDisconnectedFunction 它的打印 test2 然后我调用上面的函数whenConnectedFunction 在 10 秒结束之前打印 test1 但它也是 test3 打印出来我该如何解决这个问题。谢谢.
您不能在函数调用后取消它,但是您可以做的是在 future 完成后放置一个检查器来检查该函数是否需要继续进行。
我写了一个示例代码来帮助您更好地理解这一点,您可以粘贴这个 dartpad 自己尝试。
void main() async {
print("Testing without cancel");
final cubitWithoutCancel = ConnectionCheckerCubit();
cubitWithoutCancel.whenDisconnectedFunction();
cubitWithoutCancel.whenConnectedFunctionWithoutCancel();
await Future.delayed(const Duration(seconds: 11));
print("Testing with cancel");
final cubit = ConnectionCheckerCubit();
cubit.whenDisconnectedFunction();
cubit.whenConnectedFunction();
}
class ConnectionCheckerCubit {
ConnectionCheckerCubit();
bool _cancelFunctionIfRunning = false;
void whenConnectedFunction() {
_cancelFunctionIfRunning = true;
print('test1');
}
void whenConnectedFunctionWithoutCancel(){
print('test1');
}
void whenDisconnectedFunction() async {
print('test2');
await Future.delayed(Duration(seconds: 10));
if(_cancelFunctionIfRunning) return;
print('test3');
}
}
以上代码输出结果如下:
Testing without cancel
test2
test1
test3
Testing with cancel
test2
test1
这是一个相当简单的实现,可帮助您理解如何根据外部因素中途退出函数的概念,您可以创建一个函数来为您完成此任务,而不是手动更改布尔值。