open_link_handler.dart 899 Bytes
import 'package:appframe/config/routes.dart';
import 'package:appframe/services/dispatcher.dart';
import 'package:url_launcher/url_launcher.dart';

class OpenLinkHandler extends MessageHandler {
  @override
  Future<dynamic> handleMessage(params) async {
    if (params is! Map<String, dynamic>) {
      throw Exception('参数错误');
    }

    final String url = params['url'] as String;
    if (url.isEmpty) {
      throw Exception('参数错误');
    }
    int screenType = params['screenType'] ?? 1;

    final bool isBrowser = params['isBrowser'] as bool? ?? false;

    if (isBrowser) {
      final uri = Uri.parse(url);
      if (await canLaunchUrl(uri)) {
        await launchUrl(uri, mode: LaunchMode.externalApplication);
      } else {
        return false;
      }
    } else {
      router.push('/link', extra: {'url': url, 'screenType': screenType});
    }

    return true;
  }
}