如何使用expo文件系统保存图库中的二维码

2024-04-12

我正在使用 expo 开发一个 React Native 项目。它包括创建一个二维码(我已经完成了),将二维码转换为图像,然后将其保存到图库。

我想将 QR 码转换为图像,然后将其保存到我的图库中或共享。在下面给出的代码中,在编译时会出现错误。

错误类型错误:未定义不是对象(评估“self.setState”)

我在这里粘贴我的 QrGenerator.js 文件: `

import React, { useState } from 'react';
import {
    Box, Heading, Center, Button,
    NativeBaseProvider, Text, Input, FormControl, Stack
} from "native-base";
import QRCode from 'react-native-qrcode-svg';

import * as FileSystem from 'expo-file-system';
import * as Sharing from 'expo-sharing';

export default function QrGenerator({ navigation }) {

    const [input, setInput] = useState("name");
    const [productQRref, setProductQRref] = useState('');


    const handleChange = (text) => {
        setInput(text);
    }

    const image_source = 'https://images.unsplash.com/photo-1508138221679-760a23a2285b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80'; // I want to convert this image into base64

    const share = () => {
        var self = this;
        self.setState({ loading: true })
        FileSystem.downloadAsync(
            image_source,
            FileSystem.documentDirectory + '.png'
        )
            .then(({ uri }) => {
                console.log(self.state.base64Code);
                FileSystem.writeAsStringAsync(
                    uri,
                    self.state.base64Code,
                    { 'encoding': FileSystem.EncodingType.Base64 }
                )
                    .then(() => {
                        this.setState({ loading: false })
                        Sharing.shareAsync(uri);
                    })

            })
            .catch(error => {
                console.error(error);
            });
    }

    return (
        <NativeBaseProvider>
            <Center mt="20">

                <Heading color="#0891b2">VCard Generator</Heading>

                <Box marginTop="5">

                    <QRCode value={input + '\n'} size={170} />

                </Box>
            </Center>

            <Box mt="5" width="90%" margin="auto" >

                <Text fontSize="md">Fill below parameters to generate your QR Code</Text>

                <FormControl>
                    <Stack>
                        <FormControl.Label >Text</FormControl.Label>
                        <Input placeholder='Enter Text' onChangeText={text => handleChange(text)} />
                    </Stack>
                </FormControl>

                <Button mt="5" onPress={share}>Download QR</Button>
                {/* <Text>{productQRref}</Text> */}
            </Box>
        </NativeBaseProvider>
    )
}

` 非常感谢您的帮助。


我已经使用 expo 文件系统完成了它。由于我使用 Expo 来创建我的应用程序,因此存在一些更改。

下面是生成 QR 码的代码,从 QR 码获取引用并将其更改为 svg 并在单击的按钮上启用共享选项。

import React, { useState, useRef } from 'react';
import {Box, Heading, Center, Button, NativeBaseProvider, Text, Input, FormControl, Stack} from "native-base";
import QRCode from 'react-native-qrcode-svg';
import * as FileSystem from 'expo-file-system;
import * as Sharing from 'expo-sharing';

export default function QrGenerator({ navigation }) {

    const [input, setInput] = useState("name");
    const [state, setState] = useState();
    let svg = useRef(null);
    let dataUrl = '';

    const handleChange = (text) => {
        setInput(text);
    }

    const getDataURL = () => {
        svg?.toDataURL(callback);
    };

    function callback(dataURL) {
        dataUrl = dataURL;
    }

    const image_source = 'https://images.unsplash.com/photo-1508138221679-760a23a2285b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80';

    const share = () => {
        getDataURL();
        setState({ loading: true })
        FileSystem.downloadAsync(
            image_source,
            FileSystem.documentDirectory + '.png'
        )
            .then(({ uri }) => {
                console.log(dataUrl);
                FileSystem.writeAsStringAsync(
                    uri,
                    dataUrl,
                    { 'encoding': FileSystem.EncodingType.Base64 }
                )
                    .then(() => {
                        setState({ loading: false })
                        Sharing.shareAsync(uri);
                    })

            })
            .catch(error => {
                console.error(error);
            });
    }

    return (
        <NativeBaseProvider>
            <Center mt="20">

                <Heading color="#0891b2">VCard Generator</Heading>

                <Box marginTop="5">

                    <QRCode value={input + '\n'} size={170} getRef={(c) => (svg = c)} backgroundColor="white" color="black" />

                </Box>
            </Center>

            <Box mt="5" width="90%" margin="auto" >

                <Text fontSize="md">Fill below parameters to generate your QR Code</Text>

                <FormControl>
                    <Stack>
                        <FormControl.Label >Text</FormControl.Label>
                        <Input placeholder='Enter Text' onChangeText={text => handleChange(text)} />
                    </Stack>
                </FormControl>

                <Button mt="5" onPress={share}>Share QR</Button>
            </Box>
        </NativeBaseProvider>
    )
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用expo文件系统保存图库中的二维码 的相关文章

随机推荐

  • 更新 ZipArchive 中的文件

    我有一个 ZipArchive 对象 其中包含我正在修改的 XML 文件 然后我想返回修改后的 ZipArchive 这是我的代码 var package File ReadAllBytes location of existing zip
  • Composer - vcs 上请求的包问题

    我分叉了https github com calebporzio onboard https github com calebporzio onboard to https github com mpjraaij onboard tree
  • 如何防止递归函数重新初始化累加变量?

    这个函数是用 JavaScript 编写的 但我认为这个概念可以用其他一些编程语言来实现 function uniteUnique arr let seenBefore the accumulating array for let item
  • 如何使用 Altair 显示百分比直方图而不是计数

    如何使用 Altair 和 Pandas 获取总数百分比直方图而不是计数直方图 我现在有这个 我通过这样做得到了 d age 12 32 43 54 32 32 12 dfTest pd DataFrame data d alt Chart
  • 如何降低 PickerView 中选择行的速度?

    我的目标是创建一台老虎机 其中的行一排一排地旋转 它们需要一排一排地停止旋转 然而 为了让它看起来漂亮 这些行需要旋转至少 3 秒 我认为 PickerView 是最好的选择 因为我不知道如何以不同的方式进行这项工作 当这是我的代码时 se
  • symfony 每个块都有无空间

    我如何用无空间包装每个块代码以从我的 twig html 中裁剪空白 例如现在我有 block content div class box clearfix clearall div class ct colcontainer div cl
  • 在 R 中模拟不同初始条件的 ODE 模型

    我有一个模型 我想生成随机初始条件 运行模型并保存输出 以便每个模拟都是重复的 但我很难解释和实现循环 而且我也知道它们并不总是在 R 中最好使用 所以我很挣扎 我的最终目标是在 10 个不同的随机初始条件下迭代模拟 并保存 ODE 的输出
  • MySQL中如何查询某列的变化次数

    我有一个表存储具有两个属性的项目 所以该表有三列 item id property 1 property 2 insert time 1 10 100 2012 08 24 00 00 01 1 11 100 2012 08 24 00 0
  • 如何从命令行运行单个 gradle 任务

    在我的项目中 我的 build gradle 中有几个任务 我希望这些任务在运行时是独立的 即我需要从命令行运行单个任务 但是命令 gradle taskA 将同时运行我不想要的taskA和taskB 如何阻止任务正在运行 这是我正在做的事
  • boost.test 与 CppUnit

    我已经使用 CppUnit 一段时间了 并且对此感到满意 随着我们使用 boost 库的越来越多的部分 我对 boost test 进行了简短的了解 现在我想知道是否应该在新项目中切换到 boost test 这里有人能告诉我这两个框架之间
  • 哪个队列与 requestAnimationFrame 关联?

    今天我在接受采访时被问到这个问题 我无法回答这个问题 面试官说有一个特殊的队列用于 requestAnimationFrame 回调 但我找不到任何这方面的信息 如果 rAF 有它自己的队列 那么为什么这个队列从未在任何地方被提及 当我们谈
  • 任何免费的 UPC/条形码 DB [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 Windows 身份验证可以从本地到服务器工作,但不能从服务器到服务器工作?

    我有两个网站 A and B A使用一个 APIB暴露 并且B需要 Windows 身份验证 两个站点都位于域中D API 通过以下方式使用HttpClient 以及当站点A在我的域帐户下本地运行 位于 DomainP 访问被授予 在这种情
  • Webdriver (c#) - 大概通过文本查找按钮

    我正在努力抓住按钮 有人能向我指出如何获取按钮句柄并使用 xpath 或 css 选择器单击它的正确方向吗 这是代码
  • 将字符串转换为静态字符串

    Swift 3 0 有没有办法获得StaticString键入一个String类型哪个复杂 示例 需要转换才能工作 let aString StaticString One part Second part 这是不可能的 因为StaticS
  • 在 Swift 中解码 JSON 中的 base64_encode 图像

    我有一个 mysql 数据库 其中包含一些图像 我从 php 文件接收数据 php result key image based64 encode resultArray key image 现在有了 Json 文件 我得到如下内容 Jso
  • 如何在CSS中绘制可配置的饼图

    从链接http www kylejlarson com blog 2011 how to create pie charts with css3 http www kylejlarson com blog 2011 how to creat
  • 切片 Pandas 时出现值错误

    我有一个 DataFrame 我想使用 string contains 方法 我相信当我阅读时我已经找到了如何做到这一点pandas dataframe 按部分字符串选择 https stackoverflow com questions
  • android:如何检查应用程序是否在后台运行2

    我有解决办法 public static boolean isApplicationSentToBackground final Context context ActivityManager am ActivityManager cont
  • 如何使用expo文件系统保存图库中的二维码

    我正在使用 expo 开发一个 React Native 项目 它包括创建一个二维码 我已经完成了 将二维码转换为图像 然后将其保存到图库 我想将 QR 码转换为图像 然后将其保存到我的图库中或共享 在下面给出的代码中 在编译时会出现错误