Flutter浮动按钮覆盖层插件scrumlab_float_button_overlay的使用
Flutter浮动按钮覆盖层插件scrumlab_float_button_overlay的使用
scrumlab_float_button_overlay 插件简介
scrumlab_float_button_overlay
是一个用于在 Flutter 应用中实现类似浮动按钮覆盖层功能的插件。它可以让应用服务在后台保持可见,类似于一个浮动按钮。
使用步骤
1. 导入插件
首先,在项目中导入 scrumlab_float_button_overlay
插件:
import 'package:scrumlab_float_button_overlay/scrumlab_float_button_overlay.dart';
2. 初始化权限检查
在应用启动时,调用 checkPermissions
方法以确保插件所需的权限已启用。
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
// 注册回调函数
FloatButtonOverlay.registerCallback(serviceCallback, onClickCallback);
}
Future<void> initPlatformState() async {
try {
FloatButtonOverlay.checkPermissions;
} on PlatformException {}
}
3. 在 main
方法中初始化 Flutter 应用
确保在 main
方法中初始化 Flutter 并运行应用。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
4. 显示/隐藏浮动按钮
显示浮动按钮
通过 openOverlay
方法设置浮动按钮的属性,例如通知标题、通知文本、图标路径等。
FloatButtonOverlay.openOverlay(
activityName: 'MainActivity', // 主活动名称
iconPath: file.path, // 图标路径
notificationText: "Float Button Overlay ☠️", // 通知文本
notificationTitle: 'Float Button Overlay ☠️', // 通知标题
packageName: packageInfo.packageName, // 包名
showTransparentCircle: true, // 是否显示透明圆圈
iconWidth: 100, // 图标宽度
iconHeight: 100, // 图标高度
transpCircleHeight: 150, // 透明圆圈高度
transpCircleWidth: 150, // 透明圆圈宽度
);
隐藏浮动按钮
通过 closeOverlay
方法隐藏浮动按钮。
FloatButtonOverlay.closeOverlay;
完整示例代码
以下是一个完整的示例代码,展示了如何使用 scrumlab_float_button_overlay
插件。
import 'dart:io';
import 'package:scrumlab_float_button_overlay/scrumlab_float_button_overlay.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:package_info_plus/package_info_plus.dart'; // 使用 package_info_plus 进行版本信息获取
import 'package:path_provider/path_provider.dart';
void main() => runApp(MyApp());
Future<File> getImageFileFromAssets(String path) async {
final byteData = await rootBundle.load('assets/$path');
final file = File('${(await getTemporaryDirectory()).path}/$path');
await file.writeAsBytes(byteData.buffer
.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));
return file;
}
File? file;
PackageInfo? packageInfo;
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
TextEditingController iconWidthController = TextEditingController();
TextEditingController iconHeightController = TextEditingController();
TextEditingController transpWidth = TextEditingController();
TextEditingController transpHeight = TextEditingController();
bool showTransparencyBg = false;
[@override](/user/override)
void initState() {
super.initState();
WidgetsFlutterBinding.ensureInitialized();
initPlatformState();
FloatButtonOverlay.registerCallback(serviceCallback, onClickCallback);
}
Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion =
await FloatButtonOverlay.platformVersion ?? 'Unknown version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
void serviceCallback(String tag) {
print(tag);
}
void onClickCallback(String tag) {
print(tag);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Float Button Overlay - Example'),
backgroundColor: Colors.black45,
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('Running on: $_platformVersion\n'),
TextField(
controller: iconWidthController,
decoration: InputDecoration(labelText: "Icon Width"),
),
TextField(
controller: iconHeightController,
decoration: InputDecoration(labelText: "Icon Height"),
),
TextField(
controller: transpWidth,
decoration: InputDecoration(labelText: "Transparency Width"),
),
TextField(
controller: transpHeight,
decoration: InputDecoration(labelText: "Transparency Height"),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Show Transparency Background?'),
Switch(
value: showTransparencyBg,
onChanged: (value) {
setState(() {
showTransparencyBg = value;
});
}),
],
),
TextButton(
onPressed: () async {
file = await getImageFileFromAssets('caveira.png');
packageInfo = await PackageInfo.fromPlatform();
debugPrint("Vai abrir o overlay");
FloatButtonOverlay.openOverlay(
activityName: 'MainActivity',
iconPath: file?.path ?? '',
notificationText: "Float Button Overlay ☠️",
notificationTitle: 'Float Button Overlay ☠️',
packageName: packageInfo?.packageName ?? '',
showTransparentCircle: showTransparencyBg,
iconWidth: int.parse(iconWidthController.text.isEmpty
? '100'
: iconWidthController.text),
iconHeight: int.parse(iconHeightController.text.isEmpty
? '100'
: iconHeightController.text),
transpCircleHeight: int.parse(transpHeight.text.isEmpty
? '150'
: transpHeight.text),
transpCircleWidth: int.parse(
transpWidth.text.isEmpty ? '150' : transpWidth.text),
);
},
child: Container(
color: Colors.black45,
height: 40,
width: 100,
child: Center(
child: Text(
"Show Button",
),
),
),
),
TextButton(
onPressed: () {
debugPrint("Vai fechar o overlay");
FloatButtonOverlay.closeOverlay;
},
child: Container(
color: Colors.black54,
height: 40,
width: 100,
child: Center(
child: Text(
"Close Button",
),
),
),
),
],
),
),
),
),
);
}
}
更多关于Flutter浮动按钮覆盖层插件scrumlab_float_button_overlay的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter浮动按钮覆盖层插件scrumlab_float_button_overlay的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
scrumlab_float_button_overlay
是一个用于在 Flutter 应用中创建浮动按钮覆盖层的插件。它允许你在应用的任何位置添加一个浮动按钮,并且可以自定义按钮的行为和外观。以下是如何使用这个插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 scrumlab_float_button_overlay
插件的依赖:
dependencies:
flutter:
sdk: flutter
scrumlab_float_button_overlay: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入插件:
import 'package:scrumlab_float_button_overlay/scrumlab_float_button_overlay.dart';
3. 使用 FloatButtonOverlay
你可以将 FloatButtonOverlay
包裹在你的 MaterialApp
或 Scaffold
中,以便在应用中显示浮动按钮。
以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:scrumlab_float_button_overlay/scrumlab_float_button_overlay.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FloatButtonOverlay(
child: Scaffold(
appBar: AppBar(
title: Text('Floating Button Overlay Example'),
),
body: Center(
child: Text('Hello, World!'),
),
),
floatButton: FloatingActionButton(
onPressed: () {
// 处理按钮点击事件
print('Floating Button Pressed!');
},
child: Icon(Icons.add),
),
),
);
}
}
4. 自定义浮动按钮
你可以通过 floatButton
参数来自定义浮动按钮的外观和行为。上面的示例中使用了 FloatingActionButton
,但你也可以使用其他类型的按钮或自定义 widget。
5. 控制浮动按钮的位置
FloatButtonOverlay
允许你通过 alignment
参数来控制浮动按钮的位置。默认情况下,按钮位于右下角。
FloatButtonOverlay(
alignment: Alignment.bottomLeft, // 将按钮放置在左下角
child: Scaffold(
// 其他代码
),
floatButton: FloatingActionButton(
onPressed: () {
print('Floating Button Pressed!');
},
child: Icon(Icons.add),
),
)
6. 处理按钮点击事件
你可以在 onPressed
回调中处理按钮的点击事件。例如,你可以导航到另一个页面、显示一个对话框或执行其他操作。
FloatButtonOverlay(
child: Scaffold(
// 其他代码
),
floatButton: FloatingActionButton(
onPressed: () {
// 导航到另一个页面
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AnotherPage()),
);
},
child: Icon(Icons.add),
),
)
7. 自定义覆盖层
FloatButtonOverlay
还允许你通过 overlayBuilder
参数来自定义覆盖层的内容。你可以使用这个参数来添加更多的 UI 元素或动画效果。
FloatButtonOverlay(
child: Scaffold(
// 其他代码
),
floatButton: FloatingActionButton(
onPressed: () {
print('Floating Button Pressed!');
},
child: Icon(Icons.add),
),
overlayBuilder: (BuildContext context) {
return Center(
child: Text('Custom Overlay Content'),
);
},
)