diff options
author | Tomi Leppänen <tomi.leppanen@seafarix.com> | 2024-08-19 14:13:15 +0300 |
---|---|---|
committer | Tomi Leppanen <tomi.leppanen@seafarix.com> | 2024-11-11 12:59:02 +0000 |
commit | 9fcc67f7c92d2db9b89a1139533f8825a3834b2a (patch) | |
tree | 7111a7cd85fbf80a357c5c1653a523d5530e08fc | |
parent | 87c4e34f16555c70d590a56b522366599209b991 (diff) |
Add support for SVG and PNG application icons in Apps. Assets should
continue to work the same way as before. Applications that provide their
own icons can use either SVG or PNG icons.
Bug-AGL: SPEC-5268
Change-Id: I99b4997510e3eb9380afb43f81bcd64efdc92c8f
Signed-off-by: Tomi Leppänen <tomi.leppanen@seafarix.com>
-rw-r--r-- | lib/data/data_providers/app_launcher.dart | 2 | ||||
-rw-r--r-- | lib/presentation/screens/apps/widgets/app_button.dart | 28 | ||||
-rw-r--r-- | pubspec.lock | 8 | ||||
-rw-r--r-- | pubspec.yaml | 1 |
4 files changed, 36 insertions, 3 deletions
diff --git a/lib/data/data_providers/app_launcher.dart b/lib/data/data_providers/app_launcher.dart index 917dd21..693ce29 100644 --- a/lib/data/data_providers/app_launcher.dart +++ b/lib/data/data_providers/app_launcher.dart @@ -58,7 +58,7 @@ class AppLauncher { debugPrint("$info"); // Existing icons are currently not usable, so leave blank for now apps.add(AppLauncherInfo( - id: info.id, name: info.name, icon: "", internal: false)); + id: info.id, name: info.name, icon: info.iconPath, internal: false)); } apps.sort((a, b) => a.name.compareTo(b.name)); diff --git a/lib/presentation/screens/apps/widgets/app_button.dart b/lib/presentation/screens/apps/widgets/app_button.dart index 2e016ca..336e1e2 100644 --- a/lib/presentation/screens/apps/widgets/app_button.dart +++ b/lib/presentation/screens/apps/widgets/app_button.dart @@ -1,5 +1,6 @@ import 'package:flutter_ics_homescreen/core/utils/helpers.dart'; import 'package:flutter_ics_homescreen/export.dart'; +import 'package:mime/mime.dart'; class AppButton extends StatefulWidget { const AppButton( @@ -38,8 +39,31 @@ class _AppButtonState extends State<AppButton> { Padding( padding: const EdgeInsets.only( left: 10, right: 10, top: 6, bottom: 6), - child: SvgPicture.asset( - "assets/${widget.image}", + child: Builder( + builder: (BuildContext context) { + var filepath = widget.image; + final file = File(filepath); + if (file.existsSync()) { + final String? mimeType = lookupMimeType(filepath); + if (mimeType == 'image/png') { + return Image.file( + file, + width: 160, + height: 160, + fit: BoxFit.contain, + ); + } else if (mimeType == 'image/svg+xml') { + return SvgPicture.file( + file, + width: 160, + height: 160, + fit: BoxFit.contain, + ); + } + filepath = "app-generic.svg"; + } + return SvgPicture.asset("assets/${filepath}"); + }, ), ), Text( diff --git a/pubspec.lock b/pubspec.lock index f256dbb..51c7761 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -380,6 +380,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.15.0" + mime: + dependency: "direct main" + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" nested: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 1304544..b23d600 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,6 +57,7 @@ dependencies: flutter_calendar_carousel: path: ./packages/flutter_calendar_carousel dart_mpd: ^0.4.1 + mime: ^2.0.0 dev_dependencies: flutter_test: |