Flutter演示展示插件flutter_presentation_display的使用
Flutter演示展示插件flutter_presentation_display的使用
Flutter Presentation Display
是一个专为多显示器设计的Flutter插件,支持处理辅助(演示)显示器。它提供了与已连接显示器交互的方法,传输数据,并响应显示器连接状态的变化。该插件已在SUNMI T2s上进行了测试。
功能
- 获取已连接显示器列表
- 显示和隐藏辅助(演示)显示器
- 将数据从主显示器传输到辅助显示器或反之亦然
- 监听显示器连接状态变化
安装
在 pubspec.yaml
文件中添加 flutter_presentation_display
:
dependencies:
flutter:
sdk: flutter
flutter_presentation_display: any # 替换为最新版本
使用
导入包
import 'package:flutter_presentation_display/flutter_presentation_display.dart';
初始化FlutterPresentationDisplay
创建 FlutterPresentationDisplay
的实例:
final display = FlutterPresentationDisplay();
获取显示器列表
获取已连接显示器的列表:
List<Display>? displays = await display.getDisplays();
根据ID获取显示器名称
通过ID检索显示器名称:
String? displayName = await display.getNameByDisplayId(1);
根据索引获取显示器名称
通过索引检索显示器名称:
String? displayName = await display.getNameByIndex(0);
显示和隐藏辅助显示器
显示辅助显示器
通过特定ID和路由器名称显示辅助显示器:
bool? result = await display.showSecondaryDisplay(
displayId: 1,
routerName: "presentation",
);
隐藏辅助显示器
通过ID隐藏辅助显示器:
bool? result = await display.hideSecondaryDisplay(displayId: 1);
在显示器间传输数据
向辅助显示器传输数据
向辅助(演示)显示器传输数据:
bool? result = await display.transferDataToPresentation({"key": "value"});
向主显示器传输数据
向主显示器传输数据:
bool? result = await display.transferDataToMain({"key": "value"});
监听显示器连接状态变化
监听已连接显示器的状态变化:
display.connectedDisplaysChangedStream.listen((int? displayId) {
print('Connected display ID: $displayId');
});
监听来自显示器的数据
监听来自辅助显示器的数据
监听来自辅助(演示)显示器的数据:
display.listenDataFromPresentationDisplay((dynamic data) {
print('Data from Presentation Display: $data');
});
监听来自主显示器的数据
监听来自主显示器的数据:
display.listenDataFromMainDisplay((dynamic data) {
print('Data from Main Display: $data');
});
示例
查看 example 目录中的完整示例应用程序,以了解如何使用 flutter_presentation_display
包。
许可证
该插件基于 presentation_displays,采用BSD 2-Clause许可证。 flutter_presentation_display 是原始版本的修改版。
### 示例代码
```dart
import 'package:flutter/material.dart';
import 'package:flutter_presentation_display_example/route.dart';
void main() {
runApp(const MyApp());
}
[@pragma](/user/pragma)('vm:entry-point')
void secondaryDisplayMain() {
runApp(const MySecondApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
onGenerateRoute: generateRoute,
initialRoute: '/',
);
}
}
class MySecondApp extends StatelessWidget {
const MySecondApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
onGenerateRoute: generateRoute,
initialRoute: 'presentation',
);
}
}
更多关于Flutter演示展示插件flutter_presentation_display的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter演示展示插件flutter_presentation_display的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个使用 flutter_presentation_display
插件的简单示例代码,用于在 Flutter 应用中演示和展示第二个屏幕(例如投影仪或外接显示器)的功能。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_presentation_display
依赖:
dependencies:
flutter:
sdk: flutter
flutter_presentation_display: ^0.x.x # 请替换为最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,是一个简单的示例代码,展示如何使用 flutter_presentation_display
插件:
import 'package:flutter/material.dart';
import 'package:flutter_presentation_display/flutter_presentation_display.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Presentation Display Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
PresentationDisplay? _presentationDisplay;
@override
void initState() {
super.initState();
WidgetsBinding.instance!.addObserver(this);
initPresentationDisplay();
}
@override
void dispose() {
WidgetsBinding.instance!.removeObserver(this);
_presentationDisplay?.dispose();
super.dispose();
}
void initPresentationDisplay() async {
_presentationDisplay = PresentationDisplay.connect();
_presentationDisplay!.addListener(() {
if (_presentationDisplay!.connected) {
print("Presentation display connected!");
// 在这里启动展示逻辑
_presentationDisplay!.setScene(createPresentationScene());
} else {
print("Presentation display disconnected.");
}
});
}
Widget createPresentationScene() {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Presentation Screen'),
),
body: Center(
child: Text(
'Hello, this is the presentation display!',
style: TextStyle(fontSize: 36),
),
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Main Screen'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 这里可以添加逻辑来控制展示内容的切换等
print("Main screen button pressed.");
},
child: Text('Press Me'),
),
),
);
}
}
在这个示例中:
- 我们创建了一个基本的 Flutter 应用,包含主屏幕和演示屏幕。
- 使用
PresentationDisplay.connect()
方法连接到第二个显示设备(如果有的话)。 - 当第二个显示设备连接上时,通过监听
_presentationDisplay
的状态变化,我们在该屏幕上显示一个简单的MaterialApp
,其中包含一个Scaffold
和一些文本。 - 主屏幕上有一个按钮,虽然在这个示例中按钮没有实际功能,但你可以根据需求添加逻辑来控制展示内容的切换等。
请注意,flutter_presentation_display
插件的具体用法和功能可能会随着版本的更新而变化,因此请参考官方文档和示例代码以确保最佳实践和兼容性。