import 'package:flutter/material.dart'; import 'package:obtainium/services/apps_provider.dart'; import 'package:obtainium/services/source_service.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'package:provider/provider.dart'; class AppPage extends StatefulWidget { const AppPage({super.key, required this.appId}); final String appId; @override State createState() => _AppPageState(); } class _AppPageState extends State { @override Widget build(BuildContext context) { var appsProvider = context.watch(); AppInMemory? app = appsProvider.apps[widget.appId]; if (app?.app.installedVersion != null) { appsProvider.getUpdate(app!.app.id); } return Scaffold( appBar: AppBar( title: Text('${app!.app.author}/${app.app.name}'), ), body: WebView( initialUrl: app.app.url, ), bottomSheet: Column( mainAxisSize: MainAxisSize.min, children: [ Padding( padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( child: ElevatedButton( onPressed: (app.app.installedVersion == null || appsProvider.checkAppObjectForUpdate( app.app)) && app.downloadProgress == null ? () { appsProvider.downloadAndInstallLatestApp( app.app.id); } : null, child: Text(app.app.installedVersion == null ? 'Install' : 'Update'))), const SizedBox(width: 16.0), ElevatedButton( onPressed: app.downloadProgress != null ? null : () { showDialog( context: context, builder: (BuildContext ctx) { return AlertDialog( title: const Text('Remove App?'), content: Text( 'This will remove \'${app.app.name}\' from Obtainium.${app.app.installedVersion != null ? '\n\nNote that while Obtainium will no longer track its updates, the App will remain installed.' : ''}'), actions: [ TextButton( onPressed: () { appsProvider .removeApp(app.app.id) .then((_) { int count = 0; Navigator.of(context).popUntil( (_) => count++ >= 2); }); }, child: const Text('Remove')), TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('Cancel')) ], ); }); }, style: TextButton.styleFrom( foregroundColor: Theme.of(context).errorColor, surfaceTintColor: Theme.of(context).errorColor), child: const Text('Remove'), ), ])), if (app.downloadProgress != null) LinearProgressIndicator(value: app.downloadProgress) ], ), ); } }