Flutter 水印示例

import 'package:flutter/material.dart';
import 'package:flutter_android/component/waterMarker/WatermarkWidget.dart';

class TextWaterMarkPainterWidget extends StatefulWidget {
  const TextWaterMarkPainterWidget({Key? key, required this.title})
      : super(key: key);

  final String title;

  @override
  State<TextWaterMarkPainterWidget> createState() {
    return TextWaterMarkPainterState();
  }
}

class TextWaterMarkPainterState extends State<TextWaterMarkPainterWidget> {

  OverlayEntry? overlayEntry;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            ElevatedButton(
              child: const Padding(
                padding: EdgeInsets.all(10.0),
                child: Text("添加水印"),
              ),
              onPressed: () {
                addWaterMarkter(context, "仅供参考,禁止传播", 2, 10);
              },
            ),

            ElevatedButton(
              child: const Padding(
                padding: EdgeInsets.all(10.0),
                child: Text("移除水印"),
              ),
              onPressed: () {
                removeWatermark();
              },
            ),
          ],
        ),
      ),
    );
  }

  //默认水印
  void addWaterMarkter(BuildContext context, String string, int row, int column) async {

    OverlayState? overlayState = Overlay.of(context);
    overlayEntry = OverlayEntry(
        builder: (context) => WatermarkWidget(
          rowCount: row,
          columnCount: column,
          text: string,
          textStyle:
              const TextStyle(
                  color: Color(0x09000000),
                  fontSize: 16,
                  decoration: TextDecoration.none),
        ));
    overlayState?.insert(overlayEntry!);
  }

  /// 移除水印
  void removeWatermark() async {
    if (overlayEntry != null) {
      overlayEntry!.remove();
      overlayEntry = null;
    }
  }
}
import 'dart:math';
import 'package:flutter/cupertino.dart';

class WatermarkWidget extends StatelessWidget{
  final int rowCount;
  final int columnCount;
  final String text;
  final TextStyle textStyle;

  const WatermarkWidget({
    Key? key,
    required this.rowCount,
    required this.columnCount,
    required this.text,
    required this.textStyle,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return IgnorePointer(
      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;
  }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiaopihair123/article/details/124965647