open static method

Future<void> open({
  1. BuildContext? context,
  2. required String url,
  3. GpLinkOpenMode mode = GpLinkOpenMode.externalBrowser,
  4. String? title,
})

context solo hace falta para GpLinkOpenMode.internalScreen/ GpLinkOpenMode.internalModal (empujan una pantalla/modal sobre la app) — y aun ahí es opcional: si no lo pasás, usa GpNavigator.navigatorKey (ver nota en GpModal.showCustomModal). GpLinkOpenMode.externalBrowser nunca lo necesita.

Implementation

static Future<void> open({
  BuildContext? context,
  required String url,
  GpLinkOpenMode mode = GpLinkOpenMode.externalBrowser,
  String? title,
}) async {
  switch (mode) {
    case GpLinkOpenMode.externalBrowser:
      await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication);
    case GpLinkOpenMode.internalScreen:
      final resolvedContext = GpNavigator.resolve(context);
      if (resolvedContext == null || !resolvedContext.mounted) return;
      await Navigator.of(resolvedContext).push(
        MaterialPageRoute<void>(
          builder: (_) => GpWebViewScreen(url: url, title: title),
        ),
      );
    case GpLinkOpenMode.internalModal:
      final resolvedContext = GpNavigator.resolve(context);
      if (resolvedContext == null || !resolvedContext.mounted) return;
      await GpWebViewModal.show(
        context: resolvedContext,
        url: url,
        title: title,
      );
  }
}