flutter添加全局水印

效果:
在這里插入圖片描述

可以直接引用:disable_screenshots: ^0.2.0
但是有時候直接引用會報錯,可以不引用插件直接把下面的源碼工具類放在項目里面
工具類源碼:


import 'dart:io';
import 'dart:math';import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';class DisableScreenshots {DisableScreenshots.private(this._methodChannel, this._eventChannel);static   DisableScreenshots? _instance/* = DisableScreenshots.private()*/;factory DisableScreenshots() {if (_instance == null) {final MethodChannel methodChannel = const MethodChannel("com.devlxx.DisableScreenshots/disableScreenshots");final EventChannel eventChannel =const EventChannel('com.devlxx.DisableScreenshots/observer');_instance = DisableScreenshots.private(methodChannel, eventChannel);}return _instance!;}final MethodChannel _methodChannel;final EventChannel _eventChannel;Stream<void>? _onScreenShots=null;OverlayEntry? _overlayEntry;void addWatermark(BuildContext context, String watermark,{int rowCount = 3, int columnCount = 10, TextStyle? textStyle}) async {if (_overlayEntry != null) {_overlayEntry!.remove();}OverlayState? overlayState = Overlay.of(context);_overlayEntry = OverlayEntry(builder: (context) => DisableScreenshotsWatarmark(rowCount: rowCount,columnCount: columnCount,text: watermark,textStyle: textStyle ??const TextStyle(color: Color(0x08000000),fontSize: 18,decoration: TextDecoration.none),));overlayState?.insert(_overlayEntry!);// return await _methodChannel.invokeMethod<void>("addWatermark", ['我是水印']);}void addCustomWatermark(BuildContext context, Widget widget) {if (_overlayEntry != null) {_overlayEntry!.remove();}OverlayState? overlayState = Overlay.of(context);_overlayEntry = OverlayEntry(builder: (context) => widget);overlayState?.insert(_overlayEntry!);}void removeWatermark() async {if (_overlayEntry != null) {_overlayEntry!.remove();_overlayEntry = null;}}Stream<void> get onScreenShots {if (_onScreenShots == null) {_onScreenShots = _eventChannel.receiveBroadcastStream();}return _onScreenShots!;}/// 只支持安卓Future<void> disableScreenshots(bool disable) async {if (Platform.isAndroid) {return await _methodChannel.invokeMethod("disableScreenshots", {"disable": disable});} else {print('僅Android平臺支持禁用屏幕截圖');}}
}class DisableScreenshotsWatarmark extends StatelessWidget {final int rowCount;final int columnCount;final String text;final TextStyle textStyle;const DisableScreenshotsWatarmark({Key? key,required this.rowCount,required this.columnCount,required this.text,required this.textStyle,}) : super(key: key);@overrideWidget build(BuildContext context) {return IgnorePointer(child: Container(child: Column(children: creatColumnWidgets(),)),);}List<Widget> creatRowWdiges() {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: textStyle))));list.add(widget);}return list;}List<Widget> creatColumnWidgets() {List<Widget> list = [];for (var i = 0; i < columnCount; i++) {final widget = Expanded(child: Row(children: creatRowWdiges(),));list.add(widget);}return list;}
}

使用:

初始化

waterMarkerPlugin 要創建為全局的

  // 初始化水印插件static  DisableScreenshots waterMarkerPlugin = DisableScreenshots();

添加水印

//添加水印Params.waterMarkerPlugin.addWatermark(context,'默認水印',rowCount: 4,columnCount: 8);

取消水印

  //取消水印Params.waterMarkerPlugin.removeWatermark();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206832.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FastAPI請求體-多個參數

路徑參數、查詢參數&#xff0c;和請求體混合 首先&#xff0c;我們需要導入所需的庫。我們將使用FastAPI、Path和Annotated來處理路由和參數&#xff0c;并使用BaseModel和Union來自定義數據模型。 完整示例代碼 from typing import Annotated, Unionfrom fastapi import F…

剪切板管理 Paste中文 for Mac

Paste是一個方便的剪貼板管理工具&#xff0c;它可以幫助你更好地組織、查找和管理剪貼板中的內容。它提供了歷史記錄、搜索、組織、格式處理和云同步等功能&#xff0c;使你能夠更高效地使用剪貼板&#xff0c;并節省時間和精力。無論是在個人使用還是團隊協作中&#xff0c;P…

linux云服務器開啟防火墻注意事件

重要的事情先說三遍: linux云服務器開啟防火墻要先獲取到云服務器的管理界面控制權!! linux云服務器開啟防火墻要先獲取到云服務器的管理界面控制權!! linux云服務器開啟防火墻要先獲取到云服務器的管理界面控制權!! 也就是能打開這個頁面: 為什么這么說呢?如果你…

11.Java安卓程序設計-基于SSM框架的Android平臺健康管理系統的設計與實現

摘要 隨著人們生活水平的提高和健康意識的增強&#xff0c;健康管理系統在日常生活中扮演著越來越重要的角色。本研究旨在設計并實現一款基于SSM框架的Android平臺健康管理系統&#xff0c;為用戶提供全面的健康監測和管理服務。 在需求分析階段&#xff0c;我們明確了系統的…

帆軟報表決策報表改變屏幕大小后出現字體大小或滾動條異常解決方案:雙向自適應

帆軟報表決策報表改變屏幕大小后出現字體大小或滾動條異常。 解決方案&#xff1a;在模板和報表塊中配置雙向自適應 在每一個報表塊中設置&#xff1a;

記錄每日LeetCode 763.劃分字母區間 Java實現

題目描述&#xff1a; 給你一個字符串 s 。我們要把這個字符串劃分為盡可能多的片段&#xff0c;同一字母最多出現在一個片段中。 注意&#xff0c;劃分結果需要滿足&#xff1a;將所有劃分結果按順序連接&#xff0c;得到的字符串仍然是 s 。 返回一個表示每個字符串片段的…

HTML中行內元素和塊級元素的區別? 分別有哪些?

Hi i,m JinXiang ? 前言 ? 本篇文章主要介紹HTML中行內元素和塊級元素的區別? 分別有哪些? 以及部分理論知識 &#x1f349;歡迎點贊 &#x1f44d; 收藏 ?留言評論 &#x1f4dd;私信必回喲&#x1f601; &#x1f349;博主收將持續更新學習記錄獲&#xff0c;友友們有任…

十五屆藍橋杯分享會(一)

注&#xff1a;省賽4月&#xff0c;決賽6月 一、藍橋杯整體介紹 1.十四屆藍橋杯軟件電子賽參賽人數&#xff1a;C 8w&#xff0c;java/python 2w&#xff0c;web 4k&#xff0c;單片機 1.8w&#xff0c;嵌入式/EDA5k&#xff0c;物聯網 300 1.1設計類參賽人數&#xff1a;平…

護士執業資格考試報名照片要求和免審核上傳攻略

新一年度的護考報名又開始啦&#xff0c;護理專業實行“雙證書”制&#xff0c;只有具備畢業證護士執業資格證才能正式成為一名“白衣天使”&#xff0c;因此&#xff0c;護考報名關乎職業前程。目前已經進入護考的報名時間&#xff0c;很多朋友反映注冊進入報名系統第一步就是…

yum源不起作用_yum無法安裝程序_Linux默認源替換---Linux工作筆記067

今天在一臺機器上進行安裝yum install的時候提示,yum不可用,這時候,折騰了一會 后來更換了默認源就可以了. 首先: 可以看到原來的里面有個 yum.repos.d 里面放了很多源,但是這些源是不可以聯網的. 是內網的源,所以,我對他進行了 mv yum.repos.d yum.repos.d.bak 重命名 然…

線性索引與行列號索引

一、含義 線性索引&#xff0c;顧名思義就是說把圖像矩陣展平&#xff0c;相當于變成一維的圖像數組&#xff0c;故像素點的線性索引就是其在圖像數組中的索引值 行列號索引&#xff0c;對于一個二維的圖像矩陣有行有列&#xff0c;知道行號和列號就可以唯一確定一個點的位置…

c++的排序算法

一&#xff1a;merge 是 C STL 中的一個算法函數&#xff0c;用于將兩個已排序的序列合并成一個有序序列。 template<class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator merge(InputIterator1 first1, InputIterator1 …

java基礎之循環

Java中有三種主要的循環結構&#xff1a; while 循環do…while 循環for 循環 1、while循環 1.1、結構 while( 布爾表達式 ) { //循環內容 } 1.2、實例 public class TestWhile {public static void main(String[] args) {int x 1;while (x<10){System.out.println("…

組個最小數

給定數字0-9各若干個。你可以以任意順序排列這些數字&#xff0c;但必須全部使用。目標是使得最后得到的數盡可能小&#xff08;注意0不能做首位&#xff09;。例如&#xff1a;給定兩個0&#xff0c;兩個1&#xff0c;三個5&#xff0c;一個8&#xff0c;我們得到的最小的數就…

f2fs解析(一)f2fs如何解決wandering tree

wandering tree問題是log-structured 文件系統&#xff08;LFS&#xff09; 特有的一個問題&#xff0c;因為LFS的臟數據是追加更新的&#xff0c;所以如果一個數據塊變臟了&#xff0c;那么那個數據塊的直接索引塊、間接索引塊都會變臟&#xff08;因為索引的地址變臟&#xf…

阿里云通義千問720億參數模型開源,適配企業級、科研級高性能應用

12月1日&#xff0c;阿里云舉辦通義千問發布會&#xff0c;開源通義千問720億參數模型Qwen-72B。Qwen-72B在10個權威基準測評創下開源模型最優成績&#xff0c;成為業界最強開源大模型&#xff0c;性能超越開源標桿Llama 2-70B和大部分商用閉源模型。未來&#xff0c;企業級、科…

Spring Cloud + Vue前后端分離-第2章 使用Maven搭建SpringCloud項目

Spring Cloud Vue前后端分離-第2章 使用Maven搭建SpringCloud項目 Maven兩大核心功能&#xff1a; 依賴管理&#xff08;Jar包管理&#xff09; 構建項目&#xff08;項目打包&#xff09; 使用Eureka搭建注冊中心 使用spring initializr創建spring cloud項目 SpringCloud…

FastAPI之聲明請求參數示例數據

在Pydantic模型中添加額外的JSON模式數據 您可以聲明Pydantic模型的示例&#xff0c;這些示例將被添加到生成的JSON模式中。 示例代碼 from fastapi import FastAPI from pydantic import BaseModelapp FastAPI()class Item(BaseModel):name: strdescription: str | None …

(C語言實現)高精度除法 (洛谷 P2005 A/B Problem II)

前言 本期我們分享用C語言實現高精度除法&#xff0c;可通過該題測試點我點我&#xff0c;洛谷 p2005。 那么話不多說我們開始吧。 講解 大家還記不記得小學的時候我們是怎么做除法的&#xff1f;我們以1115為例。 我們的高精度除法也將采用這個思路進行&#xff0c;分別用兩…