Flutter快速制作一個水印組件實例詳解
正文
項目開發(fā)的過程中,經常會遇到添加水印的需求,其作用無非就是防止重要信息通過截圖外傳。(雖然我覺得并沒有什么卵用,但領導的需求是不容質疑的)

那么,作為一線碼農的我,也只能屁顛屁顛的開搞。
通過child屬性將水印疊加給子組件
水印組件,既然是組件,就是需要發(fā)揚Flutter套娃的精神,通過child屬性將水印疊加給子組件。
class Watermark extends StatelessWidget {
const Watermark({Key? key, required this.child}) : super(key: key);
final Widget child;
/// 水印信息
final String waterInfo = '半點橘色 6666';
@override
Widget build(BuildContext context) {
return Stack(
children: [
child,
_createWatermark(),
],
);
}
/// ....
}
waterInfo屬性一般情況是獲取登錄用戶信息進行動態(tài)寫入,在demo中就寫死了。
build方法的內容很簡單,無非是通過Stack進行堆疊布局,通過createWatermark方法創(chuàng)建水印,放置于子組件的上方。
createWatermark方法
核心內容就在于createWatermark方法。
/// 創(chuàng)建水印
Widget _createWatermark() {
return IgnorePointer(
child: Column(
children: List.generate(
6,
(index) => Expanded(
child: Row(
children: List.generate(
3,
(index) => Expanded(
child: Center(
child: Transform.rotate(
angle: -0.34,
child: Text(
waterInfo,
style: const TextStyle(
color: Color(0x10000000),
fontSize: 14,
decoration: TextDecoration.none,
),
),
),
),
),
),
),
),
),
),
);
}
創(chuàng)建水印可以通過橫向(Row)和縱向(Column)布局,將水印文本內容渲染在頁面中。當然,樣式可以隨喜愛而定,例如Transform.rotate設置傾斜角度,Color設置文本顏色等。
其中IgnorePointer組件是個重點。
它可以讓點擊事件穿透容器,直達下層。這樣一來即使水印疊加在最頂層,也不會影響到頁面手勢的操作。
IgnorePointer還有個同胞兄弟AbsorbPointer,它的作用與IgnorePointer相反,會消費掉點擊事件,使其無法穿透容器向下傳遞。
Watermark組件的完整代碼
import 'package:flutter/material.dart';
/// 水印組件
class Watermark extends StatelessWidget {
const Watermark({Key? key, required this.child}) : super(key: key);
final Widget child;
final String waterInfo = '半點橘色 6666';
@override
Widget build(BuildContext context) {
return Stack(
children: [
child,
_createWatermark(),
],
);
}
/// 創(chuàng)建水印
Widget _createWatermark() {
return IgnorePointer(
child: Column(
children: List.generate(
6,
(index) => Expanded(
child: Row(
children: List.generate(
3,
(index) => Expanded(
child: Center(
child: Transform.rotate(
angle: -0.34,
child: Text(
waterInfo,
style: const TextStyle(
color: Color(0x10000000),
fontSize: 14,
decoration: TextDecoration.none,
),
),
),
),
),
),
),
),
),
),
);
}
}
是不是很簡單?
水印組件的核心就是這么簡單,大家可以在此基礎上,結合項目的需求進行拓展開發(fā)。
以上就是Flutter快速制作一個水印組件實例詳解的詳細內容,更多關于Flutter制作水印組件的資料請關注腳本之家其它相關文章!
相關文章
Android懸浮對話框(即點即關對話框)實現(xiàn)代碼
本文給大家介紹android懸浮對話框和即點即關閉對話框,本文介紹非常詳細,具有參考借鑒價值,感興趣的朋友一起學習吧2016-03-03
android使用OkHttp實現(xiàn)下載的進度監(jiān)聽和斷點續(xù)傳
本篇文章主要介紹了android使用OkHttp實現(xiàn)下載的進度監(jiān)聽和斷點續(xù)傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02
Android利用ConstraintLayout實現(xiàn)漂亮的動畫詳解
最近在無意中看到一篇關于ConstraintLayout的文章,ConstraintLayout是Android Studio 2.2中主要的新增功能之一,下面這篇文章主要給大家介紹了關于Android利用ConstraintLayout實現(xiàn)漂亮的動畫的相關資料,需要的朋友可以參考下。2017-05-05
Android編程實現(xiàn)長按Button按鈕連續(xù)響應功能示例
這篇文章主要介紹了Android編程實現(xiàn)長按Button按鈕連續(xù)響應功能,涉及Android自定義按鈕及事件響應操作相關技巧,需要的朋友可以參考下2017-01-01
詳解Android應用中使用TabHost組件進行布局的基本方法
這篇文章主要介紹了Android應用中使用TabHost組件進行布局的基本方法,不繼承TabActivity并以最基本的布局文件方式進行布局,需要的朋友可以參考下2016-04-04
Android實現(xiàn)ListView左右滑動刪除和編輯
這篇文章主要為大家詳細介紹了Android實現(xiàn)ListView左右滑動刪除和編輯的相關資料,感興趣的小伙伴們可以參考一下2016-05-05

