Flutter镜像功能插件mirrorfly_plugin的使用

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

Flutter镜像功能插件mirrorfly_plugin的使用

MirrorFly Plugin for Flutter 是一个强大的工具,旨在帮助开发者在Flutter应用中集成实时通信功能。本文将详细介绍如何使用该插件,并提供完整的示例代码。

目录

  1. 介绍
  2. 要求
  3. 发送第一条消息
  4. 通话功能
  5. 获取帮助

介绍

MirrorFly Flutter Plugin 提供了超过1000种即时通讯和通话功能,包括应用内消息、高清视频通话和语音通话等。它支持自定义以适应品牌需求,并且提供了低代码解决方案。

要求

Android

  • Android Lollipop 5.0 (API Level 21) 或更高版本
  • Java 7 或更高版本
  • Gradle 4.1.0 或更高版本
  • targetSdkVersion, compileSdk 34 或更高版本

iOS

  • iOS 13.0 或更高版本

Mirrorfly Plugin for Flutter

  • Dart 2.19.1 或更高版本
  • Flutter 2.0.0 或更高版本

开始使用

获取License Key

首先,你需要从MirrorFly获取License Key,这是认证SDK所必需的。

创建Android依赖

在你的项目的根目录下的build.gradle文件中添加以下内容:

allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven {
            url "https://repo.mirrorfly.com/release"
        }
    }
}

创建iOS依赖

ios/Podfile末尾添加以下代码:

post_install do |installer|
  installer.aggregate_targets.each do |target|
    target.xcconfigs.each do |variant, xcconfig|
      xcconfig_path = target.client_root + target.xcconfig_relative_path(variant)
      IO.write(xcconfig_path, IO.read(xcconfig_path).gsub("DT_TOOLCHAIN_DIR", "TOOLCHAIN_DIR"))
    end
  end

  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'No'
      config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
      config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = 'arm64'
      
      shell_script_path = "Pods/Target Support Files/#{target.name}/#{target.name}-frameworks.sh"
      if File::exist?(shell_script_path)
        shell_script_input_lines = File.readlines(shell_script_path)
        shell_script_output_lines = shell_script_input_lines.map { |line| line.sub("source=\"$(readlink \"${source}\")\"", "source=\"$(readlink -f \"${source}\")\"") }
        File.open(shell_script_path, 'w') do |f|
          shell_script_output_lines.each do |line|
            f.write line
          end
        end
      end
    end
  end
end

然后,在Xcode中启用App Groups能力,并确保其ID与初始化步骤中的iOSContainerID相同。

创建Flutter依赖

pubspec.yaml中添加以下依赖项:

dependencies:
  mirrorfly_plugin: ^1.0.9+1

运行命令flutter pub get后,你可以在项目中导入插件:

import 'package:mirrorfly_plugin/mirrorfly.dart';

初始化MirrorFly插件

main.dart文件中初始化插件:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Mirrorfly.initializeSDK(
      licenseKey: 'your license key',
      iOSContainerID: 'your app group id',
      chatHistoryEnable: false,
      enablePrivateStorage: false,
      flyCallback: (FlyResponse response) {
        if (response.isSuccess) {
          LogMessage.d("onSuccess", response.message);
        } else {
          LogMessage.d("onFailure", response.exception?.message.toString());
        }
        runApp(const MyApp());
      });
}

登录用户

使用以下方法登录用户:

Mirrorfly.login(userIdentifier, flyCallback: (FlyResponse response) {
    if (response.isSuccess && response.hasData) {
        var userData = registerModelFromJson(response.data); // 处理注册响应数据
    } else {
        if (response.exception?.code == "403") {
            // 用户被管理员阻止
        } else if (response.exception?.code == "405") {
            // 达到最大设备限制
        }
    }
});

发送一对一消息

获取用户JID

var userJid = await Mirrorfly.getJid(username: username);

发送消息

Mirrorfly.sendMessage(messageParams: MessageParams.Text(toJid: "",
    replyMessageId: "", textMessageParams: TextMessageParams(messageText: "Hi")), flyCallback: (response){
    if(response.isSuccess){
        var chatMessage = sendMessageModelFromJson(response.data);
        print('Message sent successfully');
    } else {
        print('Failed to send message: ${response.errorMessage}');
    }
});

接收一对一消息

监听新消息事件:

Mirrorfly.onMessageReceived.listen((result) {
    var chatMessage = sendMessageModelFromJson(result);
});

视频通话和语音通话

要发起视频或语音通话,可以使用以下方法:

发起视频通话

Mirrorfly.makeVideoCall(toUserJid: userJID, flyCallBack: (FlyResponse response) {
    if (response.isSuccess) {
        // 成功处理逻辑
    } else {
        // 失败处理逻辑
    }
});

发起语音通话

Mirrorfly.makeVoiceCall(toUserJid: userJID, flyCallBack: (FlyResponse response) {
    if (response.isSuccess) {
        // 成功处理逻辑
    } else {
        // 失败处理逻辑
    }
});

示例代码

以下是一个简单的示例应用,展示了如何初始化MirrorFly SDK并启动应用:

import 'package:flutter/material.dart';
import 'package:mirrorfly_plugin/mirrorfly.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Mirrorfly.initializeSDK(
      licenseKey: 'your license key',
      iOSContainerID: 'your app group id',
      flyCallback: (FlyResponse response) {
        if (response.isSuccess) {
          LogMessage.d("onSuccess", response.message);
        } else {
          LogMessage.d("onFailure", response.errorMessage.toString());
        }
        runApp(const MyApp());
      });
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Name App',
      theme: ThemeData(
        useMaterial3: true,
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange),
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Column(
        children: [
          Text('Welcome to Mirrorfly'),
        ],
      ),
    );
  }
}

更多关于Flutter镜像功能插件mirrorfly_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter镜像功能插件mirrorfly_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter镜像功能插件mirrorfly_plugin的示例代码。请注意,由于mirrorfly_plugin可能是一个假想的插件名称(因为实际插件生态系统中可能没有直接名为mirrorfly_plugin的插件),我将基于一般镜像处理插件的功能来编写示例代码。如果你使用的插件有特定的API和方法,请查阅该插件的官方文档进行调整。

假设mirrorfly_plugin提供了基本的镜像功能,如水平翻转和垂直翻转图像,我们可以这样使用它:

1. 添加依赖

首先,在你的pubspec.yaml文件中添加mirrorfly_plugin依赖(假设它存在于pub.dev上,否则你需要使用实际的插件名称或本地路径)。

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

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

2. 导入插件

在你的Dart文件中导入插件:

import 'package:mirrorfly_plugin/mirrorfly_plugin.dart';

3. 使用插件功能

下面是一个简单的示例,展示如何使用mirrorfly_plugin来翻转图像。这个示例假设插件提供了一个ImageProcessor类,该类具有flipHorizontalflipVertical方法来翻转图像。

import 'package:flutter/material.dart';
import 'package:mirrorfly_plugin/mirrorfly_plugin.dart';
import 'dart:ui' as ui;
import 'dart:typed_data';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Mirrorfly Plugin Demo'),
        ),
        body: Center(
          child: MirrorflyDemo(),
        ),
      ),
    );
  }
}

class MirrorflyDemo extends StatefulWidget {
  @override
  _MirrorflyDemoState createState() => _MirrorflyDemoState();
}

class _MirrorflyDemoState extends State<MirrorflyDemo> {
  Uint8List? originalImageBytes;
  Uint8List? flippedHorizontalImageBytes;
  Uint8List? flippedVerticalImageBytes;

  @override
  void initState() {
    super.initState();
    // 加载原始图像(这里使用本地资产作为示例)
    rootBundle.load('assets/sample_image.png').then((data) {
      setState(() {
        originalImageBytes = data.buffer.asUint8List();
        // 处理图像
        processImage(originalImageBytes!);
      });
    });
  }

  void processImage(Uint8List imageBytes) {
    final ImageProcessor imageProcessor = ImageProcessor();

    // 水平翻转图像
    imageProcessor.flipHorizontal(imageBytes).then((flippedHorizontalBytes) {
      setState(() {
        flippedHorizontalImageBytes = flippedHorizontalBytes;
      });
    });

    // 垂直翻转图像
    imageProcessor.flipVertical(imageBytes).then((flippedVerticalBytes) {
      setState(() {
        flippedVerticalImageBytes = flippedVerticalBytes;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        if (originalImageBytes != null)
          Image.memory(originalImageBytes!),
        SizedBox(height: 20),
        if (flippedHorizontalImageBytes != null)
          Image.memory(flippedHorizontalImageBytes!),
        SizedBox(height: 20),
        if (flippedVerticalImageBytes != null)
          Image.memory(flippedVerticalImageBytes!),
      ],
    );
  }
}

4. 添加资产图像

确保你在pubspec.yaml中声明了资产图像:

flutter:
  assets:
    - assets/sample_image.png

并将图像文件放在assets/目录下。

注意

  • 由于mirrorfly_plugin可能是一个虚构的插件,上述代码中的ImageProcessor类及其方法(如flipHorizontalflipVertical)需要根据实际插件的API进行调整。
  • 插件可能提供了更高级的功能,如实时视频镜像处理、自定义镜像算法等,这些都需要查阅插件的官方文档来获取详细信息。
  • 如果mirrorfly_plugin实际上不存在,你可能需要寻找一个提供类似功能的现有插件,或者自己实现镜像处理逻辑。
回到顶部