Flutter屏幕共享插件imin_vice_screen的使用
Flutter屏幕共享插件imin_vice_screen的使用
imin_vice_screen 是一个用于在Android平台上使用imin屏幕共享SDK的Flutter插件。
资源
平台支持
Android |
---|
✅ |
开始使用
安装
在 pubspec.yaml
文件中添加依赖:
dependencies:
imin_vice_screen: ^0.0.1
或者直接运行命令:
flutter pub add imin_vice_screen
示例文件夹
查看 example
文件夹以获取完整的示例代码。
如何使用
1. 在主入口区分主屏和副屏
void main() {
var defaultRouteName = window.defaultRouteName;
if ("viceMain" == defaultRouteName) {
viceScreenMain();
} else {
defaultMain();
}
}
// 主屏UI
void defaultMain() {
runApp(MainApp());
}
// 副屏UI
void viceScreenMain() {
runApp(SubApp());
}
2. 使用封装能力在主屏和副屏之间通信
2.1 主屏到副屏
import 'package:imin_vice_screen/imin_vice_screen.dart';
final _iminViceScreenPlugin = IminViceScreen();
/// 发送消息
_iminViceScreenPlugin.sendMsgToViceScreen("data", params: {"params": "123"});
/// 接收副屏消息
_iminViceScreenPlugin.mainStream.listen((event) {
print("主屏接收数据: ${event}");
});
2.2 副屏到主屏
import 'package:imin_vice_screen/imin_vice_screen.dart';
final _iminViceScreenPlugin = IminViceScreen();
/// 发送消息
_iminViceScreenPlugin.sendMsgToMainScreen("data", params: {"params": "456"});
/// 接收主屏消息
_iminViceScreenPlugin.viceStream.listen((event) {
print("副屏接收数据: ${event}");
});
3. 检查是否支持双屏
bool isSupportMultipleScreen = await _iminViceScreenPlugin.isMultipleScreen();
print("是否支持多屏: $isSupportMultipleScreen");
4. 检查当前应用是否有悬浮窗口权限
bool checkOverlayPermission = await _iminViceScreenPlugin.checkOverlayPermission();
print("检查悬浮窗口权限: $checkOverlayPermission");
5. 请求悬浮窗口权限以设置副屏为持久窗口
await _iminViceScreenPlugin.requestOverlayPermission();
6. 打开和关闭副屏
await _iminViceScreenPlugin.doubleScreenOpen(); /// 打开
await _iminViceScreenPlugin.doubleScreenClose(); /// 关闭
初始化完成后副屏显示
在 android/values/attrs.xml
中添加配置:
<!-- 是否在初始化时自动显示副屏 -->
<bool name="autoShowSubScreenWhenInit">true</bool>
LCD副屏显示
1. LCD初始化
import 'package:imin_vice_screen/enums.dart';
import 'package:imin_vice_screen/imin_vice_screen.dart';
final iminViceScreenPlugin = IminViceScreen();
await iminViceScreenPlugin.sendLCDCommand(LCDCommand.initLCD); // 初始化LCD
await iminViceScreenPlugin.sendLCDCommand(LCDCommand.wakeLCD); // 唤醒LCD
await iminViceScreenPlugin.sendLCDCommand(LCDCommand.sleepLCD); // 睡眠LCD
await iminViceScreenPlugin.sendLCDCommand(LCDCommand.cleanScreenLCD); // 清屏
2. 发送字符串在副屏上显示
import 'package:imin_vice_screen/imin_vice_screen.dart';
final iminViceScreenPlugin = IminViceScreen();
await iminViceScreenPlugin.sendLCDString('你好世界');
3. 发送字符串在副屏上显示
import 'package:imin_vice_screen/imin_vice_screen.dart';
final iminViceScreenPlugin = IminViceScreen();
await iminViceScreenPlugin.sendLCDString('你好世界');
4. 发送多行副屏内容字符串
import 'package:imin_vice_screen/imin_vice_screen.dart';
final iminViceScreenPlugin = IminViceScreen();
await iminViceScreenPlugin.sendLCDMultiString(
contents: ["很高兴见到你", "Des", "Hi"],
aligns: [0, 1, 2]
);
5. 发送两行副屏内容字符串
import 'package:imin_vice_screen/imin_vice_screen.dart';
final iminViceScreenPlugin = IminViceScreen();
await iminViceScreenPlugin.sendLCDDoubleString(
topText: '顶部内容',
bottomText: '底部内容'
);
6. 发送图片在副屏上显示
import 'package:imin_vice_screen/imin_vice_screen.dart';
final iminViceScreenPlugin = IminViceScreen();
// 使用字节
Uint8List byte = await readFileBytes('assets/images/logo.png');
await iminViceScreenPlugin.sendLCDBitmap(byte);
// 或者使用URL
await iminViceScreenPlugin.sendLCDBitmap(
'https://oss-sg.imin.sg/web/iMinPartner2/images/logo.png',
pictureStyle: IminPictureStyle(
width: 240,
height: 320,
)
);
7. 设置字体大小
import 'package:imin_vice_screen/imin_vice_screen.dart';
final iminViceScreenPlugin = IminViceScreen();
await iminViceScreenPlugin.setTextSize(15);
示例代码
import 'package:flutter/material.dart';
import 'pages/lcd_home.dart';
import 'pages/main_home.dart';
import 'pages/sub_home.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> {
bool hasSubSreen = false;
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
onGenerateRoute: (RouteSettings routeSettings) {
return MaterialPageRoute<void>(
settings: routeSettings,
builder: (BuildContext context) {
if (routeSettings.name == 'viceMain') {
hasSubSreen = true;
switch (routeSettings.name) {
case SubHome.routeName:
default:
return const SubHome();
}
} else {
switch (routeSettings.name) {
case MainHome.routeName:
default:
return hasSubSreen ? const MainHome() : const LCDHome();
}
}
},
);
},
);
}
}
更多关于Flutter屏幕共享插件imin_vice_screen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter屏幕共享插件imin_vice_screen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
关于在Flutter中使用imin_vice_screen
插件来实现屏幕共享功能,以下是一个简单的代码示例,展示如何集成和使用该插件。请注意,imin_vice_screen
可能是一个假想的插件名称,因为在我最后的知识更新中,Flutter社区并没有一个广泛认可的直接名为imin_vice_screen
的插件。然而,这个示例将模拟一个屏幕共享插件的基本使用方法。如果你有一个具体的插件,请参考其官方文档进行调整。
假设imin_vice_screen
插件提供了开始屏幕共享、停止屏幕共享以及获取屏幕数据的功能,下面是一个可能的代码示例:
- 在
pubspec.yaml
中添加依赖(注意:这里的依赖名imin_vice_screen
是假设的,请替换为实际插件名):
dependencies:
flutter:
sdk: flutter
imin_vice_screen: ^x.y.z # 替换为实际版本号
- 在
lib/main.dart
中导入插件并编写示例代码:
import 'package:flutter/material.dart';
import 'package:imin_vice_screen/imin_vice_screen.dart'; // 假设的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
IminViceScreenController? _screenController;
@override
void initState() {
super.initState();
// 初始化屏幕共享控制器
_screenController = IminViceScreenController();
// 开始屏幕共享(这里假设startScreenShare是一个异步方法)
_startScreenShare();
}
@override
void dispose() {
// 停止屏幕共享并释放资源
_screenController?.stopScreenShare();
_screenController?.dispose();
super.dispose();
}
Future<void> _startScreenShare() async {
try {
// 开始屏幕共享(假设此方法返回一个Future)
await _screenController?.startScreenShare();
print('Screen sharing started successfully.');
} catch (e) {
print('Failed to start screen sharing: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Screen Sharing Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 这里可以添加停止屏幕共享的逻辑,但为了简单起见,我们已经在dispose中处理了
// await _screenController?.stopScreenShare();
Navigator.pushReplacementNamed(context, '/stopScreenShare'); // 假设有一个路由来处理停止共享的逻辑
},
child: Text('Stop Screen Sharing'),
),
// 假设有一个方法可以从_screenController获取屏幕数据并显示
// Text('Screen Data: ${_screenController?.getScreenData()}'),
],
),
),
),
);
}
}
// 注意:由于`imin_vice_screen`是假设的,以下路由和页面仅作为示例
class StopScreenSharePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final IminViceScreenController? screenController =
ModalRoute.of(context)!.settings.arguments as IminViceScreenController?;
return Scaffold(
appBar: AppBar(title: Text('Stopping Screen Sharing')),
body: Center(
child: ElevatedButton(
onPressed: () async {
await screenController?.stopScreenShare();
Navigator.pop(context);
},
child: Text('Confirm Stop'),
),
),
);
}
}
注意:
- 上面的代码是基于假设的
imin_vice_screen
插件的功能编写的。实际插件可能有不同的API和初始化方法。 - 在真实应用中,你需要根据插件的文档来调整代码。
- 屏幕共享通常涉及复杂的权限处理和网络通信,确保你的应用已经正确处理了这些方面。
- 插件可能需要在
AndroidManifest.xml
和Info.plist
中添加特定的权限声明。
请查阅你实际使用的屏幕共享插件的文档,以获取准确的集成指南和API参考。