|
@@ -1,9 +1,14 @@
|
|
|
import 'dart:convert';
|
|
|
+import 'dart:io';
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
+import 'package:image_picker/image_picker.dart';
|
|
|
+import 'package:uuid/uuid.dart';
|
|
|
+import 'package:vnoteapp/architecture/storage/storage.dart';
|
|
|
import 'package:vnoteapp/components/appbar.dart';
|
|
|
import 'package:fis_common/logger/logger.dart';
|
|
|
+import 'package:vnoteapp/rpc.dart';
|
|
|
import 'dart:ui' as ui;
|
|
|
|
|
|
import 'controller.dart';
|
|
@@ -113,8 +118,8 @@ class SignatureBoardPage extends GetView<SignatureBoardController> {
|
|
|
),
|
|
|
),
|
|
|
onPressed: () async {
|
|
|
- final result = await canvasController.getImageBase64();
|
|
|
- Get.back(result: "data:image/png;base64,$result");
|
|
|
+ final result = await canvasController.getImageUrl();
|
|
|
+ Get.back(result: result);
|
|
|
},
|
|
|
child: const Text(
|
|
|
"保存",
|
|
@@ -153,6 +158,30 @@ class _SignatureBoardController extends ChangeNotifier {
|
|
|
notifyListeners();
|
|
|
}
|
|
|
|
|
|
+ XFile? convertBase64ToXFile(String base64Image) {
|
|
|
+ try {
|
|
|
+ final bytes = base64Decode(base64Image);
|
|
|
+ final tempDir = Directory.systemTemp;
|
|
|
+ final tempPath = tempDir.path;
|
|
|
+ final imageId = const Uuid().v4().replaceAll('-', '');
|
|
|
+
|
|
|
+ final filePath = '$tempPath/$imageId';
|
|
|
+
|
|
|
+ File(filePath).writeAsBytesSync(bytes);
|
|
|
+ return XFile(filePath);
|
|
|
+ } catch (e) {
|
|
|
+ print('Error converting base64 to XFile: $e');
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<String?> getImageUrl() async {
|
|
|
+ final imageBase64 = await getImageBase64();
|
|
|
+ final xFile = convertBase64ToXFile(imageBase64!);
|
|
|
+ String? url = await rpc.storage.upload(xFile!);
|
|
|
+ return url;
|
|
|
+ }
|
|
|
+
|
|
|
/// 获取图片base64字符串
|
|
|
Future<String?> getImageBase64() async {
|
|
|
try {
|
|
@@ -192,7 +221,7 @@ class _SignatureBoardController extends ChangeNotifier {
|
|
|
class _SignatureBoard extends StatefulWidget {
|
|
|
final _SignatureBoardController controller;
|
|
|
|
|
|
- const _SignatureBoard({super.key, required this.controller});
|
|
|
+ const _SignatureBoard({required this.controller});
|
|
|
@override
|
|
|
_SignatureBoardState createState() => _SignatureBoardState();
|
|
|
}
|