【Flutter】二维码生成,Widget转图片,图片保存相册

2023-10-31

1、生成二维码

使用qr_flutter:https://pub.dev/packages/qr_flutter

    Container(
      padding: EdgeInsets.only(
          left: MediaQuery.of(context).size.width / 5,
          right: MediaQuery.of(context).size.width / 5),
      child: QrImage(
        data: 'This QR code has an embedded image as well',
        version: QrVersions.auto,
        gapless: false,
        embeddedImage: AssetImage('assets/images/demo_head_f02.jpg'),
        embeddedImageStyle: QrEmbeddedImageStyle(
          size: Size(80, 80),
        ),
      ),
    )

2、Widget转图片


class WidgetToImage extends StatefulWidget {
  WidgetToImage({Key key}) : super(key: key);

  @override
  _WidgetToImageState createState() => _WidgetToImageState();
}

class _WidgetToImageState extends State<WidgetToImage> {
  GlobalKey _globalKey = new GlobalKey();

  @override
  Widget build(BuildContext context) {
    return RepaintBoundary(
        key: _globalKey,
        child: Column(children: [
          Container(
            margin: EdgeInsets.only(top: 10, bottom: 20),
            child: Text(
              "味多美A店会员注册",
              style: Theme.of(context)
                  .textTheme
                  .headline2
                  .copyWith(fontSize: 20, fontWeight: FontWeight.w500),
            ),
          ),
          Container(
            padding: EdgeInsets.only(
                left: MediaQuery.of(context).size.width / 5,
                right: MediaQuery.of(context).size.width / 5),
            child: QrImage(
              data: 'This QR code has an embedded image as well',
              version: QrVersions.auto,
              gapless: false,
              embeddedImage: AssetImage('assets/images/demo_head_f02.jpg'),
              embeddedImageStyle: QrEmbeddedImageStyle(
                size: Size(80, 80),
              ),
            ),
          ),
        ]));
  }

  Future<Uint8List> _capturePng() async {
    try {
      print('inside');
      RenderRepaintBoundary boundary =
          _globalKey.currentContext.findRenderObject();
      ui.Image image = await boundary.toImage(pixelRatio: 3.0);
      ByteData byteData =
          await image.toByteData(format: ui.ImageByteFormat.png);
      Uint8List pngBytes = byteData.buffer.asUint8List();
      return pngBytes;
    } catch (e) {
      return Uint8List(10);
    }
  }
}

3、图片保存至相册

图片保存至相册:https://blog.csdn.net/tianzhilan0/article/details/108278021

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Flutter】二维码生成,Widget转图片,图片保存相册 的相关文章

随机推荐

  • STL : 单向链表 Forward_list 与 双向链表 List

    目录 Forward list Member functions List Elements access Modifiers Operations Observes Forward list include using namespace
  • Java循环运行时暂停一段时间

    原文链接 GitHub项目地址 https github com Snowstorm0 learn sleep Gitee项目地址 https gitee com Snowstorm0 learn sleep Java 在运行 for 循环
  • DirectX9中Pixel Coordinates System的一个怪异特性

    http drilian com 2008 11 25 understanding half pixel and half texel offsets 这个文章解释的很详细 他的blog里面也有很多的文章 值得一看哦 总结下来就是这样 在D
  • Unity Resource文件基础操作(一)

    Unity Resource文件的基本概念 本篇文章主要讲解Resource文件在Unity场景中的使用以及他的基本概念 文章目录 Unity Resource文件的基本概念 前言 一 Resource文件是什么鬼 二 Resource常用
  • 存储管理系统课程设计——C语言实现请求页式存储管理模拟系统

    分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页加以编号 从0开始 如第0页 第1页等 相应地 也把内存空间分成与页面相同大小的若干个存储块 称为 物理 块或页框 frame 也同样为它们加以编号 如0
  • disabled和readonly的区别是什么

    disabled和readonly的区别是什么 这两个属性有类似之处 但是区别也是巨大的 之所以说类似 是因为这两个属性好像都貌似能够将指定的元素设置为 不可用 状态 下面就简单介绍一下它们两个的区别 希望能够给大家带来一定的帮助 一 作用
  • Easyexcel导入导出List类型数据报错:Can not find ‘Converter’ support class Li,的解决方法

    目录 问题分析 解决方法 手动编写List类型转换类 问题分析 Easyexcel默认是不支持List类型数据自动转换的 因此当实体类传递数据为List类型时需要手动编写转换类来实现数据转换 否则会报错 Can not find Conve
  • win11桌面图标无法移动(一次到位,必解决)

    按照步骤做 必解决 笔记本桌面图标无法移动我直接气到炸了 怎么弄都弄不好 右键单击自动排列也取消了 多次按Esc键也按了就是没效果 在终端输入了gepdit msc指令也显示找不见 就很奔溃 最后查了好久好久终于给弄好了 具体步骤 一 wi
  • uva 1601 The Morning after Halloween

    题目 The Morning after Halloween 题意 有n个用小写字母表示的鬼和一张地图 每个鬼都要移动到对应的大写字母 两个鬼的位置不能在一次移动中交换 问最少步数 思路 bfs 1 先将地图用图的方法表示 即在每一个空白
  • Simcenter Amesim 2020中文版

    教程 1 下载安装包并解压缩 将LMS RLM Server文件夹复制到C盘目录下 以管理员身份运行server install bat启动服务 资源地址 imcenter Amesim 2020中文版 2 创建系统环境变量 变量名 LMS
  • js删除数组中某一项或几项的几种方法

    1 js中的splice方法 splice index len item 注释 该方法会改变原始数组 splice有3个参数 它也可以用来替换 删除 添加数组内某一个或者几个值 index 数组开始下标len 替换 删除的长度item 替换
  • 【Linux】】Linux权限的理解

    一 Linux中的用户 Linux中分为两种用户 分别为 1 root 用户 也叫超级用户 它的权限非常高 不受其他权限的约束 也就是可以为所欲为 2 普通用户 除了root用户外 都是普通用户 受权限的约束 我们可以输入命令 ls hom
  • Vue.js学习路径 & Web前端工程知识体系

    ECMAScript 6 ECMAScript 6 0 简称 ES6 是 JavaScript 语言的下一代标准 已经在 2015 年 6 月正式发布了 它的目标 是使得 JavaScript 语言可以用来编写复杂的大型应用程序 成为企业级
  • 类和函数模板特例化

    引入原因 编写单一的模板 它能适应大众化 使每种类型都具有相同的功能 但对于某种特定类型 如果要实现其特有的功能 单一模板就无法做到 这时就需要模板特例化 定义 是对单一模板提供的一个特殊实例 它将一个或多个模板参数绑定到特定的类型或值上
  • THUDM/chatglm-6b-int4运行缺少gcc和openmp的问题

    在运行ChatGLM 6B的时候 本人是小白 遇到这几个问题 解决方法分享给大家 1 缺少gcc的问题 参考 GCC编译器的安装教程 Windows环境 gcc安装教程 nhyltt的博客 CSDN博客 2 缺少openmp的问题 在这里下
  • PHP中的错误处理、异常处理机制

    http www cnblogs com cnbeir archive 2012 05 05 2484635 html 在编写php程序时 错误处理是一个重要的部分 如果程序中缺少错误检测代码 那么看上去很不专业 也为安全风险敞开了大门 例
  • Qt子类窗体和父类窗体的数据传递

    1 全局变量 extern 2 静态成员函数 static 3 信号槽 信号槽层层传递调用 爷爷类 gt 父类 gt 子类 但是父类的窗体如果是hide或者close是不能实现子类的信号传递给父类 在此处就已经传递不下去了 父类再传递给爷爷
  • gtest初识 - googletest(一)

    gtest是Google开发的一个开源单元测试框架 代码提供丰富的注释和实例 参考实际用例可以很快上手基本单元测试 丰富的代码注释能够让有兴趣的开发者深入了解gtest的代码结构并做部分针对性的二次开发 gtest主要针对c c 提供了针对
  • input属性placeholder在iOS中显示不完整的解决方法

    在一些高版本的ISO上设置placeholder显示的字体大小的时候 有时候会被遮挡掉一部分 出现原因 input 里面的字体大小小于placeholder的字体大小 解决方法 设置input字体大于placeholder的字体 input
  • 【Flutter】二维码生成,Widget转图片,图片保存相册

    文章目录 1 生成二维码 2 Widget转图片 3 图片保存至相册 1 生成二维码 使用qr flutter https pub dev packages qr flutter Container padding EdgeInsets o