diff --git a/lib/assets/images/reddit.png b/lib/assets/images/reddit.png new file mode 100644 index 00000000..941a12e6 Binary files /dev/null and b/lib/assets/images/reddit.png differ diff --git a/lib/assets/images/revanced.svg b/lib/assets/images/revanced.svg new file mode 100644 index 00000000..7318abbd --- /dev/null +++ b/lib/assets/images/revanced.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/lib/assets/images/revanced_afn.png b/lib/assets/images/revanced_afn.png new file mode 100644 index 00000000..5d2767f5 Binary files /dev/null and b/lib/assets/images/revanced_afn.png differ diff --git a/lib/backend/api/github_api.dart b/lib/backend/api/github_api.dart new file mode 100644 index 00000000..5823e191 --- /dev/null +++ b/lib/backend/api/github_api.dart @@ -0,0 +1,17 @@ +import 'package:github/github.dart'; + +class GithubAPI { + var github = GitHub(); + + Future latestRelease(String org, repoName) async { + var latestRelease = await github.repositories + .getLatestRelease(RepositorySlug(org, repoName)); + var dlurl = latestRelease.assets?.first.browserDownloadUrl; + print(dlurl); + return latestRelease; + } +} + +void main(List args) { + GithubAPI().latestRelease('revanced', 'revanced-patches'); +} diff --git a/lib/backend/api/manager_api.dart b/lib/backend/api/manager_api.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/lib/backend/api/manager_api.dart @@ -0,0 +1 @@ + diff --git a/lib/main.dart b/lib/main.dart index d92f3e3a..a4379dad 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; import 'package:revanced_manager_flutter/ui/screens/home_screen.dart'; import 'package:revanced_manager_flutter/ui/screens/patcher_screen.dart'; import 'constants.dart'; @@ -17,6 +18,9 @@ class MyApp extends StatelessWidget { title: 'ReVanced Manager', theme: ThemeData.light().copyWith( backgroundColor: Colors.red, + textTheme: GoogleFonts.interTextTheme( + Theme.of(context).textTheme, + ), useMaterial3: true, colorScheme: const ColorScheme.light( primary: purple40, diff --git a/lib/models/release.dart b/lib/models/release.dart new file mode 100644 index 00000000..6b94de84 --- /dev/null +++ b/lib/models/release.dart @@ -0,0 +1,9 @@ +import 'package:revanced_manager_flutter/models/release_asset.dart'; + +class Release { + String? tagName; + String? publishedAt; + bool? isPrerelease; + List? assets; + String? body; +} diff --git a/lib/models/release_asset.dart b/lib/models/release_asset.dart new file mode 100644 index 00000000..3e65b7a8 --- /dev/null +++ b/lib/models/release_asset.dart @@ -0,0 +1,4 @@ +class ReleaseAsset { + String? downloadUrl; + String? name; +} diff --git a/lib/ui/screens/home_screen.dart b/lib/ui/screens/home_screen.dart index 61897628..735c257b 100644 --- a/lib/ui/screens/home_screen.dart +++ b/lib/ui/screens/home_screen.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:revanced_manager_flutter/ui/widgets/available_update.dart'; +import 'package:revanced_manager_flutter/ui/widgets/installed_apps.dart'; +import 'package:revanced_manager_flutter/ui/widgets/latest_commit.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @@ -8,52 +11,61 @@ class HomeScreen extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( body: SafeArea( - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 0.0, - horizontal: 24.0, - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - "ReVanced Manager", - style: GoogleFonts.manrope( - fontSize: 24, - fontWeight: FontWeight.w500, - ), - ), - IconButton( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 0.0, + horizontal: 20.0, + ), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: IconButton( onPressed: () {}, icon: const Icon( Icons.more_vert, ), - ) - ], - ), - const SizedBox(height: 12), - Align( - alignment: Alignment.topLeft, - child: Text( - "Dashboard", - style: GoogleFonts.lato( - fontSize: 32, ), ), - ), - const SizedBox(height: 12), - Align( - alignment: Alignment.topLeft, - child: Text( - "ReVanced Updates", - style: GoogleFonts.lato( - fontSize: 22, + const SizedBox(height: 60), + Align( + alignment: Alignment.topLeft, + child: Text( + "Dashboard", + style: GoogleFonts.inter( + fontSize: 28, + ), ), ), - ), - ], + const SizedBox(height: 23), + Align( + alignment: Alignment.topLeft, + child: Text( + "ReVanced Updates", + style: GoogleFonts.inter( + fontSize: 18, + ), + ), + ), + const SizedBox(height: 10), + const LatestCommitWidget(), + const SizedBox(height: 14), + Align( + alignment: Alignment.topLeft, + child: Text( + "Patched Applications", + style: GoogleFonts.inter( + fontSize: 18, + ), + ), + ), + const SizedBox(height: 14), + const AvailableUpdatesWidget(), + const SizedBox(height: 15), + const InstalledAppsWidget(), + ], + ), ), ), ), diff --git a/lib/ui/widgets/available_update.dart b/lib/ui/widgets/available_update.dart new file mode 100644 index 00000000..4015bfcf --- /dev/null +++ b/lib/ui/widgets/available_update.dart @@ -0,0 +1,140 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class AvailableUpdatesWidget extends StatelessWidget { + const AvailableUpdatesWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: const Color(0xff1B222B), + ), + padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Updates Available(2)", + style: GoogleFonts.inter( + fontSize: 16, + color: const Color(0xff7792BA), + fontWeight: FontWeight.w500, + ), + ), + TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + primary: Colors.white, + backgroundColor: const Color(0xff7792BA), + padding: const EdgeInsets.symmetric( + vertical: 8, + horizontal: 18, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch all"), + ) + ], + ), + ListTile( + horizontalTitleGap: 12.0, + leading: SvgPicture.asset( + "lib/assets/images/revanced.svg", + height: 26, + width: 26, + ), + title: Text( + "ReVanced", + style: GoogleFonts.roboto( + color: const Color(0xff7792BA), + ), + ), + subtitle: const Text("Released 2 days ago"), + trailing: TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + side: const BorderSide( + color: Color(0xff7792BA), + width: 1, + ), + primary: Colors.white, + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch"), + ), + ), + ListTile( + horizontalTitleGap: 12.0, + leading: const Image( + image: AssetImage("lib/assets/images/reddit.png"), + height: 39, + width: 39, + ), + title: Text( + "ReReddit", + style: GoogleFonts.roboto( + color: const Color(0xff7792BA), + ), + ), + subtitle: const Text("Released 1 month ago"), + trailing: TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + side: const BorderSide( + color: Color(0xff7792BA), + width: 1, + ), + primary: Colors.white, + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch"), + ), + ), + const SizedBox(height: 4), + Text( + "Changelog", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + fontWeight: FontWeight.w700, + ), + ), + const SizedBox(height: 4), + Text( + "fix: we made the player even worse (you love)", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + const SizedBox(height: 4), + Text( + "chore: guhhughghu", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + ], + ), + ); + } +} diff --git a/lib/ui/widgets/installed_apps.dart b/lib/ui/widgets/installed_apps.dart new file mode 100644 index 00000000..7ecefd59 --- /dev/null +++ b/lib/ui/widgets/installed_apps.dart @@ -0,0 +1,85 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class InstalledAppsWidget extends StatelessWidget { + const InstalledAppsWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: const Color(0xff1B222B), + ), + padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "Total Installed(3)", + style: GoogleFonts.inter( + fontSize: 16, + color: const Color(0xff7792BA), + fontWeight: FontWeight.w500, + ), + ), + ListTile( + horizontalTitleGap: 12.0, + leading: const Image( + image: AssetImage("lib/assets/images/reddit.png"), + height: 39, + width: 39, + ), + title: Text( + "ReVanced", + style: GoogleFonts.roboto( + color: const Color(0xff7792BA), + ), + ), + subtitle: const Text("Released 2 days ago"), + trailing: TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + side: const BorderSide( + color: Color(0xff7792BA), + width: 1, + ), + primary: Colors.white, + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch"), + ), + ), + Text( + "Changelog", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + fontWeight: FontWeight.w700, + ), + ), + const SizedBox(height: 4), + Text( + "fix: we made the player even worse (you love)", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + const SizedBox(height: 4), + Text( + "chore: guhhughghu", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + ], + ), + ); + } +} diff --git a/lib/ui/widgets/latest_commit.dart b/lib/ui/widgets/latest_commit.dart new file mode 100644 index 00000000..f28a536b --- /dev/null +++ b/lib/ui/widgets/latest_commit.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; + +class LatestCommitWidget extends StatelessWidget { + const LatestCommitWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: const Color(0xff1B222B), + ), + padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + Text("Patcher: 20 hours ago"), + Text("Manager: 3 days ago"), + ], + ), + TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + primary: Colors.white, + backgroundColor: const Color(0xff7792BA), + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Update Manager"), + ) + ], + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 0cb735e1..133a2d47 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -102,6 +102,13 @@ packages: description: flutter source: sdk version: "0.0.0" + github: + dependency: "direct main" + description: + name: github + url: "https://pub.dartlang.org" + source: hosted + version: "9.4.0" google_fonts: dependency: "direct main" description: @@ -110,7 +117,7 @@ packages: source: hosted version: "3.0.1" http: - dependency: transitive + dependency: "direct main" description: name: http url: "https://pub.dartlang.org" @@ -123,6 +130,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.0.1" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "4.6.0" lints: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8b61cf6f..6dba6bec 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,6 +36,8 @@ dependencies: cupertino_icons: ^1.0.2 flutter_svg: ^1.1.1+1 google_fonts: ^3.0.1 + http: ^0.13.4 + github: ^9.4.0 dev_dependencies: flutter_test: