open_weapp_handler.dart 2.08 KB
import 'package:appframe/config/locator.dart';
import 'package:appframe/services/dispatcher.dart';
import 'package:fluwx/fluwx.dart';

class OpenWeappHandler extends MessageHandler {
  late Fluwx _fluwx;

  @override
  Future<bool> handleMessage(params) async {
    _fluwx = getIt.get<Fluwx>();
    // _fluwx.addSubscriber(_responseListener);

    if (!await _fluwx.isWeChatInstalled) {
      throw Exception('设备上未安装微信App,不支持跳转打开微信小程序');
    }

    if (params is! Map<String, dynamic>) {
      throw Exception('参数错误');
    }

    final appid = params['appid'] as String;
    final path = params['path'] as String?;
    final envVersion = params['envVersion'] as String?;

    if (appid.isEmpty) {
      throw Exception('参数错误');
    }

    if (envVersion != null && envVersion != 'release' && envVersion != 'trial' && envVersion != 'develop') {
      throw Exception('参数错误');
    }

    try {
      if (path != null) {
        return await _fluwx.open(
          target: MiniProgram(
            username: appid,
            path: path,
            miniProgramType: _getWXMiniProgramType(envVersion),
          ),
        );
      } else {
        return await _fluwx.open(
          target: MiniProgram(
            username: appid,
            miniProgramType: _getWXMiniProgramType(envVersion),
          ),
        );
      }
    } catch (e) {
      print(e);
      return false;
    }
  }

  // void _responseListener(response) {
  //   print("response--------------------------------");
  //   if (response is WeChatLaunchMiniProgramResponse) {
  //     print("小程序跳转 2 --------------------------------");
  //     print(response);
  //     _fluwx.removeSubscriber(_responseListener);
  //   }
  // }

  WXMiniProgramType _getWXMiniProgramType(String? envVersion) {
    switch (envVersion) {
      case 'release':
        return WXMiniProgramType.release;
      case 'trial':
        return WXMiniProgramType.preview;
      case 'develop':
        return WXMiniProgramType.test;
      default:
        return WXMiniProgramType.preview;
    }
  }
}