initialize method

Future<void> initialize({
  1. String? providerBundleIdentifier,
  2. String? localizedDescription,
  3. String? groupIdentifier,
  4. dynamic lastStatus(
    1. V2RayStatus status
    )?,
  5. dynamic lastStage(
    1. V2RayStage stage
    )?,
})

Initialize the engine. Must be called before connect.

On iOS, providerBundleIdentifier, localizedDescription and groupIdentifier are required.

Implementation

Future<void> initialize({
  String? providerBundleIdentifier,
  String? localizedDescription,
  String? groupIdentifier,
  Function(V2RayStatus status)? lastStatus,
  Function(V2RayStage stage)? lastStage,
}) async {
  if (Platform.isIOS) {
    assert(
      groupIdentifier != null &&
          providerBundleIdentifier != null &&
          localizedDescription != null,
      'groupIdentifier, providerBundleIdentifier and localizedDescription '
      'are required for iOS.',
    );
  }

  onVpnStatusChanged?.call(V2RayStatus.empty());
  initialized = true;
  _initializeListener();

  return _channelControl.invokeMethod('initialize', {
    'groupIdentifier': groupIdentifier,
    'providerBundleIdentifier': providerBundleIdentifier,
    'localizedDescription': localizedDescription,
  }).then((_) {
    Future.wait([
      status().then((s) => lastStatus?.call(s)),
      stage().then((s) {
        if (s == V2RayStage.connected && _statusTimer == null) {
          _startStatusTimer();
        }
        return lastStage?.call(s);
      }),
    ]);
  });
}