From 235ced9991d85241d9bc07bffb6e47dfcefa7d3e Mon Sep 17 00:00:00 2001 From: Feodor Fitsner Date: Fri, 6 Jan 2023 14:39:24 -0800 Subject: [PATCH] Loading images from a file Close #651 --- package/lib/src/controls/image.dart | 26 +++++++++++++++++++++++++ package/lib/src/controls/image_io.dart | 20 +++++++++++++++++++ package/lib/src/controls/image_web.dart | 13 +++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 package/lib/src/controls/image_io.dart create mode 100644 package/lib/src/controls/image_web.dart diff --git a/package/lib/src/controls/image.dart b/package/lib/src/controls/image.dart index e64c69739..ed9b31c87 100644 --- a/package/lib/src/controls/image.dart +++ b/package/lib/src/controls/image.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:io' as io; import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; @@ -13,9 +14,12 @@ import '../utils/collections.dart'; import '../utils/colors.dart'; import '../utils/images.dart'; import '../utils/uri.dart'; +import '../utils/desktop.dart'; import 'create_control.dart'; import 'error.dart'; +import 'image_io.dart' if (dart.library.js) "image_web.dart"; + class ImageControl extends StatelessWidget { final Control? parent; final Control control; @@ -88,6 +92,28 @@ class ImageControl extends StatelessWidget { color: color, colorBlendMode: colorBlendMode ?? BlendMode.srcIn, semanticsLabel: semanticsLabel); + } else if (isDesktop() && io.File(src).existsSync()) { + // from File + if (src.endsWith(".svg")) { + image = getSvgPictureFromFile( + src: src, + width: width, + height: height, + fit: fit ?? BoxFit.contain, + color: color, + blendMode: colorBlendMode ?? BlendMode.srcIn, + semanticsLabel: semanticsLabel); + } else { + image = Image.file(io.File(src), + width: width, + height: height, + repeat: repeat, + fit: fit, + color: color, + gaplessPlayback: gaplessPlayback ?? false, + colorBlendMode: colorBlendMode, + semanticLabel: semanticsLabel); + } } else { var uri = Uri.parse(src); var imgSrc = diff --git a/package/lib/src/controls/image_io.dart b/package/lib/src/controls/image_io.dart new file mode 100644 index 000000000..54d5222ae --- /dev/null +++ b/package/lib/src/controls/image_io.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'dart:io' as io; + +SvgPicture getSvgPictureFromFile( + {required String src, + required double? width, + required double? height, + required BoxFit fit, + required Color? color, + required BlendMode blendMode, + required String? semanticsLabel}) { + return SvgPicture.file(io.File(src), + width: width, + height: height, + fit: fit, + color: color, + colorBlendMode: blendMode, + semanticsLabel: semanticsLabel); +} diff --git a/package/lib/src/controls/image_web.dart b/package/lib/src/controls/image_web.dart new file mode 100644 index 000000000..5670f0b4c --- /dev/null +++ b/package/lib/src/controls/image_web.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; + +SvgPicture getSvgPictureFromFile( + {required String src, + required double? width, + required double? height, + required BoxFit fit, + required Color? color, + required BlendMode blendMode, + required String? semanticsLabel}) { + return SvgPicture.string(""); +}