From 064a602c519e276c5561f1344c6e5dc00d91530c Mon Sep 17 00:00:00 2001 From: Prateek SU Date: Mon, 25 Oct 2021 00:17:15 +0530 Subject: [PATCH] Replace adwaita_icons with lucide_icon - Now window buttons are following native placements --- lib/main.dart | 21 ++-- lib/screens/app.dart | 8 +- lib/screens/browse_view.dart | 199 +++++++++---------------------- lib/screens/downloads_view.dart | 22 ++-- lib/screens/installed_view.dart | 9 +- lib/utils/constants.dart | 32 ++--- lib/widgets/carousel_arrow.dart | 22 ++-- lib/widgets/customdialog.dart | 5 + lib/widgets/download_button.dart | 16 +-- lib/widgets/grid_of_apps.dart | 100 ++++------------ lib/widgets/pool_app.dart | 4 +- lib/widgets/prefs_dialog.dart | 8 +- pubspec.lock | 20 ++-- pubspec.yaml | 4 +- 14 files changed, 168 insertions(+), 302 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 43e1717..cfbe571 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,9 +7,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter/foundation.dart'; -import 'package:adwaita_icons/adwaita_icons.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:lucide_icons/lucide_icons.dart'; import 'package:bitsdojo_window/bitsdojo_window.dart'; import 'utils/utils.dart'; @@ -193,9 +193,9 @@ class _HomePageState extends State { : null, leading: [ GtkHeaderButton( - icon: AdwaitaIcon( - !toggleSearch.value ? AdwaitaIcons.system_search : AdwaitaIcons.go_previous, - size: 17, + icon: Icon( + !toggleSearch.value ? LucideIcons.search : LucideIcons.chevronLeft, + size: 16, ), onPressed: switchSearchBar, ), @@ -276,7 +276,7 @@ class _HomePageState extends State { Builder(builder: (context) { return GtkHeaderButton( isActive: isSidebarActive.value, - icon: const AdwaitaIcon(AdwaitaIcons.sidebar_toggle_left), + icon: const Icon(LucideIcons.sidebar, size: 17), onPressed: () { if (context.width < mobileWidth) { Scaffold.of(context).openDrawer(); @@ -348,15 +348,15 @@ class _HomePageState extends State { children: [ GtkSidebarItem( label: "Explore", - leading: const AdwaitaIcon(AdwaitaIcons.explore2, size: 17), + leading: const Icon(LucideIcons.trendingUp, size: 17), ), for (var category in (categories ?? {}).entries.toList().asMap().entries) GtkSidebarItem( label: category.value.key, - leading: AdwaitaIcon( + leading: Icon( categoryIcons.containsKey(category.value.key) ? categoryIcons[category.value.key]! - : AdwaitaIcons.question, + : LucideIcons.helpCircle, size: 19, ), ), @@ -385,7 +385,10 @@ class _HomePageState extends State { value: index, onChanged: onChanged, items: items, - icon: const Icon(Icons.arrow_drop_down), + icon: const Icon( + LucideIcons.chevronsUpDown, + size: 16, + ), underline: const SizedBox(), ), ), diff --git a/lib/screens/app.dart b/lib/screens/app.dart index fa77b10..b4468e5 100644 --- a/lib/screens/app.dart +++ b/lib/screens/app.dart @@ -5,7 +5,6 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:carousel_slider/carousel_slider.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:simple_html_css/simple_html_css.dart'; import 'package:cached_network_image/cached_network_image.dart'; @@ -42,9 +41,7 @@ class AppPage extends HookConsumerWidget { imageUrl: app.iconUrl!, fit: BoxFit.cover, width: size, - placeholder: (c, b) => Center( - child: SpinKitRipple(color: context.textTheme.bodyText1!.color), - ), + placeholder: (c, b) => const SizedBox(), errorWidget: (c, w, i) => brokenImageWidget, ) : SvgPicture.network(app.iconUrl!, width: size) @@ -159,8 +156,7 @@ class AppPage extends HookConsumerWidget { ? SvgPicture.network(screenUrl) : CachedNetworkImage( imageUrl: screenUrl, - placeholder: (c, b) => - Center(child: SpinKitRipple(color: context.textTheme.bodyText1!.color)), + placeholder: (c, b) => const SizedBox(), errorWidget: (c, w, i) => brokenImageWidget, ) : Container(), diff --git a/lib/screens/browse_view.dart b/lib/screens/browse_view.dart index 8f12e0f..9855712 100644 --- a/lib/screens/browse_view.dart +++ b/lib/screens/browse_view.dart @@ -3,13 +3,12 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:adwaita_icons/adwaita_icons.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:appimagepool/screens/screens.dart'; import 'package:appimagepool/widgets/widgets.dart'; +import 'package:lucide_icons/lucide_icons.dart'; import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter_spinkit/flutter_spinkit.dart'; -import 'package:carousel_slider/carousel_controller.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:appimagepool/utils/utils.dart'; @@ -45,8 +44,7 @@ class BrowseView extends StatefulHookWidget { State createState() => _BrowseViewState(); } -class _BrowseViewState extends State - with AutomaticKeepAliveClientMixin { +class _BrowseViewState extends State with AutomaticKeepAliveClientMixin { final _controller = CarouselController(); @override @@ -56,34 +54,24 @@ class _BrowseViewState extends State final carouselIndex = useState(0); var itemsNew = widget.allItems != null && widget.navrailIndex.value == 0 ? widget.allItems! - .where((element) => element['name'] - .toLowerCase() - .contains(widget.searchedTerm.value.toLowerCase(), 0)) + .where((element) => element['name'].toLowerCase().contains(widget.searchedTerm.value.toLowerCase(), 0)) .toList() - : widget.allItems != null && - widget.navrailIndex.value > 0 && - widget.categories != null - ? (widget.categories!.entries - .toList()[widget.navrailIndex.value - 1] - .value as List) - .where((element) => element['name'] - .toLowerCase() - .contains(widget.searchedTerm.value.toLowerCase(), 0)) + : widget.allItems != null && widget.navrailIndex.value > 0 && widget.categories != null + ? (widget.categories!.entries.toList()[widget.navrailIndex.value - 1].value as List) + .where((element) => element['name'].toLowerCase().contains(widget.searchedTerm.value.toLowerCase(), 0)) .toList() : []; return !widget.isConnected ? Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - const AdwaitaIcon(AdwaitaIcons.network_no_route, size: 45), + const Icon(LucideIcons.wifiOff, size: 45), const SizedBox(height: 20), Text("Can't connect", style: context.textTheme.headline5), const SizedBox(height: 12), - Text("You need an internet connection to use $appName.", - style: context.textTheme.headline6), + Text("You need an internet connection to use $appName.", style: context.textTheme.headline6), const SizedBox(height: 20), - ElevatedButton( - onPressed: widget.getData, child: const Text('Retry')), + ElevatedButton(onPressed: widget.getData, child: const Text('Retry')), ], ) : widget.categories == null && widget.featured == null @@ -92,25 +80,21 @@ class _BrowseViewState extends State children: [ SpinKitThreeBounce(color: context.textTheme.bodyText1!.color), const SizedBox(height: 20), - Text("Fetching Softwares", - style: context.textTheme.headline5), + Text("Fetching Softwares", style: context.textTheme.headline5), ], ) - : widget.searchedTerm.value.trim().isEmpty && - widget.navrailIndex.value == 0 + : widget.searchedTerm.value.trim().isEmpty && widget.navrailIndex.value == 0 ? SingleChildScrollView( controller: ScrollController(), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - padding: const EdgeInsets.symmetric( - horizontal: 20, vertical: 4), + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 4), child: Text( "Featured Apps", - style: context.textTheme.headline6!.copyWith( - fontWeight: FontWeight.w600, - letterSpacing: 1.2), + style: + context.textTheme.headline6!.copyWith(fontWeight: FontWeight.w600, letterSpacing: 1.2), ), ), MouseRegion( @@ -121,41 +105,28 @@ class _BrowseViewState extends State CarouselSlider.builder( itemCount: widget.featured!.length, itemBuilder: (context, index, i) { - App featuredApp = App.fromItem( - widget.featured!.values.toList()[index]); + App featuredApp = App.fromItem(widget.featured!.values.toList()[index]); return ClipRRect( borderRadius: BorderRadius.circular(10), child: GestureDetector( - onTap: () => Navigator.of(context).push( - MaterialPageRoute( - builder: (ctx) => - AppPage(app: featuredApp))), + onTap: () => Navigator.of(context) + .push(MaterialPageRoute(builder: (ctx) => AppPage(app: featuredApp))), child: Stack( children: [ - if (featuredApp.screenshotsUrl != - null) + if (featuredApp.screenshotsUrl != null) Container( - constraints: - const BoxConstraints - .expand(), + constraints: const BoxConstraints.expand(), child: CachedNetworkImage( - imageUrl: featuredApp - .screenshotsUrl![0] - .startsWith('http') - ? (featuredApp - .screenshotsUrl!)[0] - : prefixUrl + - featuredApp - .screenshotsUrl![0], + imageUrl: featuredApp.screenshotsUrl![0].startsWith('http') + ? (featuredApp.screenshotsUrl!)[0] + : prefixUrl + featuredApp.screenshotsUrl![0], fit: BoxFit.cover, )), Center( child: Container( color: context.isDark - ? Colors.grey.shade900 - .withOpacity(0.5) - : Colors.grey.shade300 - .withOpacity(0.5), + ? Colors.grey.shade900.withOpacity(0.5) + : Colors.grey.shade300.withOpacity(0.5), height: 400, child: ClipRect( child: BackdropFilter( @@ -164,51 +135,30 @@ class _BrowseViewState extends State sigmaY: 10, ), child: Row( - mainAxisAlignment: - MainAxisAlignment - .center, + mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( width: 100, - child: featuredApp - .iconUrl != - null - ? featuredApp - .iconUrl! - .endsWith( - '.svg') - ? SvgPicture - .network( - featuredApp - .iconUrl!, + child: featuredApp.iconUrl != null + ? featuredApp.iconUrl!.endsWith('.svg') + ? SvgPicture.network( + featuredApp.iconUrl!, ) : CachedNetworkImage( - imageUrl: - featuredApp - .iconUrl!, - fit: BoxFit - .cover, - placeholder: - (c, u) => - const Center( - child: - CircularProgressIndicator(), + imageUrl: featuredApp.iconUrl!, + fit: BoxFit.cover, + placeholder: (c, u) => const Center( + child: CircularProgressIndicator(), ), - errorWidget: (c, - w, - i) => - brokenImageWidget, + errorWidget: (c, w, i) => brokenImageWidget, ) : brokenImageWidget, ), Flexible( child: Text( featuredApp.name, - overflow: TextOverflow - .ellipsis, - style: context - .textTheme - .headline3, + overflow: TextOverflow.ellipsis, + style: context.textTheme.headline3, ), ) ], @@ -230,15 +180,12 @@ class _BrowseViewState extends State enableInfiniteScroll: true, reverse: false, autoPlay: true, - autoPlayInterval: - const Duration(seconds: 3), - autoPlayAnimationDuration: - const Duration(milliseconds: 800), + autoPlayInterval: const Duration(seconds: 3), + autoPlayAnimationDuration: const Duration(milliseconds: 800), autoPlayCurve: Curves.fastOutSlowIn, enlargeCenterPage: true, scrollDirection: Axis.horizontal, - onPageChanged: (idx, rsn) => - carouselIndex.value = idx), + onPageChanged: (idx, rsn) => carouselIndex.value = idx), ), if (showCarouselArrows.value) ...[ Align( @@ -246,9 +193,8 @@ class _BrowseViewState extends State child: SizedBox( height: 400, child: CarouselArrow( - icon: AdwaitaIcons.go_previous, - onPressed: () => - _controller.previousPage(), + icon: Icons.chevron_left, + onPressed: () => _controller.previousPage(), ), ), ), @@ -257,7 +203,7 @@ class _BrowseViewState extends State child: SizedBox( height: 400, child: CarouselArrow( - icon: AdwaitaIcons.go_next, + icon: Icons.chevron_right, onPressed: () => _controller.nextPage(), ), ), @@ -269,27 +215,19 @@ class _BrowseViewState extends State const SizedBox(height: 5), Row( mainAxisAlignment: MainAxisAlignment.center, - children: - List.generate(widget.featured!.length, (index) { + children: List.generate(widget.featured!.length, (index) { return GestureDetector( onTap: () => _controller.animateToPage(index), child: Container( width: 10.0, height: 10.0, padding: const EdgeInsets.all(4), - margin: const EdgeInsets.symmetric( - vertical: 10.0, horizontal: 2.0), + margin: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 2.0), decoration: BoxDecoration( shape: BoxShape.circle, color: carouselIndex.value == index - ? (context.isDark - ? Colors.white - : Colors.black) - .withOpacity(0.9) - : (context.isDark - ? Colors.white - : Colors.black) - .withOpacity(0.4), + ? (context.isDark ? Colors.white : Colors.black).withOpacity(0.9) + : (context.isDark ? Colors.white : Colors.black).withOpacity(0.4), ), ), ); @@ -301,42 +239,28 @@ class _BrowseViewState extends State child: Container( constraints: BoxConstraints( maxWidth: math.min( - 1200, - context.width >= mobileWidth - ? context.width - 300 - : context.width)), + 1200, context.width >= mobileWidth ? context.width - 300 : context.width)), child: Column(children: [ - for (var category - in widget.categories!.entries.toList()) ...[ + for (var category in widget.categories!.entries.toList()) ...[ Padding( - padding: const EdgeInsets.symmetric( - horizontal: 20, vertical: 4), + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 4), child: Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( category.key, style: context.textTheme.headline6! - .copyWith( - fontWeight: FontWeight.w600, - letterSpacing: 1.2), + .copyWith(fontWeight: FontWeight.w600, letterSpacing: 1.2), ), OutlinedButton.icon( style: OutlinedButton.styleFrom( - primary: context.isDark - ? Colors.grey[200] - : Colors.grey[800], + primary: context.isDark ? Colors.grey[200] : Colors.grey[800], ), onPressed: () { - widget.navrailIndex.value = widget - .categories!.keys - .toList() - .indexOf(category.key) + - 1; + widget.navrailIndex.value = + widget.categories!.keys.toList().indexOf(category.key) + 1; }, - label: const Icon(Icons.chevron_right, - size: 14), + label: const Icon(Icons.chevron_right, size: 14), icon: const Text("See all"), ) ], @@ -356,17 +280,10 @@ class _BrowseViewState extends State alignment: Alignment.topCenter, child: Container( constraints: BoxConstraints( - maxWidth: math.min( - 1400, - context.width >= mobileWidth - ? context.width - 300 - : context.width)), + maxWidth: math.min(1400, context.width >= mobileWidth ? context.width - 300 : context.width)), child: GridOfApps( - itemList: widget.searchedTerm.value.isEmpty && - widget.categories != null - ? widget.categories!.entries - .toList()[widget.navrailIndex.value - 1] - .value + itemList: widget.searchedTerm.value.isEmpty && widget.categories != null + ? widget.categories!.entries.toList()[widget.navrailIndex.value - 1].value : itemsNew), ), ); diff --git a/lib/screens/downloads_view.dart b/lib/screens/downloads_view.dart index 1788f9c..98e3b74 100644 --- a/lib/screens/downloads_view.dart +++ b/lib/screens/downloads_view.dart @@ -2,11 +2,11 @@ import 'dart:io'; import 'package:gtk/gtk.dart'; import 'package:flutter/material.dart'; -import 'package:adwaita_icons/adwaita_icons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:appimagepool/utils/utils.dart'; import 'package:appimagepool/providers/providers.dart'; +import 'package:lucide_icons/lucide_icons.dart'; class DownloadsView extends HookConsumerWidget { final ValueNotifier searchedTerm; @@ -17,8 +17,7 @@ class DownloadsView extends HookConsumerWidget { Widget build(context, ref) { final listDownloads = ref .watch(downloadListProvider) - .where((element) => - element.name.toLowerCase().contains(searchedTerm.value)) + .where((element) => element.name.toLowerCase().contains(searchedTerm.value)) .toList(); return listDownloads.isNotEmpty ? SingleChildScrollView( @@ -49,8 +48,7 @@ class DownloadsView extends HookConsumerWidget { ), const SizedBox(height: 3), LinearProgressIndicator( - value: - i.totalBytes != 0 ? i.actualBytes / i.totalBytes : 0, + value: i.totalBytes != 0 ? i.actualBytes / i.totalBytes : 0, minHeight: 10, ), const SizedBox(height: 3), @@ -69,20 +67,18 @@ class DownloadsView extends HookConsumerWidget { ), trailing: IconButton( onPressed: () { - if (i.cancelToken.isCancelled || - (i.actualBytes == i.totalBytes && i.actualBytes != 0)) { + if (i.cancelToken.isCancelled || (i.actualBytes == i.totalBytes && i.actualBytes != 0)) { removeItem(); - } else if (i.actualBytes != i.totalBytes || - i.actualBytes == 0) { + } else if (i.actualBytes != i.totalBytes || i.actualBytes == 0) { i.cancelToken.cancel("cancelled"); ref.watch(downloadListProvider.notifier).refresh(); } }, - icon: AdwaitaIcon(i.cancelToken.isCancelled - ? AdwaitaIcons.list_remove + icon: Icon(i.cancelToken.isCancelled + ? LucideIcons.slash : (i.actualBytes != i.totalBytes || i.actualBytes == 0) - ? AdwaitaIcons.window_close - : AdwaitaIcons.user_trash), + ? LucideIcons.x + : LucideIcons.trash), ), onTap: (i.actualBytes == i.totalBytes && i.totalBytes != 0) ? () => runProgram( diff --git a/lib/screens/installed_view.dart b/lib/screens/installed_view.dart index e0ecea0..81f8d6f 100644 --- a/lib/screens/installed_view.dart +++ b/lib/screens/installed_view.dart @@ -1,9 +1,9 @@ import 'dart:io'; import 'package:gtk/gtk.dart'; +import 'package:lucide_icons/lucide_icons.dart'; import 'package:path/path.dart' as path; import 'package:flutter/material.dart'; -import 'package:adwaita_icons/adwaita_icons.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:appimagepool/utils/utils.dart'; @@ -25,10 +25,7 @@ class _InstalledViewState extends ConsumerState { final listInstalled = Directory(downloadPath) .listSync() .where((element) => element.path.endsWith('.AppImage')) - .where((element) => path - .basename(element.path) - .toLowerCase() - .contains(widget.searchedTerm.value)) + .where((element) => path.basename(element.path).toLowerCase().contains(widget.searchedTerm.value)) .toList(); return listInstalled.isNotEmpty ? SingleChildScrollView( @@ -57,7 +54,7 @@ class _InstalledViewState extends ConsumerState { subtitle: Text(i.statSync().size.getFileSize()), trailing: IconButton( onPressed: removeItem, - icon: const AdwaitaIcon(AdwaitaIcons.user_trash), + icon: const Icon(LucideIcons.trash), ), onTap: () => runProgram( location: path.dirname(i.path), diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index f28a07f..dec3d37 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -1,4 +1,4 @@ -import 'package:adwaita_icons/adwaita_icons.dart'; +import 'package:lucide_icons/lucide_icons.dart'; import 'package:flutter/material.dart'; import 'utils.dart'; @@ -18,19 +18,19 @@ TextStyle linkStyle(BuildContext context, [bool showUnderline = true]) => TextSt ); const mobileWidth = 800; - -Widget brokenImageWidget = const AdwaitaIcon(AdwaitaIcons.question); -const Map categoryIcons = { - 'Video': AdwaitaIcons.video_x_generic, - 'Audio': AdwaitaIcons.audio_headphones, - 'Science': AdwaitaIcons.applications_science, - 'System': AdwaitaIcons.applications_system, - 'Utility': AdwaitaIcons.applications_utilities, - 'Network': AdwaitaIcons.network_cellular, - 'Development': AdwaitaIcons.applications_engineering, - 'Education': AdwaitaIcons.note, - 'Graphics': AdwaitaIcons.applications_graphics, - 'Office': AdwaitaIcons.x_office_document, - 'Game': AdwaitaIcons.applications_games, - 'Finance': AdwaitaIcons.money, +Widget brokenImageWidget = const Icon(LucideIcons.helpCircle); + +const Map categoryIcons = { + 'Video': LucideIcons.video, + 'Audio': LucideIcons.headphones, + 'Science': LucideIcons.flaskConical, + 'System': LucideIcons.monitor, + 'Utility': LucideIcons.gauge, + 'Network': LucideIcons.barChart, + 'Development': LucideIcons.code2, + 'Education': LucideIcons.graduationCap, + 'Graphics': LucideIcons.album, + 'Office': LucideIcons.printer, + 'Game': LucideIcons.gamepad2, + 'Finance': LucideIcons.currency, }; diff --git a/lib/widgets/carousel_arrow.dart b/lib/widgets/carousel_arrow.dart index 05139a4..ade3c12 100644 --- a/lib/widgets/carousel_arrow.dart +++ b/lib/widgets/carousel_arrow.dart @@ -1,9 +1,9 @@ -import 'package:adwaita_icons/adwaita_icons.dart'; -import 'package:appimagepool/utils/extensions.dart'; import 'package:flutter/material.dart'; import 'package:gtk/gtk.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:appimagepool/utils/extensions.dart'; + class CarouselArrow extends ConsumerWidget { const CarouselArrow({ Key? key, @@ -12,20 +12,20 @@ class CarouselArrow extends ConsumerWidget { }) : super(key: key); final VoidCallback onPressed; - final String icon; + final IconData icon; @override Widget build(context, ref) { - return SizedBox( - width: 44, - height: 44, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - primary: GnomeTheme.of(context).sidebars.withOpacity(0.70), + return GestureDetector( + onTap: onPressed, + child: Container( + width: 44, + height: 44, + decoration: ShapeDecoration( shape: const CircleBorder(), + color: GnomeTheme.of(context).sidebars.withOpacity(0.70), ), - child: AdwaitaIcon(icon, color: context.textTheme.bodyText1!.color, size: 30), - onPressed: onPressed, + child: Center(child: Icon(icon, color: context.textTheme.bodyText1!.color, size: 30)), ), ); } diff --git a/lib/widgets/customdialog.dart b/lib/widgets/customdialog.dart index 9c56827..a1bf8d6 100644 --- a/lib/widgets/customdialog.dart +++ b/lib/widgets/customdialog.dart @@ -6,6 +6,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:appimagepool/utils/utils.dart'; import 'package:appimagepool/models/models.dart'; +import 'package:lucide_icons/lucide_icons.dart'; class CustomDialogBox extends HookConsumerWidget { final Widget img, endText; @@ -58,6 +59,10 @@ class CustomDialogBox extends HookConsumerWidget { isExpanded: true, value: selectedIndex.value, underline: Container(), + icon: const Icon( + LucideIcons.chevronsUpDown, + size: 16, + ), onChanged: (val) { selectedIndex.value = val!; if (onVersionChange != null) onVersionChange!(val); diff --git a/lib/widgets/download_button.dart b/lib/widgets/download_button.dart index 88b5492..5ce6805 100644 --- a/lib/widgets/download_button.dart +++ b/lib/widgets/download_button.dart @@ -2,19 +2,19 @@ import 'dart:io'; import 'package:gtk/gtk.dart'; import 'package:flutter/material.dart'; -import 'package:adwaita_icons/adwaita_icons.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:appimagepool/utils/utils.dart'; import 'package:appimagepool/models/models.dart'; import 'package:appimagepool/providers/providers.dart'; +import 'package:lucide_icons/lucide_icons.dart'; class DownloadButton extends HookConsumerWidget { const DownloadButton({Key? key}) : super(key: key); @override Widget build(BuildContext context, ref) { - var downloading = ref.watch(isDownloadingProvider); + int downloading = ref.watch(isDownloadingProvider); List listDownloads = ref.watch(downloadListProvider); return Hero( tag: 'download_menu', @@ -24,8 +24,8 @@ class DownloadButton extends HookConsumerWidget { type: MaterialType.transparency, child: GtkPopupMenu( popupWidth: 400, - icon: AdwaitaIcon( - downloading > 0 ? AdwaitaIcons.folder_download : AdwaitaIcons.emblem_default, + icon: Icon( + downloading > 0 ? LucideIcons.download : LucideIcons.check, size: 17, ), body: Consumer( @@ -74,11 +74,11 @@ class DownloadButton extends HookConsumerWidget { ref.watch(downloadListProvider.notifier).refresh(); } }, - icon: AdwaitaIcon(i.cancelToken.isCancelled - ? AdwaitaIcons.list_remove + icon: Icon(i.cancelToken.isCancelled + ? LucideIcons.xCircle : (i.actualBytes != i.totalBytes || i.actualBytes == 0) - ? AdwaitaIcons.window_close - : AdwaitaIcons.user_trash), + ? LucideIcons.x + : LucideIcons.trash), ), onTap: (i.actualBytes == i.totalBytes && i.totalBytes != 0) ? () => runProgram( diff --git a/lib/widgets/grid_of_apps.dart b/lib/widgets/grid_of_apps.dart index 655dd48..eda0eae 100644 --- a/lib/widgets/grid_of_apps.dart +++ b/lib/widgets/grid_of_apps.dart @@ -2,7 +2,6 @@ import 'package:gtk/gtk.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:appimagepool/utils/utils.dart'; @@ -52,92 +51,61 @@ class _GridOfAppsState extends State { onExit: (_) => isHovering.value = false, onHover: (_) => isHovering.value = true, child: GestureDetector( - onTap: () => Navigator.of(context).push( - MaterialPageRoute( - builder: (ctx) => AppPage(app: app))), + onTap: () => Navigator.of(context) + .push(MaterialPageRoute(builder: (ctx) => AppPage(app: app))), child: Container( padding: const EdgeInsets.all(6), margin: const EdgeInsets.all(5), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - color: value - ? Colors.grey.withOpacity(0.2) - : null, + color: value ? Colors.grey.withOpacity(0.2) : null, ), child: Row( - crossAxisAlignment: - CrossAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( width: 50, height: 50, padding: const EdgeInsets.all(4), decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(20), + borderRadius: BorderRadius.circular(20), ), child: app.iconUrl != null ? (!app.iconUrl!.endsWith('.svg')) ? CachedNetworkImage( imageUrl: app.iconUrl!, fit: BoxFit.cover, - placeholder: (c, b) => - Center( - child: SpinKitRipple( - color: context - .textTheme - .bodyText1! - .color), - ), - errorWidget: (c, w, i) => - brokenImageWidget, + placeholder: (c, b) => const SizedBox(), + errorWidget: (c, w, i) => brokenImageWidget, ) - : SvgPicture.network( - app.iconUrl!) + : SvgPicture.network(app.iconUrl!) : brokenImageWidget, ), const SizedBox(width: 10), Flexible( child: Column( mainAxisSize: MainAxisSize.min, - crossAxisAlignment: - CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - padding: - const EdgeInsets.symmetric( - vertical: 8), + padding: const EdgeInsets.symmetric(vertical: 8), child: Text( app.name, - overflow: - TextOverflow.ellipsis, + overflow: TextOverflow.ellipsis, maxLines: 1, - style: context - .textTheme.bodyText1! - .copyWith( - color: context.isDark - ? Colors.white - : Colors - .grey[900]), + style: context.textTheme.bodyText1!.copyWith( + color: context.isDark ? Colors.white : Colors.grey[900]), ), ), if (app.description != null) Text( app.description! .replaceAll('\n', ' ') - .replaceAll( - RegExp(r"<[^>]*>"), - ''), - overflow: - TextOverflow.ellipsis, + .replaceAll(RegExp(r"<[^>]*>"), ''), + overflow: TextOverflow.ellipsis, maxLines: 1, - style: context - .textTheme.bodyText1! - .copyWith( - color: context.isDark - ? Colors.white - : Colors - .grey[900]), + style: context.textTheme.bodyText1!.copyWith( + color: context.isDark ? Colors.white : Colors.grey[900]), ), ], ), @@ -182,16 +150,14 @@ class _GridOfAppsState extends State { onExit: (_) => isHovering.value = false, onHover: (_) => isHovering.value = true, child: GestureDetector( - onTap: () => Navigator.of(context).push( - MaterialPageRoute( - builder: (ctx) => AppPage(app: app))), + onTap: () => + Navigator.of(context).push(MaterialPageRoute(builder: (ctx) => AppPage(app: app))), child: Container( padding: const EdgeInsets.all(6), margin: const EdgeInsets.all(3), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - color: - value ? Colors.grey.withOpacity(0.2) : null, + color: value ? Colors.grey.withOpacity(0.2) : null, ), child: Column( mainAxisSize: MainAxisSize.min, @@ -201,42 +167,28 @@ class _GridOfAppsState extends State { child: Center( child: Container( decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(20), + borderRadius: BorderRadius.circular(20), ), child: app.iconUrl != null ? (!app.iconUrl!.endsWith('.svg')) ? CachedNetworkImage( imageUrl: app.iconUrl!, fit: BoxFit.cover, - placeholder: (c, b) => - Center( - child: SpinKitRipple( - color: context - .textTheme - .bodyText1! - .color), - ), - errorWidget: (c, w, i) => - brokenImageWidget, + placeholder: (c, b) => const SizedBox(), + errorWidget: (c, w, i) => brokenImageWidget, ) - : SvgPicture.network( - app.iconUrl!) + : SvgPicture.network(app.iconUrl!) : brokenImageWidget), ), ), Container( - padding: - const EdgeInsets.symmetric(vertical: 8), + padding: const EdgeInsets.symmetric(vertical: 8), child: Text( app.name, overflow: TextOverflow.ellipsis, maxLines: 1, style: context.textTheme.bodyText1! - .copyWith( - color: context.isDark - ? Colors.white - : Colors.grey[900]), + .copyWith(color: context.isDark ? Colors.white : Colors.grey[900]), ), ), ], diff --git a/lib/widgets/pool_app.dart b/lib/widgets/pool_app.dart index c4455c5..3401cf4 100644 --- a/lib/widgets/pool_app.dart +++ b/lib/widgets/pool_app.dart @@ -1,11 +1,11 @@ import 'package:gtk/gtk.dart'; import 'package:flutter/material.dart'; -import 'package:adwaita_icons/adwaita_icons.dart'; import 'package:bitsdojo_window/bitsdojo_window.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:appimagepool/utils/utils.dart'; import 'package:appimagepool/providers/providers.dart'; +import 'package:lucide_icons/lucide_icons.dart'; import 'package:window_decorations/window_decorations.dart'; class PoolApp extends HookConsumerWidget { @@ -45,7 +45,7 @@ class PoolApp extends HookConsumerWidget { child: Material( type: MaterialType.transparency, child: GtkHeaderButton( - icon: const AdwaitaIcon(AdwaitaIcons.go_previous), + icon: const Icon(LucideIcons.chevronLeft, size: 17), onPressed: () { if (onBackPressed != null) onBackPressed!(); context.back(); diff --git a/lib/widgets/prefs_dialog.dart b/lib/widgets/prefs_dialog.dart index 38e85b3..954ffdd 100644 --- a/lib/widgets/prefs_dialog.dart +++ b/lib/widgets/prefs_dialog.dart @@ -2,11 +2,11 @@ import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:gtk/gtk.dart'; +import 'package:lucide_icons/lucide_icons.dart'; import 'package:path/path.dart' as p; import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:adwaita_icons/adwaita_icons.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:window_decorations/window_decorations.dart'; @@ -71,8 +71,8 @@ class PrefsWidget extends HookConsumerWidget { ref.read(themeTypeProvider.notifier).set(value!); }, underline: const SizedBox(), - icon: const AdwaitaIcon( - AdwaitaIcons.go_down, + icon: const Icon( + LucideIcons.chevronsUpDown, size: 16, ), itemHeight: 48, @@ -108,7 +108,7 @@ class PrefsWidget extends HookConsumerWidget { scrollDirection: Axis.horizontal, child: Row( children: [ - const AdwaitaIcon(AdwaitaIcons.folder, size: 18), + const Icon(LucideIcons.folder, size: 18), const SizedBox(width: 6), SelectableText( path == p.join(Platform.environment['HOME']!, 'Applications') + '/' ? 'Applications' : path), diff --git a/pubspec.lock b/pubspec.lock index 4fbb1df..d3fa6a5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,13 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - adwaita_icons: - dependency: "direct main" - description: - name: adwaita_icons - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.0" args: dependency: transitive description: @@ -98,7 +91,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: @@ -260,7 +253,7 @@ packages: name: gtk url: "https://pub.dartlang.org" source: hosted - version: "1.0.0-rc.4" + version: "1.0.0-rc.5" hooks_riverpod: dependency: "direct main" description: @@ -310,6 +303,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.1" + lucide_icons: + dependency: "direct main" + description: + name: lucide_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.13" matcher: dependency: transitive description: @@ -678,7 +678,7 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 096d26b..14b08b6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,7 +10,6 @@ environment: dependencies: flutter: sdk: flutter - adwaita_icons: ^0.2.0 bitsdojo_window: ^0.1.1+1 cached_network_image: ^3.1.0 carousel_slider: ^4.0.0 @@ -19,9 +18,10 @@ dependencies: file_picker: ^4.1.2 flutter_spinkit: ^5.1.0 flutter_svg: ^0.23.0+1 - gtk: ^1.0.0-rc.4 + gtk: ^1.0.0-rc.5 hooks_riverpod: ^1.0.0-dev.7 intl: ^0.17.0 + lucide_icons: ^0.16.13 package_info_plus: ^1.0.6 path_provider: ^2.0.5 shared_preferences: ^2.0.8