Flutter图片水印插件flutter_watermark的使用
Flutter图片水印插件 flutter_watermark
的使用
flutter_watermark
是一个帮助你在Flutter应用中全局添加水印的新插件。本文将介绍如何使用该插件,并提供完整的示例代码。
截图
使用方法
初始化插件
首先,你需要初始化插件:
final DisableScreenshots _plugin = DisableScreenshots();
添加默认样式的水印
你可以通过以下方式添加默认样式的水印:
_plugin.addWatermark(context, "默认水印", rowCount: 4, columnCount: 8);
添加自定义Widget作为水印
你也可以通过传递自定义的Widget来创建水印:
_plugin.addCustomWatermark(
context,
const Watermark(
rowCount: 3,
columnCount: 10,
text: "自定义水印"
)
);
移除水印
当需要移除水印时,调用以下方法:
_plugin.removeWatermark();
完整示例代码
以下是完整的示例代码,展示了如何在你的Flutter应用中集成和使用flutter_watermark
插件:
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_watermark/flutter_watermark.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(home: RootApp());
}
}
class RootApp extends StatelessWidget {
RootApp({super.key});
// 初始化插件
final DisableScreenshots _plugin = DisableScreenshots();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('全局水印'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
ElevatedButton(
onPressed: () => _plugin.addWatermark(context, "默认水印",
rowCount: 4, columnCount: 8),
child: const Text("添加默认水印")),
ElevatedButton(
onPressed: () => _plugin.addCustomWatermark(
context,
const Watermark(
rowCount: 3, columnCount: 10, text: "自定义水印")),
child: const Text("添加自定义水印")),
ElevatedButton(
onPressed: () => _plugin.removeWatermark(),
child: const Text("删除水印")),
ElevatedButton(
onPressed: () => Navigator.of(context).push(MaterialPageRoute(
builder: (_) => Scaffold(
appBar: AppBar(
title: const Text("我是新页面"),
),
body: const Center(child: Text("new page")),
))),
child: const Text("进入新页面"))
],
),
),
);
}
}
class Watermark extends StatelessWidget {
final int rowCount;
final int columnCount;
final String text;
const Watermark({
Key? key,
required this.rowCount,
required this.columnCount,
required this.text,
}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return IgnorePointer(
child: Column(
children: createColumnWidgets(),
),
);
}
List<Widget> createRowWidgets() {
List<Widget> list = [];
for (var i = 0; i < rowCount; i++) {
final widget = Expanded(
child: Center(
child: Transform.rotate(
angle: pi / 10,
child: Text(
text,
style: const TextStyle(
color: Color(0x08000000),
fontSize: 18,
decoration: TextDecoration.none),
),
)));
list.add(widget);
}
return list;
}
List<Widget> createColumnWidgets() {
List<Widget> list = [];
for (var i = 0; i < columnCount; i++) {
final widget = Expanded(
child: Row(
children: createRowWidgets(),
));
list.add(widget);
}
return list;
}
}
更多关于Flutter图片水印插件flutter_watermark的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片水印插件flutter_watermark的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用flutter_watermark
插件来给图片添加水印的示例代码。这个插件允许你在图片上添加文本或图像水印。
首先,你需要在pubspec.yaml
文件中添加flutter_watermark
依赖:
dependencies:
flutter:
sdk: flutter
flutter_watermark: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Dart文件中使用flutter_watermark
插件。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_watermark/flutter_watermark.dart';
import 'dart:ui' as ui;
import 'dart:typed_data';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: WatermarkExample(),
);
}
}
class WatermarkExample extends StatefulWidget {
@override
_WatermarkExampleState createState() => _WatermarkExampleState();
}
class _WatermarkExampleState extends State<WatermarkExample> {
Uint8List? watermarkedImage;
@override
void initState() {
super.initState();
_addWatermarkToImage();
}
Future<void> _addWatermarkToImage() async {
// 加载原始图片
final ByteData imageData = await rootBundle.load('assets/your_image.png');
final Uint8List imageBytes = imageData.buffer.asUint8List();
final ui.Codec codec = await ui.instantiateImageCodec(imageBytes);
final ui.FrameInfo frameInfo = await codec.getNextFrame();
final ui.Image image = frameInfo.image;
// 创建水印
final Watermark watermark = Watermark()
..addText(
text: 'Watermark Text',
color: Colors.red,
fontSize: 24.0,
align: WatermarkAlign.bottomRight,
margin: EdgeInsets.all(10),
)
..addImage(
imagePath: 'assets/watermark_image.png', // 水印图片路径
align: WatermarkAlign.topLeft,
margin: EdgeInsets.all(10),
scale: 0.5, // 水印图片缩放比例
);
// 添加水印并获取结果图片
watermarkedImage = await watermark.add(image: image);
// 更新UI
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Watermark Example'),
),
body: Center(
child: watermarkedImage != null
? Image.memory(watermarkedImage!)
: CircularProgressIndicator(),
),
);
}
}
在上面的代码中,我们做了以下几件事:
- 加载原始图片:使用
rootBundle.load
加载了一个位于assets
目录下的图片。 - 创建水印:使用
Watermark
类创建了一个水印对象,并添加了一个文本水印和一个图像水印。 - 添加水印:调用
watermark.add(image: image)
方法将水印添加到原始图片上,并获取结果图片。 - 显示结果图片:使用
Image.memory
显示添加水印后的图片。
请注意,你需要将示例中的your_image.png
和watermark_image.png
替换为你实际使用的图片文件,并确保这些图片已经添加到你的Flutter项目的assets
目录下,并在pubspec.yaml
文件中进行了相应的配置。
例如,在pubspec.yaml
中添加图片资源:
flutter:
assets:
- assets/your_image.png
- assets/watermark_image.png
这样,你就可以在Flutter应用中使用flutter_watermark
插件来给图片添加水印了。