Flutter YouTube管理插件flutter_ytim的使用
Flutter YouTube管理插件flutter_ytim的使用
Demonstrates how to use the flutter_ytim plugin.
概要
YouTeacher IM 快速开发SDK。 支持两种集成方式:
- 快速集成。几行代码完成所有功能接入,使用内置UI界面。
- 自定义集成。使用核心功能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 |
示例代码
示例代码
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
更多关于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),
),
);
}
}
注意:
- 上面的代码是基于假设的
flutter_ytim
包编写的,实际上Flutter社区中更常见的用于播放YouTube视频的包是youtube_player_flutter
。 - 在实际开发中,你可能需要处理更多的配置和错误处理,比如API密钥的设置、视频加载失败的处理等。
- 由于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,
),
);
}
// ...
}
请根据你的实际需求和使用的包名进行调整。