From 054fa0642c5c8023e33a5aa3477f64d68aad5aea Mon Sep 17 00:00:00 2001 From: kodjodevf <107993382+kodjodevf@users.noreply.github.com> Date: Wed, 12 Apr 2023 17:51:29 +0100 Subject: [PATCH] + --- lib/router/router.dart | 14 +++ lib/views/browse/global_search_screen.dart | 2 - lib/views/history/history_screen.dart | 3 +- lib/views/library/library_screen.dart | 3 +- .../providers/library_state_provider.dart | 2 - lib/views/library/search_text_form_field.dart | 6 +- .../providers/reader_controller_provider.dart | 2 - lib/views/more/about_screen.dart | 105 ++++++++++++++++++ lib/views/more/more_screen.dart | 5 +- lib/views/more/settings/settings_screen.dart | 20 +++- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 + pubspec.lock | 80 +++++++++++++ pubspec.yaml | 2 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 17 files changed, 242 insertions(+), 15 deletions(-) create mode 100644 lib/views/more/about_screen.dart diff --git a/lib/router/router.dart b/lib/router/router.dart index a224c24..5e7e9f3 100644 --- a/lib/router/router.dart +++ b/lib/router/router.dart @@ -14,6 +14,7 @@ import 'package:mangayomi/views/manga/detail/manga_reader_detail.dart'; import 'package:mangayomi/views/manga/home/manga_home_screen.dart'; import 'package:mangayomi/views/manga/home/manga_search_screen.dart'; import 'package:mangayomi/views/manga/reader/manga_reader_view.dart'; +import 'package:mangayomi/views/more/about_screen.dart'; import 'package:mangayomi/views/more/more_screen.dart'; import 'package:mangayomi/views/more/settings/appearance/appearance_screen.dart'; import 'package:mangayomi/views/more/settings/settings_screen.dart'; @@ -217,6 +218,19 @@ class AsyncRouterNotifier extends ChangeNotifier { ); }, ), + GoRoute( + path: "/about", + name: "about", + builder: (context, state) { + return const AboutScreen(); + }, + pageBuilder: (context, state) { + return CustomTransition( + key: state.pageKey, + child: const AboutScreen(), + ); + }, + ), ]; } diff --git a/lib/views/browse/global_search_screen.dart b/lib/views/browse/global_search_screen.dart index 9f6ee82..e99dc30 100644 --- a/lib/views/browse/global_search_screen.dart +++ b/lib/views/browse/global_search_screen.dart @@ -10,9 +10,7 @@ import 'package:mangayomi/utils/cached_network.dart'; import 'package:mangayomi/utils/headers.dart'; import 'package:mangayomi/utils/lang.dart'; import 'package:mangayomi/views/library/search_text_form_field.dart'; -import 'package:mangayomi/views/manga/home/manga_home_screen.dart'; import 'package:mangayomi/views/widgets/bottom_text_widget.dart'; -import 'package:mangayomi/views/widgets/manga_image_card_widget.dart'; class GlobalSearchScreen extends ConsumerStatefulWidget { const GlobalSearchScreen({ diff --git a/lib/views/history/history_screen.dart b/lib/views/history/history_screen.dart index 94406d9..51073c6 100644 --- a/lib/views/history/history_screen.dart +++ b/lib/views/history/history_screen.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:intl/intl.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -52,6 +50,7 @@ class _HistoryScreenState extends ConsumerState { }, onSuffixPressed: () { _textEditingController.clear(); + setState(() {}); }, onPressed: () { setState(() { diff --git a/lib/views/library/library_screen.dart b/lib/views/library/library_screen.dart index dae643a..93259ad 100644 --- a/lib/views/library/library_screen.dart +++ b/lib/views/library/library_screen.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:hive_flutter/hive_flutter.dart'; @@ -62,6 +60,7 @@ class _LibraryScreenState extends ConsumerState controller: _textEditingController, onSuffixPressed: () { _textEditingController.clear(); + setState(() {}); }, ) : IconButton( diff --git a/lib/views/library/providers/library_state_provider.dart b/lib/views/library/providers/library_state_provider.dart index 7c8ccf6..fca9248 100644 --- a/lib/views/library/providers/library_state_provider.dart +++ b/lib/views/library/providers/library_state_provider.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:mangayomi/providers/hive_provider.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'library_state_provider.g.dart'; diff --git a/lib/views/library/search_text_form_field.dart b/lib/views/library/search_text_form_field.dart index 1158909..f13d57a 100644 --- a/lib/views/library/search_text_form_field.dart +++ b/lib/views/library/search_text_form_field.dart @@ -33,8 +33,10 @@ class SeachFormTextField extends StatelessWidget { icon: const Icon( Icons.arrow_back, )), - suffixIcon: IconButton( - onPressed: onSuffixPressed, icon: const Icon(Icons.clear)), + suffixIcon: controller.text.isEmpty + ? null + : IconButton( + onPressed: onSuffixPressed, icon: const Icon(Icons.clear)), enabledBorder: const OutlineInputBorder( borderSide: BorderSide.none, ), diff --git a/lib/views/manga/reader/providers/reader_controller_provider.dart b/lib/views/manga/reader/providers/reader_controller_provider.dart index 9146034..5a54fea 100644 --- a/lib/views/manga/reader/providers/reader_controller_provider.dart +++ b/lib/views/manga/reader/providers/reader_controller_provider.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:mangayomi/models/manga_history.dart'; import 'package:mangayomi/models/manga_reader.dart'; import 'package:mangayomi/models/model_manga.dart'; diff --git a/lib/views/more/about_screen.dart b/lib/views/more/about_screen.dart new file mode 100644 index 0000000..d7da38b --- /dev/null +++ b/lib/views/more/about_screen.dart @@ -0,0 +1,105 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:package_info_plus/package_info_plus.dart'; + +class AboutScreen extends StatefulWidget { + const AboutScreen({super.key}); + + @override + State createState() => _AboutScreenState(); +} + +class _AboutScreenState extends State { + Future _launchInBrowser(Uri url) async { + if (!await launchUrl( + url, + mode: LaunchMode.externalApplication, + )) { + throw 'Could not launch $url'; + } + } + + PackageInfo _packageInfo = PackageInfo( + appName: 'Unknown', + packageName: 'Unknown', + version: 'Unknown', + buildNumber: 'Unknown', + buildSignature: 'Unknown', + installerStore: 'Unknown', + ); + + Future _initPackageInfo() async { + final info = await PackageInfo.fromPlatform(); + if (mounted) { + setState(() { + _packageInfo = info; + }); + } + } + + @override + void initState() { + _initPackageInfo(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('About'), + ), + body: Column( + children: [ + const SizedBox(height: 150, child: Center(child: Text("LOGO"))), + Flexible( + flex: 3, + child: Column( + children: [ + const Divider( + color: Colors.grey, + ), + ListTile( + onTap: () {}, + title: const Text('Version'), + subtitle: Text( + 'Beta (${_packageInfo.version})', + style: const TextStyle(fontSize: 12), + ), + ), + ListTile( + onTap: () {}, + title: const Text('Check for update'), + ), + // ListTile( + // onTap: () {}, + // title: const Text("What's news"), + // ), + // ListTile( + // onTap: () {}, + // title: const Text('Help translation'), + // ), + // ListTile( + // onTap: () {}, + // title: const Text('Privacy policy'), + // ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + onPressed: () { + _launchInBrowser(Uri.parse( + 'https://github.com/kodjodevf/mangayomi')); + }, + icon: const Icon(FontAwesomeIcons.github)) + ], + ) + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/views/more/more_screen.dart b/lib/views/more/more_screen.dart index cba2d2a..75e163c 100644 --- a/lib/views/more/more_screen.dart +++ b/lib/views/more/more_screen.dart @@ -1,4 +1,3 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:mangayomi/views/more/widgets/incognito_mode_widget.dart'; @@ -77,7 +76,9 @@ class MoreScreen extends StatelessWidget { title: 'Settings', ), ListTileWidget( - onTap: () {}, + onTap: () { + context.push('/about'); + }, icon: Icons.info_outline, title: 'About', ), diff --git a/lib/views/more/settings/settings_screen.dart b/lib/views/more/settings/settings_screen.dart index e5badbc..f1df2e7 100644 --- a/lib/views/more/settings/settings_screen.dart +++ b/lib/views/more/settings/settings_screen.dart @@ -10,14 +10,32 @@ class SettingsScreen extends StatelessWidget { return Scaffold( appBar: AppBar( title: const Text("Settings"), - actions: [], ), body: Column( children: [ + ListTileWidget( + title: 'General', icon: Icons.tune_rounded, onTap: () {}), ListTileWidget( title: 'Appearance', icon: Icons.color_lens_rounded, onTap: () => context.push('/appearance')), + ListTileWidget( + title: 'Library', + icon: Icons.collections_bookmark_rounded, + onTap: () {}), + ListTileWidget( + title: 'Reader', + icon: Icons.chrome_reader_mode_rounded, + onTap: () {}), + ListTileWidget( + title: 'Explore', icon: Icons.explore_rounded, onTap: () {}), + ListTileWidget( + onTap: () { + context.push('/about'); + }, + icon: Icons.info_outline, + title: 'About', + ), ], ), ); diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 36cf813..7a9609b 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,9 +7,13 @@ #include "generated_plugin_registrant.h" #include +#include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) flutter_js_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterJsPlugin"); flutter_js_plugin_register_with_registrar(flutter_js_registrar); + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index ddb4e01..fb0b405 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST flutter_js + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index f5e3077..95b9d11 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,11 +6,15 @@ import FlutterMacOS import Foundation import flutter_js +import package_info_plus import path_provider_foundation import sqflite +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FlutterJsPlugin.register(with: registry.registrar(forPlugin: "FlutterJsPlugin")) + FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 09e4f20..e92921b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -608,6 +608,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + package_info_plus: + dependency: "direct main" + description: + name: package_info_plus + sha256: cbff87676c352d97116af6dbea05aa28c4d65eb0f6d5677a520c11a69ca9a24d + url: "https://pub.dev" + source: hosted + version: "3.1.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" path: dependency: transitive description: @@ -925,6 +941,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + url: "https://pub.dev" + source: hosted + version: "6.1.10" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8 + url: "https://pub.dev" + source: hosted + version: "6.0.26" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" + url: "https://pub.dev" + source: hosted + version: "3.0.4" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + url: "https://pub.dev" + source: hosted + version: "2.0.16" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd + url: "https://pub.dev" + source: hosted + version: "3.0.5" uuid: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index c68bb70..baa013d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -53,6 +53,8 @@ dependencies: # rive: ^0.10.3 google_fonts: ^4.0.3 # draggable_menu: ^0.2.0 + url_launcher: ^6.1.10 + package_info_plus: ^3.0.2 # The following adds the Cupertino Icons font to your application. diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 474a97c..61dfc98 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,8 +7,11 @@ #include "generated_plugin_registrant.h" #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { FlutterJsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("FlutterJsPlugin")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 9b1349a..cabb909 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST flutter_js + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST