Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在Flatter中保存qrimage?_Flutter_Dart - Fatal编程技术网

Flutter 如何在Flatter中保存qrimage?

Flutter 如何在Flatter中保存qrimage?,flutter,dart,Flutter,Dart,我正在使用qr_颤振库生成qr码,但我需要将其保存为手机上的图像。现在我只有这个: QrImage( data: 'This QR code has an embedded image as well', version: QrVersions.auto, size: 320, gapless: false, emb

我正在使用qr_颤振库生成qr码,但我需要将其保存为手机上的图像。现在我只有这个:

 QrImage(
                  data: 'This QR code has an embedded image as well',
                  version: QrVersions.auto,
                  size: 320,
                  gapless: false,
                  embeddedImage: AssetImage('assets/images/logo.png'),
                  embeddedImageStyle: QrEmbeddedImageStyle(
                    size: Size(80, 80),
                  ),

希望这对你有所帮助

导入“包装:颤振/材料.省道”;
进口“包装:qr_颤振/qr_颤振.飞镖”;
导入“包:flifter/services.dart”;
导入“dart:async”;
导入“dart:键入的_数据”;
导入“dart:ui”;
导入“dart:io”;
导入“package:flatter/rendering.dart”;
导入“package:path_provider/path_provider.dart”;
类GenerateScreen扩展StatefulWidget{
@凌驾
State createState()=>GenerateScreenState();
}
类GenerateScreenState扩展了状态{
静态常数double _=50.0;
静态常数double _topSectionBottomPadding=20.0;
静态常数双上断面高度=50.0;
GlobalKey GlobalKey=新的GlobalKey();
String _dataString=“来自此QR的你好”;
字符串_inputErrorText;
最终文本编辑控制器_textController=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“二维码生成器”),
行动:[
图标按钮(
图标:图标(Icons.share),
按下按钮:\ U captureAndSharePng,
)
],
),
正文:_contentWidget(),
);
}
Future\u captureAndSharePng()异步{
试一试{
RenderRepaintBoundary=globalKey.currentContext.FindEnderObject();
var image=await boundary.toImage();
ByteData ByteData=await image.toByteData(格式:ImageByteFormat.png);
Uint8List pngBytes=byteData.buffer.asUint8List();
final tempDir=await getTemporaryDirectory();
final file=等待新文件('${tempDir.path}/image.png')。create();
wait file.writeAsBytes(PNGB);
final channel=const MethodChannel('channel:me.alfian.share/share');
channel.invokeMethod('shareFile','image.png');
}捕获(e){
打印(如toString());
}
}
_contentWidget(){
final bodyHeight=MediaQuery.of(context).size.height-MediaQuery.of(context).viewInsets.bottom;
返回容器(
颜色:常量颜色(0xFFFFFF),
子:列(
儿童:[
填充物(
填充:仅限常量边设置(
顶部:添加,
左:20.0,
右图:10.0,
底部:顶部和底部填充物,
),
子:容器(
高度:_高度,
孩子:排(
mainAxisSize:mainAxisSize.max,
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
扩大(
孩子:TextField(
控制器:_textController,
装饰:输入装饰(
hintText:“输入自定义消息”,
errorText:\u inputErrorText,
),
),
),
填充物(
填充:仅限常量边集(左:10.0),
孩子:扁平按钮(
儿童:文本(“提交”),
已按下:(){
设置状态(){
_数据字符串=_textController.text;
_inputErrorText=null;
});
},
),
)
],
),
),
),
扩大(
儿童:中心(
子:重新绘制边界(
关键:环球银行,
孩子:QrImage(
数据:_dataString,
尺寸:0.5*车身高度,
onError:(ex){
打印(“[QR]错误-$ex”);
设置状态(){
_inputErrorText=“错误!可能您的输入值太长?”;
});
},
),
),
),
),
],
),
);
}
}

此代码是本文的一部分

我首先解决了添加此库的问题: esys_颤振_共享:

并对此进行修改:

Future\u captureAndSharePng()异步{
试一试{
渲染边界=
globalKey.currentContext.FindEnderObject();
var image=await boundary.toImage();
ByteData ByteData=await image.toByteData(格式:ImageByteFormat.png);
Uint8List pngBytes=byteData.buffer.asUint8List();
final tempDir=await getTemporaryDirectory();
final file=等待新文件('${tempDir.path}/image.png')。create();
wait file.writeAsBytes(PNGB);
等待Share.file(_dataString,'$_dataString.png',pngBytes,'image/png');
}捕获(e){
打印(如toString());
}
}
QrImage(
背景颜色:Colors.white,
前底色:颜色。黑色,
数据:_dataString,
尺寸:0.5*车身高度,
onError:(ex){
打印(“[QR]错误-$ex”);
设置状态(){
_inputErrorText=“错误!可能您的输入值太长?”;
});
},
),

感谢您的响应,但当我点击共享图标时,出现了此错误:在channel:me.alfian.share频道上找不到方法shareFile的实现/share@DavidAsturizagaOrias您必须在本机端定义shareFile方法,如Java或Kotlin。