Flutter YouTube管理插件flutter_ytim的使用

Flutter YouTube管理插件flutter_ytim的使用

Demonstrates how to use the flutter_ytim plugin.

概要

YouTeacher IM 快速开发SDK。 支持两种集成方式:

  1. 快速集成。几行代码完成所有功能接入,使用内置UI界面。
  2. 自定义集成。使用核心功能API,自定义联系人列表和聊天界面。

功能

  • IM账号自动注册/登陆
  • 联系人列表
  • 未读消息红点显示
  • 最后一条消息展示
  • 1v1聊天
  • 群组聊天
  • 客服聊天
  • 创建群组
  • 修改备注
  • 发送图片
  • 保存图片
  • 未读/已读状态显示
  • 自己的消息撤回
  • 被踢下线回调
  • 内置UI组件国际化支持

初始化YTIM快速集成

在应用顶层集成 provide,用于界面更新:

MultiProvider(
  providers: [
    ChangeNotifierProvider(
      create: (context) => IMStore({}, {}, {}, [], [], [], []),
    ),
  ],
  child: HomePage(),
)

初始化YTIM插件

YTIM().init(
    loginToken: '',
    websocketUrl: 'wss://preim.rentalbike.shop:18081',
    onConnectErrorCallback: (WebSocketChannelException error) {},
    imLoginSuccessCallback: (IMUser user) {
      /// 获取IM总数据
      _getIMTotalData();
    },
    loginFailCallback: (int code) {
      /// 登录失败
      /// code = 412 时,token失效,需要刷新token重新登录
    },
    revokeMsgCallback: (IMCommand command) {
      /// 消息撤回
      if (mounted) {
        IMUtils.processRevokeMessage(context, command);
      }
      imEventBus.fire(
          IMEventCommand(IMEventCommandType.revokeMsg, command: command));
    },
    sysMsgCallback: (IMSysMessage msg) {
      /// 系统消息
      if (mounted) {
        IMUtils.processSysMessage(context, msg);
      }
    },
    groupControlCallback: (IMGroupControl msg) {
      /// 群组操作的消息
      if (mounted) {
        IMUtils.processGroupControlMessage(context, msg);
      }
    },
    chatMessageCallback: (IMBaseMessage message) {
      /// 聊天消息的回调,包括群组、单聊、客服  用message.chatType判断
      if (mounted) {
        IMUtils.processChatMessage(context, message);
      }
      /// demo中消息发送
      imEventBus.fire(
          IMEventCommand(IMEventCommandType.chatMsg, message: message));
    },
    logEnabled: true);

添加回调

YTIM().addKickOutCallback(() {
  /// IM异地登录操作
  YTLog.d('UI', 'IM 用户异地登录,当前用户被踢出');
});

YTIM().addMsgReadCallback((IMCommand command) {
  /// 消息已读
  /// demo中消息发送
  imEventBus
      .fire(IMEventCommand(IMEventCommandType.readMsg, command: command));
});

YTIM().addUnreadCountCallback((value) {
  /// 消息未读数量
  unreadCount = value;
  setState(() {});
});

拉取IM总数据

YTIM().getIMTotalData(context, (value) {}, (error) {});

在程序回到前台时,检查IM连接状态。

YTIM().checkConnectStatus();

断开连接,释放资源。

YTIM().release();

一些事件类型

事件 类名
消息基类 IMBaseMessage
用户信息 IMUser
用户列表 IMUserList
历史消息列表 IMHistoryMsgList
未读消息个数 IMUnreadCount
IM指令类型 IMCommand

可用的全局变量

功能 方法
自己的IM用户信息 YTIM().mUser
当前正在与之聊天的用户id YTIM().currentChatUserId
当前正在与之聊天的群组id YTIM().currentGroupId

示例代码

example project

示例代码

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_ytim/flutter_ytim.dart';
import 'package:flutter_ytim_example/ui/page/im_home_page.dart';
import 'package:flutter_ytim_example/values/localizations.dart';
import 'package:provider/provider.dart';

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> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(
            create: (context) => IMStore({}, {}, {}, [], [], [], [])),
      ],
      child: const MaterialApp(
        localizationsDelegates: [
          IMLocalizations.delegate,
          ...GlobalMaterialLocalizations.delegates,
        ],
        supportedLocales: [Locale('zh'), Locale('ja')],
        locale: Locale('zh'),
        home: Scaffold(
          body: IMHomePage(),
        ),
      ),
    );
  }
}

更多关于Flutter YouTube管理插件flutter_ytim的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter YouTube管理插件flutter_ytim的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中用于管理YouTube视频的插件flutter_ytim(注意:这个包名可能不精确,因为Flutter社区中的包名经常更新,且YouTube API的官方支持包通常是youtube_player_flutter,但我会基于你的要求提供一个假设性的示例),以下是一个简要的代码案例来展示如何使用一个类似的YouTube管理插件。

首先,确保你已经在pubspec.yaml文件中添加了依赖项。假设包名为flutter_ytim(请根据实际情况替换为正确的包名):

dependencies:
  flutter:
    sdk: flutter
  flutter_ytim: ^最新版本号  # 替换为实际版本号

然后,运行flutter pub get来安装依赖。

接下来,是一个简单的Flutter应用示例,展示如何使用这个插件来嵌入和播放YouTube视频:

import 'package:flutter/material.dart';
import 'package:flutter_ytim/flutter_ytim.dart';  // 假设的包名

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

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

class YouTubeVideoPlayerScreen extends StatefulWidget {
  @override
  _YouTubeVideoPlayerScreenState createState() => _YouTubeVideoPlayerScreenState();
}

class _YouTubeVideoPlayerScreenState extends State<YouTubeVideoPlayerScreen> {
  late YouTubePlayerController _controller;

  @override
  void initState() {
    super.initState();
    // 初始化控制器,并设置视频ID
    _controller = YouTubePlayerController(
      initialVideoId: 'dQw4w9WgXcQ',  // 替换为实际的YouTube视频ID
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('YouTube Video Player'),
      ),
      body: Center(
        child: YouTubePlayerBuilder(
          player: _controller,
          builder: (context, player) {
            return SizedBox(
              width: double.infinity,
              height: 300,
              child: player,
            );
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 示例:播放视频
          _controller.play();
        },
        tooltip: 'Play',
        child: Icon(Icons.play_arrow),
      ),
    );
  }
}

注意

  1. 上面的代码是基于假设的flutter_ytim包编写的,实际上Flutter社区中更常见的用于播放YouTube视频的包是youtube_player_flutter
  2. 在实际开发中,你可能需要处理更多的配置和错误处理,比如API密钥的设置、视频加载失败的处理等。
  3. 由于YouTube API的使用可能涉及版权和API使用条款,确保你遵守YouTube的使用政策。

如果你使用的是youtube_player_flutter包,代码会非常相似,只是包名和初始化方式可能有所不同。例如:

import 'package:youtube_player_flutter/youtube_player_flutter.dart';

// ...

class _YouTubeVideoPlayerScreenState extends State<YouTubeVideoPlayerScreen> {
  late YoutubePlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller = YoutubePlayerController(
      initialVideoId: 'dQw4w9WgXcQ',
      flags: YoutubePlayerFlags(
        autoPlay: false,
      ),
    );
  }

  // ...
}

请根据你的实际需求和使用的包名进行调整。

回到顶部