diff --git a/lib/ui/widgets/homeView/installed_apps_card.dart b/lib/ui/widgets/homeView/installed_apps_card.dart index 234ae3bd..e99dbaa0 100644 --- a/lib/ui/widgets/homeView/installed_apps_card.dart +++ b/lib/ui/widgets/homeView/installed_apps_card.dart @@ -8,24 +8,14 @@ import 'package:revanced_manager/ui/views/home/home_viewmodel.dart'; import 'package:revanced_manager/ui/widgets/shared/application_item.dart'; import 'package:revanced_manager/ui/widgets/shared/custom_card.dart'; -class InstalledAppsCard extends StatefulWidget { - const InstalledAppsCard({Key? key}) : super(key: key); +//ignore: must_be_immutable +class InstalledAppsCard extends StatelessWidget { + InstalledAppsCard({Key? key}) : super(key: key); - @override - State createState() => _InstalledAppsCardState(); -} - -class _InstalledAppsCardState extends State { List apps = locator().patchedInstalledApps; final ManagerAPI _managerAPI = locator(); List patchedApps = []; - @override - void initState() { - super.initState(); - _getApps(); - } - Future _getApps() async { if (apps.isNotEmpty) { patchedApps = [...apps]; @@ -41,54 +31,66 @@ class _InstalledAppsCardState extends State { apps.clear(); apps = [...patchedApps]; } - setState(() {}); } } @override Widget build(BuildContext context) { - return apps.isEmpty - ? CustomCard( - child: Center( - child: Column( - children: [ - Icon( - size: 40, - Icons.file_download_off, - color: Theme.of(context).colorScheme.secondary, - ), - const SizedBox(height: 16), - I18nText( - 'homeView.noInstallations', - child: Text( - '', - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.titleMedium!.copyWith( - color: Theme.of(context).colorScheme.secondary, + return FutureBuilder( + future: _getApps(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + return apps.isEmpty + ? CustomCard( + child: Center( + child: Column( + children: [ + Icon( + size: 40, + Icons.file_download_off, + color: Theme.of(context).colorScheme.secondary, + ), + const SizedBox(height: 16), + I18nText( + 'homeView.noInstallations', + child: Text( + '', + textAlign: TextAlign.center, + style: Theme.of(context) + .textTheme + .titleMedium! + .copyWith( + color: + Theme.of(context).colorScheme.secondary, + ), ), + ) + ], ), - ) - ], - ), - ), - ) - : ListView( - shrinkWrap: true, - padding: EdgeInsets.zero, - physics: const NeverScrollableScrollPhysics(), - children: apps - .map( - (app) => ApplicationItem( - icon: app.icon, - name: app.name, - patchDate: app.patchDate, - changelog: app.changelog, - isUpdatableApp: false, - onPressed: () => - locator().navigateToAppInfo(app), ), ) - .toList(), - ); + : ListView( + shrinkWrap: true, + padding: EdgeInsets.zero, + physics: const NeverScrollableScrollPhysics(), + children: apps + .map( + (app) => ApplicationItem( + icon: app.icon, + name: app.name, + patchDate: app.patchDate, + changelog: app.changelog, + isUpdatableApp: false, + onPressed: () => + locator().navigateToAppInfo(app), + ), + ) + .toList(), + ); + } else { + return const Center(child: CircularProgressIndicator()); + } + }, + ); } }