Flutter集成第三方服务插件wisesdk的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter集成第三方服务插件wisesdk的使用

开始使用

请参考文档了解集成步骤。

Flutter

在Flutter项目中集成wisesdk插件后,您可以使用以下命令发布您的包:

dart pub publish --dry-run
dart pub publish

完整示例Demo

以下是一个完整的示例代码,展示了如何在Flutter应用中集成并使用wisesdk插件。

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:wisesdk/wisesdk.dart';
import 'dart:io' show Platform;

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _wiseSdk = Wisesdk();

  // channel name must be `wisesdk`
  final wiseChannelName = 'wisesdk';

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();

    final methodChannel = MethodChannel(wiseChannelName);
    methodChannel.setMethodCallHandler(_wiseSDKMeetingListener);
  }

  Future<void> initPlatformState() async {
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      await _wiseSdk.initSdk("650d61477aaa3e6b9988934f", "yellowmonkey");

      if (Platform.isIOS) {
        // set screen share group id and bundle id
        _wiseSdk.enableScreenShare("group.live.wise.wisesdkExample", "live.wise.wisesdkExample.screen");
      }

      // enable / disable screen capture (only Android)
      _wiseSdk.disableScreenCapture(false);

      // join meeting by classroom public ID
      // This doesn't need Authentication or SSO Login
      final joinParams = {
        "classroomPublicId": "65953bb0aa3f4e26b047982b51053399",
        "userName": "John",
        "userId": "userId_101001"
      };

      if (await _wiseSdk.isMeetingInProgress()) {
        _wiseSdk.gotoMeeting();
      } else {
        _wiseSdk.joinMeeting(joinParams);
      }

      // SSO Login
      // await _wiseSdk.loginUsingSSOToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwaG9uZU51bWJlciI6Iis5MTgyOTc2NTg4OTMiLCJpYXQiOjE3MDQyODc1OTAsImV4cCI6MTcwNDI4NzcxMH0.kiKK66SD0XNjsjRLUBOfJ4nqEvrvekERu383umCv3Jo");

      // Logout SSO
      // _wiseSdk.logoutSSO();

      // Set Auth token
      // _wiseSdk.setAuthToken("ey03bGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2NTk1NTJjZWFhM2Y0ZWY0NWI0OTI4ZGEiLCJuYW1lIjoiSnlvdGhzbmEiLCJ0eXBlIjoiU0VTU0lPTl9UT0tFTiIsImlhdCI6MTcyOTY4OTYzOCwiZXhwIjoxNzM3NDY1NjM4fQ.5Q-_R2g3olOEjAAuzpEyiyVT-Gdv7WsVK1OpOwW_GWs");

      // join meeting by classroom number
      // SSO Login or Auth token is needed to do this
      final joinParams1 = {
        "classroomId": "65953bb0aa3f4e26b047982",
        "disableScreenCapture": true
      };

      if (await _wiseSdk.isMeetingInProgress()) {
        // return to in progress meeting
        _wiseSdk.gotoMeeting();
      } else {
        //_wiseSdk.joinMeeting(joinParams1);
      }
    } on PlatformException catch (err) {
      debugPrint('Error. ${err.message}, ${err.details}');
    }

    if (!mounted) return;

    setState(() {});
  }

  Future<void> _wiseSDKMeetingListener(MethodCall call) async {
    switch (call.method) {
      case "onInitialised":
        {}
      case "onMeetingConnecting":
        {
          debugPrint("Connecting to meeting!");
        }

      case "onMeetingEnded":
        {
          final userId = call.arguments;
          debugPrint("Meeting ended. UserId: $userId");
        }

      case "onMeetingEndedByHost":
        {
          debugPrint("Meeting ended by host");
        }

      case "onMeetingEndedWithError":
        {
          final data = call.arguments;
          int errorCode = data["errorCode"];
          int internalErrorCode = data["internalErrorCode"];
          String message = data["message"];

          debugPrint(
              "onMeetingEndedWithError $errorCode, $internalErrorCode, $message");
        }

      case "onMeetingNeedPasswordOrDisplayName":
        {}

      case "onMeetingNotStartedByHostError":
        {
          debugPrint("Meeting not started by host!");
        }

      case "onMeetingStarted":
        {
          final isMeetingStarted = call.arguments;
          debugPrint("Meeting started: $isMeetingStarted");
        }

      case "onSDKError":
        {
          final data = call.arguments;
          int wiseErrorCode = data["wiseErrorCode"];
          int errorCode = data["errorCode"];
          int internalErrorCode = data["internalErrorCode"];

          debugPrint(
              "onSDKError $wiseErrorCode, $errorCode, $internalErrorCode");
        }

      case "onVendorIdError":
        {
          debugPrint("Vendor Id is missing or invalid!");
        }
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Wise SDK'),
        ),
        body: const Center(
          child: Text('Wise SDK Sample'),
        ),
      ),
    );
  }
}

更多关于Flutter集成第三方服务插件wisesdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成第三方服务插件wisesdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中集成第三方服务插件(如wiseSDK)通常涉及几个关键步骤:添加依赖、配置权限、初始化SDK以及调用SDK提供的功能。以下是一个简化的代码示例,展示如何在Flutter项目中集成wiseSDK插件。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加wiseSDK的依赖。假设wiseSDK在pub.dev上有可用的Flutter插件,代码示例如下:

dependencies:
  flutter:
    sdk: flutter
  wise_sdk: ^x.y.z  # 替换为wiseSDK的实际版本号

然后运行flutter pub get来获取依赖。

2. 配置Android权限(如果需要)

wiseSDK可能需要在AndroidManifest.xml中添加一些权限。根据wiseSDK的文档,你可能需要添加类似以下的权限:

<!-- 在android/app/src/main/AndroidManifest.xml中添加 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 其他wiseSDK需要的权限 -->

    <application
        ... >
        <!-- wiseSDK的配置信息,如API Key等 -->
        <meta-data
            android:name="com.wise.sdk.API_KEY"
            android:value="YOUR_API_KEY_HERE" />
    </application>
</manifest>

3. 初始化wiseSDK

在你的Flutter应用的主入口文件(通常是main.dart)中初始化wiseSDK。假设wiseSDK提供了一个初始化方法WiseSdk.initialize(),代码示例如下:

import 'package:flutter/material.dart';
import 'package:wise_sdk/wise_sdk.dart';  // 导入wiseSDK包

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化wiseSDK
  WiseSdk.initialize(apiKey: 'YOUR_API_KEY_HERE');

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter wiseSDK Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('wiseSDK Integration'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 调用wiseSDK的功能,例如登录
            WiseSdk.login(username: 'testuser', password: 'testpass').then((result) {
              print('Login result: $result');
            }).catchError((error) {
              print('Login error: $error');
            });
          },
          child: Text('Login with wiseSDK'),
        ),
      ),
    );
  }
}

注意事项

  1. 实际API和方法:上述代码中的WiseSdk.initialize()WiseSdk.login()是假设的方法。你需要查阅wiseSDK的官方文档,了解实际的API调用和方法名。
  2. 错误处理:在实际应用中,应该添加更详细的错误处理逻辑。
  3. 异步操作:许多SDK的初始化或功能调用是异步的,确保处理这些异步操作。
  4. 平台特定配置:某些SDK可能需要iOS特定的配置,如Info.plist的修改,这些也需要在文档中查找。

请确保阅读wiseSDK的官方文档,以获取最准确和最新的集成指南。

回到顶部