如何取消 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

这是一个相当简单的实现,可帮助您理解如何根据外部因素中途退出函数的概念,您可以创建一个函数来为您完成此任务,而不是手动更改布尔值。