water_mark.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /*
  2. * @Author: WuXiangNan
  3. * @Date: 2021-07-05 14:43:18
  4. * @LastEditors: WuXiangNan
  5. * @LastEditTime: 2021-07-21 11:43:31
  6. * @Description:
  7. */
  8. import 'dart:math';
  9. import 'package:flutter/material.dart';
  10. /// 水印样式
  11. /// rowCount: 当前屏幕宽度中 展示多少列水印
  12. /// columnCount: 当前屏幕高度中,展示多少行水印
  13. /// watermark: 水印展示的文字
  14. /// textStyle: 文字的样式
  15. class WisDisableScreenshotsWatarmark extends StatelessWidget {
  16. final int rowCount;
  17. final int columnCount;
  18. final String text;
  19. final TextStyle textStyle;
  20. const WisDisableScreenshotsWatarmark({
  21. Key? key,
  22. required this.rowCount,
  23. required this.columnCount,
  24. required this.text,
  25. required this.textStyle,
  26. }) : super(key: key);
  27. @override
  28. Widget build(BuildContext context) {
  29. return IgnorePointer(
  30. child: Container(
  31. child: Column(
  32. mainAxisSize: MainAxisSize.min,
  33. children: creatColumnWidgets(),
  34. )),
  35. );
  36. }
  37. List<Widget> creatRowWdiges() {
  38. List<Widget> list = [];
  39. for (var i = 0; i < rowCount; i++) {
  40. final widget = Expanded(
  41. child: Container(
  42. child: Transform.rotate(
  43. angle: -pi / 5, child: Text(text, style: textStyle))));
  44. list.add(widget);
  45. }
  46. return list;
  47. }
  48. List<Widget> creatColumnWidgets() {
  49. List<Widget> list = [];
  50. for (var i = 0; i < columnCount; i++) {
  51. final widget = Expanded(
  52. child: Row(
  53. mainAxisSize: MainAxisSize.min,
  54. children: creatRowWdiges(),
  55. ),
  56. );
  57. list.add(widget);
  58. }
  59. return list;
  60. }
  61. }
  62. /// 水印工具类 单例 instance
  63. /// 使用方式:
  64. ///
  65. /// 获取实例: WisWatarMarkInstance instance = WisWatarMarkInstance();
  66. /// 添加水印: instance.addWatermark(context, "320321199708134818");
  67. /// 删除水印: instance.removeWatermark();
  68. ///
  69. class WisWatarMarkInstance {
  70. static WisWatarMarkInstance? _instance;
  71. factory WisWatarMarkInstance() {
  72. if (_instance == null) {
  73. _instance = WisWatarMarkInstance.private();
  74. }
  75. return _instance!;
  76. }
  77. WisWatarMarkInstance.private();
  78. OverlayEntry? _overlayEntry;
  79. void addWatermark(BuildContext context, String watermark,
  80. {int rowCount = 4, int columnCount = 8, TextStyle? textStyle}) async {
  81. if (_overlayEntry != null) {
  82. _overlayEntry!.remove();
  83. }
  84. OverlayState overlayState = Overlay.of(context);
  85. _overlayEntry = OverlayEntry(
  86. builder: (context) => Positioned(
  87. child: Container(
  88. padding: EdgeInsets.only(top: 60),
  89. child: WisDisableScreenshotsWatarmark(
  90. rowCount: rowCount,
  91. columnCount: columnCount,
  92. text: watermark,
  93. textStyle: textStyle ??
  94. const TextStyle(
  95. color: Color(0x3DBEBEBE),
  96. fontSize: 14,
  97. decoration: TextDecoration.none),
  98. ),
  99. )),
  100. );
  101. overlayState.insert(_overlayEntry!);
  102. }
  103. void removeWatermark() async {
  104. if (_overlayEntry != null) {
  105. _overlayEntry!.remove();
  106. _overlayEntry = null;
  107. }
  108. }
  109. }