Flutter浮动窗口管理插件flutter_float_window的使用
Flutter浮动窗口管理插件 flutter_float_window
的使用
flutter_float_window
是一个用于在 Android 和 iOS 平台上显示浮动窗口的 Flutter 插件。以下是如何使用该插件的具体步骤和示例代码。
基本用法
初始化浮动窗口
Map<String, String> params = {"videoUrl": ''};
FlutterFloatWindow.initFloatWindow(params);
显示/隐藏浮动窗口
// 显示浮动窗口
FlutterFloatWindow.showFloatWindow();
// 隐藏浮动窗口
FlutterFloatWindow.hideFloatWindow();
控制播放状态
// 播放视频
FlutterFloatWindow.play();
// 暂停视频
FlutterFloatWindow.pause();
// 停止视频
FlutterFloatWindow.stop();
检查权限并处理
if (await FlutterFloatWindow.canShowFloatWindow()) {
FlutterFloatWindow.showFloatWindow();
} else {
FlutterFloatWindow.openSetting();
}
设置视频 URL
Map<String, String> params = {"videoUrl": "http://example.com/video.mp4"};
FlutterFloatWindow.setVideoUrl(params);
设置背景颜色
FlutterFloatWindow.setBackgroundColor("#5c3317");
设置重力方向
FlutterFloatWindow.setGravity(FloatWindowGravity.CENTER);
设置宽高
var map = {
"width": int.parse(width),
"height": int.parse(height)
};
FlutterFloatWindow.setWidthAndHeight(map);
设置宽高比
FlutterFloatWindow.setAspectRatio(0.7);
监听原生事件
var channel = FlutterFloatWindow.channel;
channel.setMethodCallHandler((call) async {
switch (call.method) {
case "onFullScreenClick":
debugPrint('onFullScreenClick');
break;
case "onCloseClick":
debugPrint('onCloseClick');
break;
case "onPlayClick":
debugPrint('onPlayClick,${call.arguments}');
break;
}
});
iOS 特定功能
初始化视频播放器
FlutterFloatWindow.initVideoPlayerIOS(
url: dataSource,
title: title,
artist: artist,
coverUrl: cover,
position: 0,
speed: 1.0,
);
FlutterVideoPlayerEngine playerEngine = FlutterVideoPlayerEngine.create();
playerEngine.setVideoPlayerEventHandler(FlutterVideoPlayerEventHandler(
onInitialized: () {},
onVideoProgress: (double position, double duration, double bufferedStart, double bufferedEnd) {},
onVideoPlayPaused: () {},
onVideoPlayEnd: () {},
onVideoInterruptionBegan: () {},
onVideoInterruptionEnded: () {},
onVideoPipCloseClicked: () {},
onVideoPipFullScreenClicked: () {},
));
FlutterFloatWindow.initVideoPlayerListener(playerEngine.mHandler!);
使用画中画模式
// 开始画中画
FlutterFloatWindow.startPipIOS();
// 结束画中画
FlutterFloatWindow.stopPipIOS();
示例 Demo
以下是一个完整的示例,展示了如何在应用中集成 flutter_float_window
插件:
import 'package:flutter/material.dart';
import 'package:flutter_float_window/flutter_float_window.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
initFloatWindow();
}
Future<void> initFloatWindow() async {
Map<String, String> params = {"videoUrl": "https://media.w3.org/2010/05/sintel/trailer.mp4"};
await FlutterFloatWindow.initFloatWindow(params);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter Float Window Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
if (await FlutterFloatWindow.canShowFloatWindow()) {
FlutterFloatWindow.showFloatWindow();
} else {
FlutterFloatWindow.openSetting();
}
},
child: Text('Show Float Window'),
),
ElevatedButton(
onPressed: () {
FlutterFloatWindow.hideFloatWindow();
},
child: Text('Hide Float Window'),
),
ElevatedButton(
onPressed: () {
FlutterFloatWindow.play();
},
child: Text('Play Video'),
),
ElevatedButton(
onPressed: () {
FlutterFloatWindow.pause();
},
child: Text('Pause Video'),
),
ElevatedButton(
onPressed: () {
FlutterFloatWindow.stop();
},
child: Text('Stop Video'),
),
],
),
),
),
);
}
}
更多关于Flutter浮动窗口管理插件flutter_float_window的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter浮动窗口管理插件flutter_float_window的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_float_window
插件来管理浮动窗口的一个示例。这个插件允许你在Android设备上创建和管理浮动窗口。请注意,iOS不支持浮动窗口功能,因此此示例仅适用于Android。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加flutter_float_window
的依赖:
dependencies:
flutter:
sdk: flutter
flutter_float_window: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android权限
在android/app/src/main/AndroidManifest.xml
中添加必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<!-- 其他配置 -->
</manifest>
3. 请求权限
在Flutter代码中请求必要的权限。由于SYSTEM_ALERT_WINDOW
权限在Android 6.0及以上版本中需要在运行时请求,你可以使用以下代码:
import 'package:flutter/material.dart';
import 'package:flutter_float_window/flutter_float_window.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool canShowOverlayWindows = false;
@override
void initState() {
super.initState();
_requestOverlayPermission();
}
Future<void> _requestOverlayPermission() async {
// 请求悬浮窗权限
var status = await Permission.overlayWindow.status;
if (!status.isGranted) {
var result = await Permission.overlayWindow.request();
if (result.isGranted) {
setState(() {
canShowOverlayWindows = true;
});
}
} else {
setState(() {
canShowOverlayWindows = true;
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Float Window Example'),
),
body: Center(
child: canShowOverlayWindows
? ElevatedButton(
onPressed: _showFloatWindow,
child: Text('Show Float Window'))
: Text('Waiting for Overlay Permission...'),
),
),
);
}
void _showFloatWindow() {
FloatWindow.createParams = (context) {
return FloatWindowParams(
width: 300,
height: 400,
x: 0,
y: 0,
isFullScreen: false,
isKeepAbove: true,
hasShadow: true,
canFocus: true,
canMove: true,
canResize: true,
isDraggable: true,
isResizable: true,
hasOverlayBackground: false,
showAnimation: WindowAnimation.FADEIN,
hideAnimation: WindowAnimation.FADEOUT,
isShowWhenScreenLock: true,
customParams: null,
);
};
FloatWindow.createView = (context, params) {
return Material(
elevation: 4.0,
child: Container(
color: Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('This is a floating window'),
ElevatedButton(
onPressed: () {
FloatWindow.remove();
},
child: Text('Close'),
),
],
),
),
);
};
FloatWindow.show();
}
}
4. 添加permission_handler
依赖
为了请求权限,你需要添加permission_handler
插件。在pubspec.yaml
中添加:
dependencies:
permission_handler: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
5. 运行应用
现在你可以运行你的Flutter应用,点击按钮来显示浮动窗口。
注意
- 确保你的Android设备已开启开发者选项并允许模拟点击(如果需要)。
- 某些设备和ROM可能对悬浮窗权限有额外的限制,确保你的设备支持此功能。
- 由于iOS不支持浮动窗口,因此此示例在iOS设备上不会工作。
这个示例展示了如何使用flutter_float_window
插件来创建和管理一个基本的浮动窗口。你可以根据需要进一步自定义浮动窗口的参数和视图。