mind_util.dart 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'dart:io';
  2. import 'dart:typed_data';
  3. import 'dart:ui';
  4. import 'package:dsbridge_flutter/dsbridge_flutter.dart';
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:flutter_svg/svg.dart';
  7. import 'package:path_provider/path_provider.dart';
  8. import 'package:webview_flutter/webview_flutter.dart';
  9. import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';
  10. import 'package:xml/xml.dart' as xml;
  11. class MindUtil {
  12. MindUtil._();
  13. static const String functionToJsUpdateMind = "updateValue";
  14. static const String functionToJsExport = "export";
  15. static DWebViewController createMindWebViewController() {
  16. late final PlatformWebViewControllerCreationParams params;
  17. if (WebViewPlatform.instance is WebKitWebViewPlatform) {
  18. params = WebKitWebViewControllerCreationParams(
  19. allowsInlineMediaPlayback: true,
  20. mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
  21. );
  22. } else {
  23. params = const PlatformWebViewControllerCreationParams();
  24. }
  25. DWebViewController webViewController =
  26. DWebViewController.fromPlatformCreationParams(params);
  27. webViewController.setJavaScriptMode(JavaScriptMode.unrestricted);
  28. webViewController.enableZoom(false);
  29. return webViewController;
  30. }
  31. static Future<void> convertToFile(Uint8List bytes, String fileName) async {
  32. final directory = await getTemporaryDirectory();
  33. final file = File('${directory.path}/$fileName');
  34. await file.writeAsBytes(bytes);
  35. }
  36. static Future<void> convertMapDataToToFile(
  37. dynamic data, String fileName) async {
  38. Uint8List? bytes = convertMapToUint8List(data);
  39. if (bytes == null) {
  40. return;
  41. }
  42. final directory = await getTemporaryDirectory();
  43. final file = File('${directory.path}/$fileName');
  44. await file.writeAsBytes(bytes);
  45. }
  46. static Uint8List? convertMapToUint8List(dynamic map) {
  47. if (map is Map) {
  48. final value = map.values.toList().cast<int>();
  49. return Uint8List.fromList(value);
  50. }
  51. return null;
  52. }
  53. static Future<Uint8List> svgToPng(
  54. String svgString, BuildContext context) async {
  55. final pictureInfo =
  56. await vg.loadPicture(SvgStringLoader(svgString), context);
  57. final image = await pictureInfo.picture.toImage(100, 100);
  58. final byteData = await image.toByteData(format: ImageByteFormat.png);
  59. if (byteData == null) {
  60. throw Exception('Unable to convert SVG to PNG');
  61. }
  62. final pngBytes = byteData.buffer.asUint8List();
  63. return pngBytes;
  64. }
  65. static Future<Uint8List?> svgToPng2(String svgString) async {
  66. // first parse svgString to get width and height using xml plugin
  67. final document = xml.XmlDocument.parse(svgString);
  68. final svgElement = document.rootElement;
  69. final widthAttribute =
  70. svgElement.getAttribute('width')!.replaceAll("px", "");
  71. final heightAttribute =
  72. svgElement.getAttribute('height')!.replaceAll("px", "");
  73. final svgDrawableRoot =
  74. await vg.loadPicture(SvgStringLoader(svgString), null);
  75. // same thing
  76. // Convert to ui.Image. toImage() takes width and height as parameters
  77. // you need to find the best size to suit your needs and take into account the screen DPI
  78. final image = await svgDrawableRoot.picture.toImage(
  79. int.parse(widthAttribute.toString()),
  80. int.parse(heightAttribute.toString()));
  81. ByteData? bytes = await image.toByteData(format: ImageByteFormat.png);
  82. return bytes?.buffer.asUint8List();
  83. }
  84. }