From ce98c5b2ec01c7914a09c5b370d657ce14e9a696 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 20 Aug 2022 16:31:52 -0400 Subject: [PATCH] Migrated to Material You --- assets/fonts/Metropolis-Regular.otf | Bin 0 -> 23124 bytes lib/main.dart | 35 ++++++-- lib/pages/add_app.dart | 134 +++++++++++++--------------- lib/pages/app.dart | 7 +- lib/pages/apps.dart | 108 +++++++--------------- lib/pages/home.dart | 41 +++++++++ lib/pages/settings.dart | 20 +++++ pubspec.lock | 65 +++++++++++++- pubspec.yaml | 14 +++ 9 files changed, 267 insertions(+), 157 deletions(-) create mode 100644 assets/fonts/Metropolis-Regular.otf create mode 100644 lib/pages/home.dart create mode 100644 lib/pages/settings.dart diff --git a/assets/fonts/Metropolis-Regular.otf b/assets/fonts/Metropolis-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..737760b5df73bf4e48e8d17146a574e8deabc80d GIT binary patch literal 23124 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 Ktr*Wz`TKukRV^_9 literal 0 HcmV?d00001 diff --git a/lib/main.dart b/lib/main.dart index d62f6f1..a2eb7cc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:obtainium/pages/apps.dart'; +import 'package:obtainium/pages/home.dart'; import 'package:obtainium/services/apps_provider.dart'; import 'package:obtainium/services/source_service.dart'; import 'package:provider/provider.dart'; import 'package:workmanager/workmanager.dart'; +import 'package:dynamic_color/dynamic_color.dart'; void backgroundUpdateCheck() { Workmanager().executeTask((task, inputData) async { @@ -36,6 +37,7 @@ void main() async { await Workmanager().registerPeriodicTask( 'update-apps-task', 'backgroundUpdateCheck', frequency: const Duration(minutes: 15), + initialDelay: const Duration(minutes: 15), constraints: Constraints(networkType: NetworkType.connected)); runApp(MultiProvider( providers: [ChangeNotifierProvider(create: (context) => AppsProvider())], @@ -43,16 +45,35 @@ void main() async { )); } +var defaultThemeColour = const Color(0xFF69F0AE); + class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { - return MaterialApp( - title: 'Obtainium', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: const AppsPage()); + return DynamicColorBuilder( + builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) { + ColorScheme lightColorScheme; + ColorScheme darkColorScheme; + if (lightDynamic != null && darkDynamic != null) { + lightColorScheme = lightDynamic.harmonized(); + darkColorScheme = darkDynamic.harmonized(); + } else { + lightColorScheme = ColorScheme.fromSeed(seedColor: defaultThemeColour); + darkColorScheme = ColorScheme.fromSeed( + seedColor: defaultThemeColour, brightness: Brightness.dark); + } + + return MaterialApp( + title: 'Obtainium', + theme: ThemeData( + useMaterial3: true, + colorScheme: lightColorScheme, + fontFamily: 'Metropolis'), + darkTheme: + ThemeData(useMaterial3: true, colorScheme: darkColorScheme), + home: const HomePage()); + }); } } diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index 92bea22..01b7560 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -18,78 +18,72 @@ class _AddAppPageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Obtainium - Add App'), - ), - body: Center( - child: Form( - key: _formKey, - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const Spacer(), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: TextFormField( - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: 'https://github.com/Author/Project', - helperText: 'Enter the App source URL'), - controller: urlInputController, - validator: (value) { - if (value == null || - value.isEmpty || - Uri.tryParse(value) == null) { - return 'Please enter a supported source URL'; - } - return null; - }, - )), - Padding( - padding: - const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), - child: ElevatedButton( - onPressed: gettingAppInfo - ? null - : () { - if (_formKey.currentState!.validate()) { + return Center( + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const Spacer(), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: TextFormField( + decoration: const InputDecoration( + hintText: 'https://github.com/Author/Project', + helperText: 'Enter the App source URL'), + controller: urlInputController, + validator: (value) { + if (value == null || + value.isEmpty || + Uri.tryParse(value) == null) { + return 'Please enter a supported source URL'; + } + return null; + }, + )), + Padding( + padding: + const EdgeInsets.symmetric(vertical: 16.0, horizontal: 16.0), + child: ElevatedButton( + onPressed: gettingAppInfo + ? null + : () { + if (_formKey.currentState!.validate()) { + setState(() { + gettingAppInfo = true; + }); + SourceService() + .getApp(urlInputController.value.text) + .then((app) { + var appsProvider = context.read(); + if (appsProvider.apps.containsKey(app.id)) { + throw 'App already added'; + } + appsProvider.saveApp(app).then((_) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + AppPage(appId: app.id))); + }); + }).catchError((e) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(e.toString())), + ); + }).whenComplete(() { setState(() { - gettingAppInfo = true; + gettingAppInfo = false; }); - SourceService() - .getApp(urlInputController.value.text) - .then((app) { - var appsProvider = context.read(); - if (appsProvider.apps.containsKey(app.id)) { - throw 'App already added'; - } - appsProvider.saveApp(app).then((_) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - AppPage(appId: app.id))); - }); - }).catchError((e) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(e.toString())), - ); - }).whenComplete(() { - setState(() { - gettingAppInfo = false; - }); - }); - } - }, - child: const Text('Add'), - ), + }); + } + }, + child: const Text('Add'), ), - const Spacer(), - if (gettingAppInfo) const LinearProgressIndicator(), - ], - ), - )), - ); + ), + const Spacer(), + if (gettingAppInfo) const LinearProgressIndicator(), + ], + ), + )); } } diff --git a/lib/pages/app.dart b/lib/pages/app.dart index 78f120f..0586257 100644 --- a/lib/pages/app.dart +++ b/lib/pages/app.dart @@ -38,7 +38,7 @@ class _AppPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( - child: OutlinedButton( + child: ElevatedButton( onPressed: (app?.installedVersion == null || appsProvider .checkAppObjectForUpdate(app!)) && @@ -52,7 +52,7 @@ class _AppPageState extends State { ? 'Install' : 'Update'))), const SizedBox(width: 16.0), - OutlinedButton( + ElevatedButton( onPressed: app?.currentDownloadId != null ? null : () { @@ -85,7 +85,8 @@ class _AppPageState extends State { }); }, style: TextButton.styleFrom( - foregroundColor: Theme.of(context).errorColor), + foregroundColor: Theme.of(context).errorColor, + surfaceTintColor: Theme.of(context).errorColor), child: const Text('Remove'), ), ])), diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 3796794..af6eee1 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -17,83 +17,39 @@ class _AppsPageState extends State { var appsProvider = context.watch(); appsProvider.getUpdates(); - return Scaffold( - appBar: AppBar( - title: const Text('Obtainium'), - ), - body: Center( - child: appsProvider.loadingApps - ? const CircularProgressIndicator() - : appsProvider.apps.isEmpty - ? Text( - 'No Apps', - style: Theme.of(context).textTheme.headline4, - ) - : RefreshIndicator( - onRefresh: appsProvider.getUpdates, - child: ListView( - children: appsProvider.apps.values - .map( - (e) => ListTile( - title: Text('${e.author}/${e.name}'), - subtitle: - Text(e.installedVersion ?? 'Not Installed'), - trailing: e.installedVersion != null && - e.installedVersion != e.latestVersion - ? const Text('Update Available') - : null, - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - AppPage(appId: e.id)), - ); - }, - ), - ) - .toList(), - ), + return Center( + child: appsProvider.loadingApps + ? const CircularProgressIndicator() + : appsProvider.apps.isEmpty + ? Text( + 'No Apps', + style: Theme.of(context).textTheme.headline4, + ) + : RefreshIndicator( + onRefresh: appsProvider.getUpdates, + child: ListView( + children: appsProvider.apps.values + .map( + (e) => ListTile( + title: Text('${e.author}/${e.name}'), + subtitle: + Text(e.installedVersion ?? 'Not Installed'), + trailing: e.installedVersion != null && + e.installedVersion != e.latestVersion + ? const Text('Update Available') + : null, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AppPage(appId: e.id)), + ); + }, + ), + ) + .toList(), ), - ), - 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: appsProvider.apps.values.toList().where((e) { - return (e.installedVersion != null && - e.installedVersion != e.latestVersion); - }).isNotEmpty - ? OutlinedButton( - onPressed: () { - appsProvider.installUpdates().catchError((e) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(e.toString())), - ); - }); - }, - child: const Text('Update All')) - : Container()), - const SizedBox(width: 16.0), - OutlinedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const AddAppPage()), - ); - }, - child: const Text('Add App'), - ), - ])), - ], - ), + ), ); } } diff --git a/lib/pages/home.dart b/lib/pages/home.dart new file mode 100644 index 0000000..ff78f00 --- /dev/null +++ b/lib/pages/home.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:obtainium/pages/add_app.dart'; +import 'package:obtainium/pages/apps.dart'; +import 'package:obtainium/pages/settings.dart'; + +class HomePage extends StatefulWidget { + const HomePage({super.key}); + + @override + State createState() => _HomePageState(); +} + +class _HomePageState extends State { + int selectedIndex = 1; + List pages = [ + const SettingsPage(), + const AppsPage(), + const AddAppPage() + ]; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('Obtainium')), + body: pages.elementAt(selectedIndex), + bottomNavigationBar: NavigationBar( + destinations: const [ + NavigationDestination( + icon: Icon(Icons.settings), label: 'Settings'), + NavigationDestination(icon: Icon(Icons.apps), label: 'Apps'), + NavigationDestination(icon: Icon(Icons.add), label: 'Add App'), + ], + onDestinationSelected: (int index) { + setState(() { + selectedIndex = index; + }); + }, + selectedIndex: selectedIndex, + )); + } +} diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart new file mode 100644 index 0000000..065f50e --- /dev/null +++ b/lib/pages/settings.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +class SettingsPage extends StatefulWidget { + const SettingsPage({super.key}); + + @override + State createState() => _SettingsPageState(); +} + +class _SettingsPageState extends State { + @override + Widget build(BuildContext context) { + return Center( + child: Text( + 'No Configurable Settings Yet.', + style: Theme.of(context).textTheme.bodyLarge, + textAlign: TextAlign.center, + )); + } +} diff --git a/pubspec.lock b/pubspec.lock index b1c7dfb..5faf770 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.1" args: dependency: transitive description: @@ -29,6 +36,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.5" clock: dependency: transitive description: @@ -43,6 +64,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.16.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" cupertino_icons: dependency: "direct main" description: @@ -57,6 +85,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.7.7" + dynamic_color: + dependency: "direct main" + description: + name: dynamic_color + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.3" fake_async: dependency: transitive description: @@ -97,6 +132,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.2.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.0" flutter_lints: dependency: "direct dev" description: @@ -149,6 +191,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.0.1" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" js: dependency: transitive description: @@ -156,6 +205,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.6.4" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "4.6.0" lints: dependency: transitive description: @@ -413,6 +469,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "6.1.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" sdks: dart: ">=2.19.0-79.0.dev <3.0.0" - flutter: ">=3.0.0" + flutter: ">=3.1.0-0.0.pre.1036" diff --git a/pubspec.yaml b/pubspec.yaml index db043d0..2a82ce5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,10 +45,13 @@ dependencies: toast: ^0.3.0 webview_flutter: ^3.0.4 workmanager: ^0.5.0 + dynamic_color: ^1.5.3 + dev_dependencies: flutter_test: sdk: flutter + flutter_launcher_icons: ^0.10.0 # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is @@ -57,6 +60,12 @@ dev_dependencies: # rules and activating additional ones. flutter_lints: ^2.0.0 +flutter_icons: + android: true + image_path: "assets/icon.png" + adaptive_icon_background: "#282828" + adaptive_icon_foreground: "assets/icon.png" + # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -98,3 +107,8 @@ flutter: # # For details regarding fonts from package dependencies, # see https://flutter.dev/custom-fonts/#from-packages + + fonts: + - family: Metropolis + fonts: + - asset: assets/fonts/Metropolis-Regular.otf \ No newline at end of file