Flutter 页面中添加水印、自定义水印

最近开发手机APP 使用 Fltter

由于需要使用水印的功能,但是第一次接触Flutter ,就想着能不能在网上找到现成的使用,结果全是一群复制粘贴的,还卵用没有,不过由于我太机制,直接去官方的 pub get 找到一个插件。嘿嘿。 pub get
搜到了插件的引入。使用方式
使用方式文档
原作者的 github 地址 水印功能 github

不过这个包的依赖需要限定dart 的版本,所以我就把作者的源代码拉到本地参考作者的方式自己定义了一个水印的工具类,代码呈上

/**
 * 水印样式
 * rowCount: 当前屏幕宽度中 展示多少列水印
 * columnCount: 当前屏幕高度中,展示多少行水印
 * watermark: 水印展示的文字
 * textStyle: 文字的样式
 */
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);

  @override
  Widget 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;
  }
}


/**
 * 水印工具类 单例 instance
 * 使用方式:
 *
 * 获取实例: WatarMarkInstance instance = WatarMarkInstance();
 * 添加水印: instance.addWatermark(context, "320321199708134818");
 * 删除水印: instance.removeWatermark();
 *
 */
class WatarMarkInstance {

  static WatarMarkInstance _instance;
  factory WatarMarkInstance() {
    if (_instance == null) {
      _instance = WatarMarkInstance.private();
    }
    return _instance;
  }

  WatarMarkInstance.private();

  OverlayEntry _overlayEntry;

  void addWatermark(BuildContext context, String watermark,
      {int rowCount = 2, int columnCount = 8, 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: 14,
                  decoration: TextDecoration.none),
        ));
    overlayState.insert(_overlayEntry);
    // return await _methodChannel.invokeMethod<void>("addWatermark", ['我是水印']);
  }


  void removeWatermark() async {
    if (_overlayEntry != null) {
      _overlayEntry.remove();
      _overlayEntry = null;
    }
  }
}

主要参数都已经放在上面了。小伙伴可以自行参考。 再次感谢一下原作者 [哈哈哈]

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flutter QuillEditor 是一个使用 Quill 编辑器的 Flutter 组件,Quill 编辑器是一个富文本编辑器库。要添加定义的标签,需要执行以下步骤: 1. 首先,你需要安装 Quill 编辑器库,只需要在 pubspec.yaml 文件的 dependencies 添加以下行: ``` dependencies: quill: ^2.0.0 ``` 2. 在 Quill Editor ,你可以使用 Delta 类来表示富文本。你可以使用 Delta 类的 insert 方法来添加定义标签: ``` final Delta delta = Delta() ..insert('This is normal text') ..insert('This is custom tag', {'custom-tag': true}) ..insert('This is more normal text'); ``` 在上面的代码,通过传递一个 Map 对象,使用 insert 方法添加了一个具有自定义标签的文本。 3. 在 QuillEditor ,要显示 Delta,请将其传递给 DeltaEditor 组件: ``` QuillEditor( controller: _controller, readOnly: false, // Optional expands: false, // Optional padding: EdgeInsets.zero, // Optional customEditors: [ const HrQuillEditor(), ], autoFocus: false, // Optional ), ``` 在上面的 QuillEditor 示例添加了一个自定义组件 HrQuillEditor。 ``` class HrQuillEditor extends StatelessWidget implements CustomQuillEditor { const HrQuillEditor(); @override Widget build(BuildContext context, QuillController controller) { return Container( color: Colors.grey[300], height: 1, margin: EdgeInsets.symmetric(vertical: 16), ); } @override bool isBlock() { return true; } @override bool isContinuous(Map<String, dynamic> attributes) { final String tag = attributes['tag'] as String?; return tag == 'hr'; } @override Delta insert(BuildContext context, QuillController controller) { return Delta()..insert('\n', {'tag': 'hr'}); } } ``` 在上述示例代码,HrQuillEditor 是一个继承自 StatelessWidget 和 CustomQuillEditor 的自定义组件,并且实现了 build、isBlock、isContinuous 和 insert 方法。 * build 方法返回一个带有一条线的容器。 * isBlock 方法返回 true,因为 hr 标签通常被认为是一个块级元素。 * isContinuous 方法在 Delta 插入一个新的行时,可以告诉 QuillEditor 是否应该添加一个连续的 hr 标签。 * insert 方法定义了将 Delta 的 hr 标签插入 QuillEditor 的逻辑。 4. 通过这些步骤,你可以将自定义标签添加到 QuillEditor 。 ``` final Delta delta = Delta() ..insert('This is normal text') ..insert('\n', {'tag': 'hr'}) ..insert('This is more normal text'); _controller = QuillController( document: Document.fromDelta(delta), selection: const TextSelection.collapsed(offset: 0), ); ``` 在上述示例代码,使用了 Delta 类的 insert 方法,将 hr 标签插入 Delta ,然后将其添加到 QuillController 。 以上是向 QuillEditor 添加定义标签的基本步骤。虽然添加定义标签有些复杂,但一旦你弄清了它的工作方式,就会发现 QuillEditor 可以非常灵活地满足你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值