使用到的庫(kù)(當(dāng)前版本):
//生成二維碼的庫(kù)岛琼,可增加logo
qr_flutter: ^4.0.0
//保存圖片用到的庫(kù)
permission_handler: ^8.1.3
image_gallery_saver: ^1.6.9
path_provider: ^1.6.24
//分享庫(kù)
share: ^2.0.4
引用到文件:
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:share/share.dart';
import 'dart:ui' as ui;
生成圖片文件方法
Future<File> _shareUiImage(ui.Image uiImage) async {
ByteData? finalByteData = await uiImage.toByteData(format: ui.ImageByteFormat.png);
Uint8List finalPngBytes = finalByteData!.buffer.asUint8List();
final document = await getApplicationDocumentsDirectory();
final dir = Directory(document.path +'/Yelena_QR.png');
final imageFile = File(dir.path);
await imageFile.writeAsBytes(finalPngBytes);
return imageFile;
}
生成圖片API
GlobalKey _globalKey = GlobalKey();
RepaintBoundary(
key: globalKey,
child: Container(需要截圖的部分)
)
生成圖片
GlobalKey _globalKey = GlobalKey();
//注意??這里有變更 增加強(qiáng)轉(zhuǎn)底循,舊版API無(wú)法使用
RenderRepaintBoundary? boundary = _globalKey.currentContext?.findRenderObject()! as RenderRepaintBoundary;
ui.Image image = await boundary.toImage();
//*******************生成二維碼圖片*********************
qr_flutter: ^4.0.0 //此版本調(diào)用的API優(yōu)化的比較簡(jiǎn)單了巢株,
不帶logo
QrImage(
data: 'This is a simple QR code',
version: QrVersions.auto,
size: 320,
gapless: false,
)
帶logo
QrImage(
data: 'This QR code has an embedded image as well',
version: QrVersions.auto,
size: 320,
gapless: false,
embeddedImage: AssetImage('assets/images/my_embedded_image.png'),
embeddedImageStyle: QrEmbeddedImageStyle(
size: Size(80, 80),
),
)
保存圖片方法
//檢查是否有存儲(chǔ)權(quán)限
var status = await Permission.storage.status;
if (!status.isGranted) {
status = await Permission.storage.request();
print(status);
return;
}
RenderRepaintBoundary? boundary = _globalKey.currentContext?.findRenderObject()! as RenderRepaintBoundary;
ui.Image image = await boundary.toImage();
ByteData? byteData = await image.toByteData(format: ui.ImageByteFormat.png);
final result = await ImageGallerySaver.saveImage(byteData!.buffer.asUint8List(),quality:100,name: 'boss_Image'+DateTime.now().toString() );
if (result['isSuccess'].toString()=='true') {
print('保存成功');
}else{
print('保存失敗');
}
//*******************分享圖片方法*********************
RenderRepaintBoundary? boundary = _globalKey.currentContext?.findRenderObject()! as RenderRepaintBoundary;
ui.Image image = await boundary.toImage();
File imageFile = await _shareUiImage(image);
Share.shareFiles([imageFile.path]);
//注意一、RenderRepaintBoundary的變化
//注意二熙涤、import 'dart:ui' show lerpDouble;
Error: Not found: 'dart:ui'
檢查文件名是否重復(fù)
****日常備注小本本***不知是否有幫助到您******不管有無(wú)均希望能點(diǎn)個(gè)贊*********謝謝**************