open_weapp_handler.dart 1.67 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 {
    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 || path.isEmpty) {
      throw Exception('参数错误');
    }

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

    _fluwx = getIt.get<Fluwx>();
    // _fluwx.addSubscriber(_responseListener);

    try {
      return await _fluwx.open(
        target: MiniProgram(username: appid, path: path, 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;
    }
  }
}