From 4745f1338697863be9a4ffc07be00eb9b8b2be7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=AA=20Ho=C3=A0ng=20Long?= <58676739+LEHOANGLONG1999@users.noreply.github.com> Date: Thu, 10 Feb 2022 22:11:09 +0700 Subject: [PATCH] change ui --- .flutter-plugins | 52 +- .flutter-plugins-dependencies | 2 +- .idea/libraries/Dart_Packages.xml | 884 +++++++++++------- .idea/libraries/Dart_SDK.xml | 40 +- .idea/libraries/Flutter_Plugins.xml | 45 +- ios/Podfile.lock | 2 +- ios/Runner.xcodeproj/project.pbxproj | 15 +- lib/common/widgets/base_dialog.dart | 4 +- .../widgets/cached_network_image_custom.dart | 5 +- lib/common/widgets/item_category_story.dart | 55 +- lib/common/widgets/item_tag_story.dart | 28 +- lib/pages/classify/page.dart | 2 +- .../widget/list_category_story_read.dart | 4 +- .../classify/widget/tab_view_story_read.dart | 44 +- lib/pages/detail_story/controller.dart | 43 +- lib/pages/detail_story/page.dart | 40 +- .../detail_story/widget/container_rating.dart | 4 +- lib/pages/history_reading/controller.dart | 19 +- lib/pages/history_reading/page.dart | 2 +- .../history_reading/widget/item_guide.dart | 13 +- .../widget/item_story_history.dart | 11 +- lib/pages/home/controller.dart | 7 +- lib/pages/home/page.dart | 69 +- lib/pages/home/widget/container_story.dart | 19 +- .../home/widget/group_story_by_type.dart | 6 +- lib/pages/home/widget/item_story_home.dart | 2 + lib/pages/home/widget/tab_bar_widget.dart | 39 +- lib/pages/list_story/page.dart | 7 +- lib/pages/list_story/widget/item_story.dart | 8 +- lib/pages/main/controller.dart | 5 + lib/pages/main/page.dart | 10 +- lib/pages/read_story/controller.dart | 17 +- lib/pages/read_story/setting_read_page.dart | 2 +- .../read_story/widget/container_drawer.dart | 17 +- lib/pages/search/page.dart | 19 +- .../search/widget/container_init_search.dart | 35 +- .../widget/title_and_widget _search.dart | 2 +- lib/pages/storyboard/page.dart | 50 +- .../storyboard/widget/item_story_board.dart | 2 + lib/routes/app_pages.dart | 1 + lib/theme/asset_colors.dart | 2 +- lib/theme/theme_data.dart | 22 +- truyen_chu.iml | 216 +++++ 43 files changed, 1209 insertions(+), 662 deletions(-) diff --git a/.flutter-plugins b/.flutter-plugins index d8d92eb..1609627 100644 --- a/.flutter-plugins +++ b/.flutter-plugins @@ -1,27 +1,27 @@ # This is a generated file; do not edit or check into version control. -audio_session=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\audio_session-0.1.6+1\\ -battery=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\battery-2.0.3\\ -device_info=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\device_info-2.0.2\\ -firebase_analytics=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_analytics-8.3.4\\ -firebase_analytics_web=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_analytics_web-0.3.0+1\\ -firebase_core=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_core-1.8.0\\ -firebase_core_web=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_core_web-1.1.0\\ -google_mobile_ads=C:\\src\\flutter\\.pub-cache\\git\\googleads-mobile-flutter-b2051250b83633c5d3a533c6c82bee8728243ec6\\packages\\google_mobile_ads\\ -just_audio=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\just_audio-0.9.14\\ -just_audio_web=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\just_audio_web-0.4.2\\ -path_provider=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider-2.0.4\\ -path_provider_linux=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider_linux-2.1.0\\ -path_provider_macos=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider_macos-2.0.2\\ -path_provider_windows=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider_windows-2.0.3\\ -sqflite=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\sqflite-2.0.0+4\\ -url_launcher=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\url_launcher-6.0.10\\ -url_launcher_linux=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\url_launcher_linux-2.0.2\\ -url_launcher_macos=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\url_launcher_macos-2.0.2\\ -url_launcher_web=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\url_launcher_web-2.0.4\\ -url_launcher_windows=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\url_launcher_windows-2.0.2\\ -video_player=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\video_player-2.2.3\\ -video_player_web=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\video_player_web-2.0.4\\ -wakelock=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\wakelock-0.5.6\\ -wakelock_macos=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\wakelock_macos-0.4.0\\ -wakelock_web=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\wakelock_web-0.4.0\\ -webview_flutter=C:\\src\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\webview_flutter-2.0.13\\ +audio_session=/Users/mac/.pub-cache/hosted/pub.dartlang.org/audio_session-0.1.6+1/ +battery=/Users/mac/.pub-cache/hosted/pub.dartlang.org/battery-2.0.3/ +device_info=/Users/mac/.pub-cache/hosted/pub.dartlang.org/device_info-2.0.3/ +firebase_analytics=/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_analytics-8.3.4/ +firebase_analytics_web=/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_analytics_web-0.3.0+1/ +firebase_core=/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.10.6/ +firebase_core_web=/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-1.5.3/ +google_mobile_ads=/Users/mac/.pub-cache/git/googleads-mobile-flutter-b2051250b83633c5d3a533c6c82bee8728243ec6/packages/google_mobile_ads/ +just_audio=/Users/mac/.pub-cache/hosted/pub.dartlang.org/just_audio-0.9.18/ +just_audio_web=/Users/mac/.pub-cache/hosted/pub.dartlang.org/just_audio_web-0.4.2/ +path_provider=/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider-2.0.4/ +path_provider_linux=/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.1.4/ +path_provider_macos=/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-2.0.4/ +path_provider_windows=/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.4/ +sqflite=/Users/mac/.pub-cache/hosted/pub.dartlang.org/sqflite-2.0.1/ +url_launcher=/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.10/ +url_launcher_linux=/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-2.0.2/ +url_launcher_macos=/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-2.0.2/ +url_launcher_web=/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.5/ +url_launcher_windows=/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-2.0.2/ +video_player=/Users/mac/.pub-cache/hosted/pub.dartlang.org/video_player-2.2.3/ +video_player_web=/Users/mac/.pub-cache/hosted/pub.dartlang.org/video_player_web-2.0.5/ +wakelock=/Users/mac/.pub-cache/hosted/pub.dartlang.org/wakelock-0.5.6/ +wakelock_macos=/Users/mac/.pub-cache/hosted/pub.dartlang.org/wakelock_macos-0.4.0/ +wakelock_web=/Users/mac/.pub-cache/hosted/pub.dartlang.org/wakelock_web-0.4.0/ +webview_flutter=/Users/mac/.pub-cache/hosted/pub.dartlang.org/webview_flutter-2.0.13/ diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 334191f..2835c29 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"audio_session","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\audio_session-0.1.6+1\\\\","dependencies":[]},{"name":"battery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\battery-2.0.3\\\\","dependencies":[]},{"name":"device_info","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\device_info-2.0.2\\\\","dependencies":[]},{"name":"firebase_analytics","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\firebase_analytics-8.3.4\\\\","dependencies":["firebase_core"]},{"name":"firebase_core","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\firebase_core-1.8.0\\\\","dependencies":[]},{"name":"google_mobile_ads","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\git\\\\googleads-mobile-flutter-b2051250b83633c5d3a533c6c82bee8728243ec6\\\\packages\\\\google_mobile_ads\\\\","dependencies":[]},{"name":"just_audio","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\just_audio-0.9.14\\\\","dependencies":["audio_session","path_provider"]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.4\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-2.0.0+4\\\\","dependencies":[]},{"name":"url_launcher","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-6.0.10\\\\","dependencies":[]},{"name":"video_player","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player-2.2.3\\\\","dependencies":[]},{"name":"wakelock","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\wakelock-0.5.6\\\\","dependencies":[]},{"name":"webview_flutter","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\webview_flutter-2.0.13\\\\","dependencies":[]}],"android":[{"name":"audio_session","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\audio_session-0.1.6+1\\\\","dependencies":[]},{"name":"battery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\battery-2.0.3\\\\","dependencies":[]},{"name":"device_info","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\device_info-2.0.2\\\\","dependencies":[]},{"name":"firebase_analytics","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\firebase_analytics-8.3.4\\\\","dependencies":["firebase_core"]},{"name":"firebase_core","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\firebase_core-1.8.0\\\\","dependencies":[]},{"name":"google_mobile_ads","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\git\\\\googleads-mobile-flutter-b2051250b83633c5d3a533c6c82bee8728243ec6\\\\packages\\\\google_mobile_ads\\\\","dependencies":[]},{"name":"just_audio","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\just_audio-0.9.14\\\\","dependencies":["audio_session","path_provider"]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.4\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-2.0.0+4\\\\","dependencies":[]},{"name":"url_launcher","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher-6.0.10\\\\","dependencies":[]},{"name":"video_player","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player-2.2.3\\\\","dependencies":[]},{"name":"wakelock","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\wakelock-0.5.6\\\\","dependencies":[]},{"name":"webview_flutter","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\webview_flutter-2.0.13\\\\","dependencies":[]}],"macos":[{"name":"audio_session","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\audio_session-0.1.6+1\\\\","dependencies":[]},{"name":"firebase_core","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\firebase_core-1.8.0\\\\","dependencies":[]},{"name":"just_audio","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\just_audio-0.9.14\\\\","dependencies":["audio_session"]},{"name":"path_provider_macos","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_macos-2.0.2\\\\","dependencies":[]},{"name":"sqflite","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\sqflite-2.0.0+4\\\\","dependencies":[]},{"name":"url_launcher_macos","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_macos-2.0.2\\\\","dependencies":[]},{"name":"wakelock_macos","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\wakelock_macos-0.4.0\\\\","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_linux-2.1.0\\\\","dependencies":[]},{"name":"url_launcher_linux","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_linux-2.0.2\\\\","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_windows-2.0.3\\\\","dependencies":[]},{"name":"url_launcher_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_windows-2.0.2\\\\","dependencies":[]}],"web":[{"name":"audio_session","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\audio_session-0.1.6+1\\\\","dependencies":[]},{"name":"firebase_analytics_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\firebase_analytics_web-0.3.0+1\\\\","dependencies":[]},{"name":"firebase_core_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\firebase_core_web-1.1.0\\\\","dependencies":[]},{"name":"just_audio_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\just_audio_web-0.4.2\\\\","dependencies":[]},{"name":"url_launcher_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\url_launcher_web-2.0.4\\\\","dependencies":[]},{"name":"video_player_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_web-2.0.4\\\\","dependencies":[]},{"name":"wakelock_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\wakelock_web-0.4.0\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"audio_session","dependencies":[]},{"name":"battery","dependencies":[]},{"name":"device_info","dependencies":[]},{"name":"firebase_analytics","dependencies":["firebase_analytics_web","firebase_core"]},{"name":"firebase_analytics_web","dependencies":[]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"google_mobile_ads","dependencies":[]},{"name":"just_audio","dependencies":["just_audio_web","audio_session","path_provider"]},{"name":"just_audio_web","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_linux","path_provider_macos","path_provider_windows"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"sqflite","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]},{"name":"video_player","dependencies":["video_player_web"]},{"name":"video_player_web","dependencies":[]},{"name":"wakelock","dependencies":["wakelock_macos","wakelock_web"]},{"name":"wakelock_macos","dependencies":[]},{"name":"wakelock_web","dependencies":[]},{"name":"webview_flutter","dependencies":[]}],"date_created":"2022-01-06 16:19:12.723565","version":"2.2.3"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"audio_session","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/audio_session-0.1.6+1/","dependencies":[]},{"name":"battery","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/battery-2.0.3/","dependencies":[]},{"name":"device_info","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/device_info-2.0.3/","dependencies":[]},{"name":"firebase_analytics","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_analytics-8.3.4/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.10.6/","dependencies":[]},{"name":"google_mobile_ads","path":"/Users/mac/.pub-cache/git/googleads-mobile-flutter-b2051250b83633c5d3a533c6c82bee8728243ec6/packages/google_mobile_ads/","dependencies":[]},{"name":"just_audio","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/just_audio-0.9.18/","dependencies":["audio_session","path_provider"]},{"name":"path_provider","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider-2.0.4/","dependencies":[]},{"name":"sqflite","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/sqflite-2.0.1/","dependencies":[]},{"name":"url_launcher","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.10/","dependencies":[]},{"name":"video_player","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/video_player-2.2.3/","dependencies":[]},{"name":"wakelock","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/wakelock-0.5.6/","dependencies":[]},{"name":"webview_flutter","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/webview_flutter-2.0.13/","dependencies":[]}],"android":[{"name":"audio_session","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/audio_session-0.1.6+1/","dependencies":[]},{"name":"battery","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/battery-2.0.3/","dependencies":[]},{"name":"device_info","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/device_info-2.0.3/","dependencies":[]},{"name":"firebase_analytics","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_analytics-8.3.4/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.10.6/","dependencies":[]},{"name":"google_mobile_ads","path":"/Users/mac/.pub-cache/git/googleads-mobile-flutter-b2051250b83633c5d3a533c6c82bee8728243ec6/packages/google_mobile_ads/","dependencies":[]},{"name":"just_audio","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/just_audio-0.9.18/","dependencies":["audio_session","path_provider"]},{"name":"path_provider","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider-2.0.4/","dependencies":[]},{"name":"sqflite","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/sqflite-2.0.1/","dependencies":[]},{"name":"url_launcher","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.10/","dependencies":[]},{"name":"video_player","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/video_player-2.2.3/","dependencies":[]},{"name":"wakelock","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/wakelock-0.5.6/","dependencies":[]},{"name":"webview_flutter","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/webview_flutter-2.0.13/","dependencies":[]}],"macos":[{"name":"audio_session","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/audio_session-0.1.6+1/","dependencies":[]},{"name":"firebase_core","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.10.6/","dependencies":[]},{"name":"just_audio","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/just_audio-0.9.18/","dependencies":["audio_session"]},{"name":"path_provider_macos","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-2.0.4/","dependencies":[]},{"name":"sqflite","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/sqflite-2.0.1/","dependencies":[]},{"name":"url_launcher_macos","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-2.0.2/","dependencies":[]},{"name":"wakelock_macos","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/wakelock_macos-0.4.0/","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.1.4/","dependencies":[]},{"name":"url_launcher_linux","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-2.0.2/","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.4/","dependencies":[]},{"name":"url_launcher_windows","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-2.0.2/","dependencies":[]}],"web":[{"name":"audio_session","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/audio_session-0.1.6+1/","dependencies":[]},{"name":"firebase_analytics_web","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_analytics_web-0.3.0+1/","dependencies":[]},{"name":"firebase_core_web","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-1.5.3/","dependencies":[]},{"name":"just_audio_web","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/just_audio_web-0.4.2/","dependencies":[]},{"name":"url_launcher_web","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.5/","dependencies":[]},{"name":"video_player_web","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/video_player_web-2.0.5/","dependencies":[]},{"name":"wakelock_web","path":"/Users/mac/.pub-cache/hosted/pub.dartlang.org/wakelock_web-0.4.0/","dependencies":[]}]},"dependencyGraph":[{"name":"audio_session","dependencies":[]},{"name":"battery","dependencies":[]},{"name":"device_info","dependencies":[]},{"name":"firebase_analytics","dependencies":["firebase_analytics_web","firebase_core"]},{"name":"firebase_analytics_web","dependencies":[]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"google_mobile_ads","dependencies":[]},{"name":"just_audio","dependencies":["just_audio_web","audio_session","path_provider"]},{"name":"just_audio_web","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_linux","path_provider_macos","path_provider_windows"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"sqflite","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]},{"name":"video_player","dependencies":["video_player_web"]},{"name":"video_player_web","dependencies":[]},{"name":"wakelock","dependencies":["wakelock_macos","wakelock_web"]},{"name":"wakelock_macos","dependencies":[]},{"name":"wakelock_web","dependencies":[]},{"name":"webview_flutter","dependencies":[]}],"date_created":"2022-02-10 20:54:15.525653","version":"2.2.3"} \ No newline at end of file diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index c33156d..1111b43 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,1254 +5,1514 @@ - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + - + + + + + + - - - - + + + + + + - - + + + + + + - + + + + + + - - - + + + + + + - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + - - - + + + + + + - - - - - + + + + + + - - + + + + + + - + + + + + + - - - - - - - - + + + + + + - - - - - + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index 51ea5fd..1889af4 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml index fd3c39d..dfc750d 100644 --- a/.idea/libraries/Flutter_Plugins.xml +++ b/.idea/libraries/Flutter_Plugins.xml @@ -1,28 +1,29 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 6983bd9..17529a9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -200,7 +200,7 @@ SPEC CHECKSUMS: FirebaseCore: 599ee609343eaf4941bd188f85e3aa077ffe325b FirebaseCoreDiagnostics: 56fb7216d87e0e6ec2feddefa9d8a392fe8b2c18 FirebaseInstallations: 830327b45345ffc859eaa9c17bcd5ae893fd5425 - Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a + Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a Google-Mobile-Ads-SDK: be2192b51b74d74a6ed70590c2e8275412f1b71e google_mobile_ads: a2f8b901601401bf7e691b4224d5992e9a37599a diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 494a295..d8d76bd 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -346,8 +346,10 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 5; - DEVELOPMENT_TEAM = XR53Z2376X; + DEVELOPMENT_TEAM = NKCWLF27F9; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; @@ -358,6 +360,7 @@ MARKETING_VERSION = 1.0.4; PRODUCT_BUNDLE_IDENTIFIER = com.customer.truyenmesay; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -478,8 +481,10 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 5; - DEVELOPMENT_TEAM = XR53Z2376X; + DEVELOPMENT_TEAM = NKCWLF27F9; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; @@ -490,6 +495,7 @@ MARKETING_VERSION = 1.0.4; PRODUCT_BUNDLE_IDENTIFIER = com.customer.truyenmesay; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -504,8 +510,10 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 5; - DEVELOPMENT_TEAM = XR53Z2376X; + DEVELOPMENT_TEAM = NKCWLF27F9; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; @@ -516,6 +524,7 @@ MARKETING_VERSION = 1.0.4; PRODUCT_BUNDLE_IDENTIFIER = com.customer.truyenmesay; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; diff --git a/lib/common/widgets/base_dialog.dart b/lib/common/widgets/base_dialog.dart index 56eb4fd..822f8e0 100644 --- a/lib/common/widgets/base_dialog.dart +++ b/lib/common/widgets/base_dialog.dart @@ -80,9 +80,11 @@ class DialogQuestion extends StatelessWidget { child: Container( alignment: Alignment.center, width: double.infinity, - height: 65, + margin: const EdgeInsets.symmetric(horizontal: 20,vertical: 10), + height: 50, decoration: BoxDecoration( color: isPrimary ? _theme.primaryColor : Colors.transparent, + borderRadius: BorderRadius.circular(10), border: Border.all( color: Colors.black.withOpacity(0.09), ), diff --git a/lib/common/widgets/cached_network_image_custom.dart b/lib/common/widgets/cached_network_image_custom.dart index a0e12a8..57363b1 100644 --- a/lib/common/widgets/cached_network_image_custom.dart +++ b/lib/common/widgets/cached_network_image_custom.dart @@ -3,6 +3,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; import '../../theme/theme.dart'; +import 'package:truyen_chu/common/common.dart'; class CachedImageNetworkWidget extends StatelessWidget { final String url; @@ -40,9 +41,7 @@ class CachedImageNetworkWidget extends StatelessWidget { width: double.infinity, height: double.infinity, color: AssetColors.shimmerBaseColor, - child: const Icon( - Icons.error, - ), + child: Image.asset('img_splash'.assetPathPNG,fit: BoxFit.cover,), ); } } diff --git a/lib/common/widgets/item_category_story.dart b/lib/common/widgets/item_category_story.dart index b4bd18d..b25824e 100644 --- a/lib/common/widgets/item_category_story.dart +++ b/lib/common/widgets/item_category_story.dart @@ -9,46 +9,35 @@ class ItemCategoryStory extends StatelessWidget { final VoidCallback? onTap; final bool showColor; - ItemCategoryStory({required this.model, this.color = Colors.white, this.onTap, this.showColor = true}); + ItemCategoryStory( + {required this.model, this.color = Colors.white, this.onTap, this.showColor = true}); final _theme = Get.theme; @override Widget build(BuildContext context) { return InkWell( onTap: onTap, - child: Container( - alignment: Alignment.center, - padding: const EdgeInsets.symmetric(horizontal: 10), - height: 50, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100), - color: Colors.white, - ), - child: Row( - children: [ - if (showColor) - Container( - width: 40, - height: 40, - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: color, - ), - child: Image.asset('ic_${model.id}'.assetPathPNG), - ), - if (showColor) 10.horizontalSpace, - Expanded( - child: Center( - child: Text( - model.name ?? '', - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: _theme.textTheme.subtitle2!.medium, - ), + child: Stack( + alignment: Alignment.topLeft, + children: [ + Container( + alignment: Alignment.center, + padding: const EdgeInsets.symmetric(horizontal: 10), + height: 50, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.white, + ), + child: Center( + child: Text( + model.name ?? '', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: _theme.textTheme.subtitle2!.medium, ), ), - ], - ), + ), + Container(width: 8,height: 8,color: color), + ], ), ); } diff --git a/lib/common/widgets/item_tag_story.dart b/lib/common/widgets/item_tag_story.dart index 590ac8d..d0133f4 100644 --- a/lib/common/widgets/item_tag_story.dart +++ b/lib/common/widgets/item_tag_story.dart @@ -13,18 +13,22 @@ class ItemTagStory extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: onTap, - child: Container( - height: 45, - padding: const EdgeInsets.symmetric(horizontal: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(100), - border: Border.all(color: color, width: 1), - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [Text(title, style: _theme.textTheme.subtitle1!.medium, maxLines: 1, overflow: TextOverflow.ellipsis)], - ), + child: Stack( + alignment: Alignment.bottomRight, + children: [ + Container( + height: 45, + padding: const EdgeInsets.symmetric(horizontal: 10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: Center( + child: Text(title, style: _theme.textTheme.subtitle1!.medium, maxLines: 1, overflow: TextOverflow.ellipsis), + ) + ), + Container(width: 8,height: 8,color: color), + ], ), ); } diff --git a/lib/pages/classify/page.dart b/lib/pages/classify/page.dart index f233a9a..248e20a 100644 --- a/lib/pages/classify/page.dart +++ b/lib/pages/classify/page.dart @@ -14,7 +14,7 @@ class ClassifyPage extends GetView { return Scaffold( backgroundColor: AssetColors.colorBlueF2F4FF, appBar: AppBar( - title: Text('Phân loại',style: _textTheme.headline6!.textBlack,), + title: Text('Phân loại',style: _textTheme.headline6!.textWhite,), ), body: TabViewStoryRead(), // TabBarTypeClassify(tabLabels: [ diff --git a/lib/pages/classify/widget/list_category_story_read.dart b/lib/pages/classify/widget/list_category_story_read.dart index 0dfaa8c..18481e4 100644 --- a/lib/pages/classify/widget/list_category_story_read.dart +++ b/lib/pages/classify/widget/list_category_story_read.dart @@ -16,7 +16,7 @@ class ListCategoryStoryRead extends StatelessWidget { child: Column( children: [ _buildMainCategory(), - _buildSubCategory(), + // _buildSubCategory(), ], ), ); @@ -25,7 +25,7 @@ class ListCategoryStoryRead extends StatelessWidget { } Widget _buildMainCategory() { - final _models = _controller.mainCategory; + final _models = _controller.mainCategory+_controller.subCategory; return GridView.count( shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), diff --git a/lib/pages/classify/widget/tab_view_story_read.dart b/lib/pages/classify/widget/tab_view_story_read.dart index c05d70d..24cd815 100644 --- a/lib/pages/classify/widget/tab_view_story_read.dart +++ b/lib/pages/classify/widget/tab_view_story_read.dart @@ -48,38 +48,18 @@ class _TabViewStoryReadState extends State with SingleTickerPr Widget _buildTabBar() { final theme = Theme.of(context); - return Obx( - () => TabBar( - controller: _tabController, - unselectedLabelStyle: theme.textTheme.subtitle1!.regular, - unselectedLabelColor: theme.hintColor, - labelStyle: theme.textTheme.subtitle1, - labelColor: Colors.black, - isScrollable: true, - labelPadding: EdgeInsets.only(right: 10), - tabs: _listTitle.asMap().keys.map((index) { - final _isFocus = index == _currentIndex.value; - return Container( - height: 47, - padding: UIHelper.horizontalEdgeInsets20, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100), - color: _isFocus ? theme.primaryColor : AssetColors.colorGreyE7E7E7, - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - _listTitle[index], - style: theme.textTheme.subtitle1!.weight(_isFocus ? FontWeight.bold : FontWeight.normal), - ), - ], - ), - ); - }).toList(), - onTap: (index) => _currentIndex.value = index, - indicator: const BoxDecoration(), - ), + return TabBar( + controller: _tabController, + unselectedLabelStyle: theme.textTheme.subtitle1!.regular, + unselectedLabelColor: theme.hintColor, + labelStyle: theme.textTheme.subtitle1, + labelColor: Colors.black, + labelPadding: EdgeInsets.only(right: 10), + tabs: _listTitle.map((item) { + return Tab(text: item); + }).toList(), + onTap: (index) => _currentIndex.value = index, + indicatorColor: AssetColors.primary, ); } diff --git a/lib/pages/detail_story/controller.dart b/lib/pages/detail_story/controller.dart index 32f75d1..731d372 100644 --- a/lib/pages/detail_story/controller.dart +++ b/lib/pages/detail_story/controller.dart @@ -5,6 +5,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:truyen_chu/common/common.dart'; +import 'package:truyen_chu/pages/pages.dart'; import 'package:truyen_chu/theme/theme.dart'; import '../../biz/app_controller.dart'; import '../../main.dart'; @@ -21,7 +22,8 @@ class DetailStoryController extends GetxController { final DBService dbService; - DetailStoryController({required this.chapterRepository, required this.storyRepository, required this.dbService}); + DetailStoryController( + {required this.chapterRepository, required this.storyRepository, required this.dbService}); int storyId = -1; @@ -59,7 +61,7 @@ class DetailStoryController extends GetxController { int _totalPageChapter = 0; - final backgroundColor = AssetColors.color4F1F33.obs; + final backgroundColor = AssetColors.primary.obs; late RewardedAd _rewardedAd; @@ -93,7 +95,7 @@ class DetailStoryController extends GetxController { EasyLoading.dismiss(); _checkStoryBoardLocal(); final _random = Random().nextInt(8); - backgroundColor.value = AssetColors.colorRandomDetail[_random]; + backgroundColor.value = AssetColors.primary; } catch (e) { EasyLoading.dismiss(); EasyLoading.showError('Đã xảy ra lỗi!'); @@ -112,7 +114,10 @@ class DetailStoryController extends GetxController { await analytics.setUserProperty(name: DETAIL_STORY, value: '${storyModel.value.id}'); await analytics.logEvent(name: EVENT_DETAIL, parameters: {'id': storyModel.value.id}); } else { - Get.dialog(DialogOneButton(title: 'Thông báo', message: 'Truyện đã bị xóa\nVui lòng chọn truyện khác.', titleButton: 'Đồng ý')); + Get.dialog(DialogOneButton( + title: 'Thông báo', + message: 'Truyện đã bị xóa\nVui lòng chọn truyện khác.', + titleButton: 'Đồng ý')); return; } } @@ -122,7 +127,8 @@ class DetailStoryController extends GetxController { return; } _loading = true; - final _response = await chapterRepository.fetchChapterTitleById(storyId: storyId, page: _currentPage); + final _response = + await chapterRepository.fetchChapterTitleById(storyId: storyId, page: _currentPage); final _list = _response.items; if (_totalPageChapter == 0) { _totalPageChapter = _response.totalPages; @@ -153,7 +159,7 @@ class DetailStoryController extends GetxController { final _boardLocalModel = storyModel.value.toStoryBroadLocalModel; final _response = await dbService.addStoryBoard(model: _boardLocalModel); if (_response) { - EasyLoading.showSuccess('Thêm vào tủ truyện thành công!'); + showSnackBarSuccess(message: 'Thêm vào tủ truyện thành công!'); showButtonAddBoard.value = false; appController.isRefreshStoryBoard.value = true; } @@ -190,7 +196,8 @@ class DetailStoryController extends GetxController { return; } _loading = true; - final _response = await chapterRepository.fetchChapterTitleById(storyId: storyId, page: _currentPage); + final _response = + await chapterRepository.fetchChapterTitleById(storyId: storyId, page: _currentPage); final _list = _response.items; _list.sort((a, b) => b.id.compareTo(a.id)); if (_currentPage > 1) { @@ -208,7 +215,10 @@ class DetailStoryController extends GetxController { await analytics.setUserProperty(name: AUTHOR_STORY, value: '${storyModel.value.authorId}'); await analytics.logEvent(name: EVENT_AUTHOR, parameters: {'id': storyModel.value.authorId}); if (_isFormList) { - final _args = {'title': storyModel.value.authorName ?? '', 'url': '/stories/?author_id=${storyModel.value.authorId ?? -1}'}; + final _args = { + 'title': storyModel.value.authorName ?? '', + 'url': '/stories/?author_id=${storyModel.value.authorId ?? -1}' + }; Get.back(result: _args); } else { final _result = await Get.toNamed(Routes.LIST_STORY, arguments: { @@ -255,9 +265,11 @@ class DetailStoryController extends GetxController { void onTapSendRatting() async { try { EasyLoading.show(); - final _response = await storyRepository.reviewStory(storyId: storyId, star: countStar.value.toInt()); + final _response = + await storyRepository.reviewStory(storyId: storyId, star: countStar.value.toInt()); if (_response) { - EasyLoading.showSuccess('Đánh giá thành công!'); + showSnackBarSuccess(message: 'Đánh giá thành công!'); + showReview.value = false; } EasyLoading.dismiss(); @@ -289,10 +301,15 @@ class DetailStoryController extends GetxController { }); } - String replaceHtmlData(String content, int maxSubString, {String firstStart = "[", String lastEnd = "]"}) { - return content.replaceFirst(subStringBetweenTwo(content, firstStart, lastEnd), "").length < maxSubString + 10 + String replaceHtmlData(String content, int maxSubString, + {String firstStart = "[", String lastEnd = "]"}) { + return content.replaceFirst(subStringBetweenTwo(content, firstStart, lastEnd), "").length < + maxSubString + 10 ? content.replaceFirst(subStringBetweenTwo(content, firstStart, lastEnd), "") - : content.replaceFirst(subStringBetweenTwo(content, firstStart, lastEnd), "").substring(0, maxSubString) + "..."; + : content + .replaceFirst(subStringBetweenTwo(content, firstStart, lastEnd), "") + .substring(0, maxSubString) + + "..."; } String subStringBetweenTwo(String content, String start, String end) { diff --git a/lib/pages/detail_story/page.dart b/lib/pages/detail_story/page.dart index 9a3eaaf..06ec768 100644 --- a/lib/pages/detail_story/page.dart +++ b/lib/pages/detail_story/page.dart @@ -69,6 +69,18 @@ class DetailStoryPage extends GetView { padding: UIHelper.horizontalEdgeInsets20, child: Row( children: [ + Container( + width: 100, + height: 130, + clipBehavior: Clip.antiAliasWithSaveLayer, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + ), + child: CachedImageNetworkWidget( + url: _model.thumbnail ?? '', + ), + ), + 20.horizontalSpace, Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -77,7 +89,7 @@ class DetailStoryPage extends GetView { _model.title ?? '', maxLines: 3, overflow: TextOverflow.ellipsis, - style: _theme.textTheme.subtitle1!.textWhite.medium, + style: _theme.textTheme.headline6!.textWhite.semiBold, ), const Spacer(), Row( @@ -86,7 +98,7 @@ class DetailStoryPage extends GetView { onTap: controller.onTapAuthorTitle, child: Text( '${_model.authorName ?? ''}', - style: _theme.textTheme.subtitle2!.textColor(AssetColors.colorGreyB4B2B2).regular, + style: _theme.textTheme.subtitle2!.regular.textWhite, ), ).paddingOnly(bottom: 5), 5.horizontalSpace, @@ -96,23 +108,11 @@ class DetailStoryPage extends GetView { 10.verticalSpace, Text( '${(_model.isFull ?? false) ? 'Hoàn thành' : 'Đang ra'} - Chương ${_model.chap ?? 0}', - style: _theme.textTheme.subtitle2!.textColor(AssetColors.colorGreyB4B2B2).regular, + style: _theme.textTheme.subtitle2!.textWhite.regular, ), ], ).wrapHeight(130), ), - 20.horizontalSpace, - Container( - width: 100, - height: 130, - clipBehavior: Clip.antiAliasWithSaveLayer, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(4), - ), - child: CachedImageNetworkWidget( - url: _model.thumbnail ?? '', - ), - ), ], ), ); @@ -127,10 +127,6 @@ class DetailStoryPage extends GetView { clipBehavior: Clip.antiAliasWithSaveLayer, decoration: const BoxDecoration( color: Colors.white, - borderRadius: const BorderRadius.only( - topRight: Radius.circular(20), - topLeft: Radius.circular(20), - ), ), child: NotificationListener( onNotification: (scrollInfo) { @@ -174,9 +170,9 @@ class DetailStoryPage extends GetView { child: AdWidget(ad: controller.appController.bannerAdMedium3), ), 20.verticalSpace, - _buildIntroduce(), - const Divider(height: 40), ContainerRating(), + const Divider(height: 40), + _buildIntroduce(), 30.verticalSpace, ], ).paddingSymmetric(horizontal: 20); @@ -222,7 +218,7 @@ class DetailStoryPage extends GetView { 5.horizontalSpace, Icon( Icons.star, - color: _theme.primaryColor, + color: Colors.yellow, ), ], ), diff --git a/lib/pages/detail_story/widget/container_rating.dart b/lib/pages/detail_story/widget/container_rating.dart index f170535..50708ef 100644 --- a/lib/pages/detail_story/widget/container_rating.dart +++ b/lib/pages/detail_story/widget/container_rating.dart @@ -19,14 +19,14 @@ class ContainerRating extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - 'Đánh giá nhanh', + 'Đánh giá', style: _theme.textTheme.subtitle1, ), TextButton( style: TextButton.styleFrom(onSurface: Colors.grey), onPressed: _controller.countStar.value > 0 ? _controller.onTapSendRatting : null, child: Text( - 'Gửi >>', + 'Gửi', ), ), ], diff --git a/lib/pages/history_reading/controller.dart b/lib/pages/history_reading/controller.dart index bd73836..9221d0a 100644 --- a/lib/pages/history_reading/controller.dart +++ b/lib/pages/history_reading/controller.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import '../../biz/biz.dart'; @@ -19,10 +20,10 @@ class HistoryReadingController extends GetxController { void onInit() { super.onInit(); analytics.setCurrentScreen(screenName: Routes.HISTORY_READING); - _initLoadData(); + initLoadData(); } - void _initLoadData() async { + void initLoadData() async { try { EasyLoading.show(); await _fetchStoryHistoryLocal(); @@ -45,7 +46,7 @@ class HistoryReadingController extends GetxController { final _response = await dbService.addStoryBoard(model: _boardLocalModel); EasyLoading.dismiss(); if (_response) { - EasyLoading.showSuccess('Thêm vào tủ truyện thành công!'); + showSnackBarSuccess(message: 'Thêm vào tủ truyện thành công!'); _appController.isRefreshStoryBoard.value = true; } @@ -73,9 +74,9 @@ class HistoryReadingController extends GetxController { if (_response) { listStory.removeWhere((element) => element.id == id); listStory.refresh(); - EasyLoading.showSuccess('Xóa thành công!'); + showSnackBarSuccess(message: 'Xóa thành công!'); } else { - EasyLoading.showError('Xóa thất bại!'); + showSnackBarFailed(message: 'Xóa thất bại!'); } } catch (e) { EasyLoading.dismiss(); @@ -93,3 +94,11 @@ class HistoryReadingController extends GetxController { _fetchStoryHistoryLocal(); } } + +void showSnackBarSuccess({required String message}) { + Get.snackbar('Thành công', message, backgroundColor: Colors.green,colorText: Colors.white); +} + +void showSnackBarFailed({required String message}) { + Get.snackbar('Lỗi', message, backgroundColor: Colors.red,colorText: Colors.white); +} diff --git a/lib/pages/history_reading/page.dart b/lib/pages/history_reading/page.dart index 6ce8949..530a89c 100644 --- a/lib/pages/history_reading/page.dart +++ b/lib/pages/history_reading/page.dart @@ -11,7 +11,7 @@ class HistoryReadingPage extends GetView { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('Lịch sử truyện đã đọc',style: _textTheme.headline6!.textBlack,), + title: Text('Lịch sử',style: _textTheme.headline6!.textWhite,), actions: [ItemGuide()], ), body: Obx( diff --git a/lib/pages/history_reading/widget/item_guide.dart b/lib/pages/history_reading/widget/item_guide.dart index 37fb22a..bfadd5f 100644 --- a/lib/pages/history_reading/widget/item_guide.dart +++ b/lib/pages/history_reading/widget/item_guide.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:popover/popover.dart'; +import 'package:truyen_chu/common/common.dart'; class ItemGuide extends StatelessWidget { @override @@ -12,7 +13,15 @@ class ItemGuide extends StatelessWidget { bodyBuilder: (context) => Container( padding: const EdgeInsets.all(12), color: Colors.white, - child: Text('Vuốt sang trái để xóa truyện trong lịch sử.'), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Vuốt sang trái để xóa truyện trong lịch sử.'), + 10.verticalSpace, + Text('Bấm button + để thêm vào tủ truyện'), + ], + ), ), onPop: () => print('Popover was popped!'), direction: PopoverDirection.bottom, @@ -21,7 +30,7 @@ class ItemGuide extends StatelessWidget { arrowWidth: 10, ); }, - icon: const Icon(Icons.error_outline), + icon: const Icon(Icons.speaker_notes_outlined), ); } } diff --git a/lib/pages/history_reading/widget/item_story_history.dart b/lib/pages/history_reading/widget/item_story_history.dart index 135e3f2..631c952 100644 --- a/lib/pages/history_reading/widget/item_story_history.dart +++ b/lib/pages/history_reading/widget/item_story_history.dart @@ -54,11 +54,15 @@ class ItemStoryHistory extends StatelessWidget { height: 100, margin: UIHelper.horizontalEdgeInsets20, child: Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildImage(), 15.horizontalSpace, _buildContent(), 10.horizontalSpace, + Obx( + () => Icon(Icons.add).elevatedButton(onPressed: _isAdBoard.value ? null : _onAdd).wrapHeight(30), + ), ], ), ), @@ -86,7 +90,7 @@ class ItemStoryHistory extends StatelessWidget { children: [ Text( model.title ?? '', - maxLines: 2, + maxLines: 4, overflow: TextOverflow.ellipsis, style: _theme.textTheme.subtitle1!.medium.heightLine(16), ), @@ -94,10 +98,7 @@ class ItemStoryHistory extends StatelessWidget { 'Đang xem chương ${model.chapterId} - Trang ${model.pageIndex}', style: _theme.textTheme.caption!.textBFBFBF, ), - const Spacer(), - Obx( - () => Text('Thêm vào tủ truyện').elevatedButton(onPressed: _isAdBoard.value ? null : _onAdd).wrapHeight(30), - ), + ], ), ); diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index 8bdf886..dae177d 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -86,14 +86,12 @@ class HomeController extends GetxController { final _response = await repository.fetchStoryHotByTagId(tagId: tagIdHotSelected); _storyHots.addAll({'$tagIdHotSelected': _response}); } - if (isJump) { - pageControllerHot.jumpToPage(0); - } listStoryHots.value = _storyHots['$tagIdHotSelected']; listStoryHots.refresh(); _addTheFistStoryBoard(); } catch (e) { + print(e); EasyLoading.showError('Đã xảy ra lỗi!'); } } @@ -104,7 +102,6 @@ class HomeController extends GetxController { final _response = await repository.fetchStoryUpdatedByTagId(tagId: tagIdUpdateSelected); _storyUpdated.addAll({'$tagIdUpdateSelected': _response}); } - if (isJump) pageControllerUpdated.jumpToPage(0); listStoryUpdated.value = _storyUpdated['$tagIdUpdateSelected']; listStoryUpdated.refresh(); } catch (e) { @@ -118,7 +115,7 @@ class HomeController extends GetxController { final _response = await repository.fetchStoryFullByTagId(tagId: tagIdFullSelected); _storyFulls.addAll({'$tagIdFullSelected': _response}); } - if (isJump) pageControllerFull.jumpToPage(0); + listStoryFulls.value = _storyFulls['$tagIdFullSelected']; listStoryFulls.refresh(); } catch (e) { diff --git a/lib/pages/home/page.dart b/lib/pages/home/page.dart index b5ec192..4172522 100644 --- a/lib/pages/home/page.dart +++ b/lib/pages/home/page.dart @@ -21,11 +21,28 @@ class HomePage extends GetView { return Scaffold( backgroundColor: AssetColors.colorBlueF2F4FF, body: SafeArea( - child: TabBarTypeActionStory( - tabLabels: ['Đọc truyện',], - pages: [KeepAlivePage(child: _buildContainerStoryRead())], - ), + child: Column( + children: [ + TextFormField( + textInputAction: TextInputAction.search, + readOnly: true, + onTap: controller.onTapSearch, + decoration: InputDecoration( + fillColor: AssetColors.colorGreyE7E7E7, + hintText: 'Nhập tên truyện', + contentPadding: EdgeInsets.symmetric(vertical: 1), + prefixIcon: const Icon( + Icons.search, + size: 24, + color: AssetColors.colorGrey262626, + ), + ), + ).paddingSymmetric(horizontal: 20), + 20.verticalSpace, + Expanded(child: _buildContainerStoryRead().paddingSymmetric(horizontal: 10)), + ], ), + ), ); } @@ -37,6 +54,8 @@ class HomePage extends GetView { SingleChildScrollView( child: Column( children: [ + _buildTagStory(), + const Divider(height: 50), GroupStoryByTypeWidget( title: 'Truyện hot', onTapSeeMore: controller.onTapSeeMoreHot, @@ -49,9 +68,9 @@ class HomePage extends GetView { }, ), ), - 20.verticalSpace, + const Divider(height: 50), GroupStoryByTypeWidget( - title: 'Truyện mới cập nhật', + title: 'Mới cập nhật', onTapSeeMore: controller.onTapSeeMoreUpdate, child: ContainerStoryHome( models: controller.listStoryUpdated.value, @@ -62,9 +81,9 @@ class HomePage extends GetView { }, ), ), - 20.verticalSpace, + const Divider(height: 50), GroupStoryByTypeWidget( - title: 'Truyện đã hoàn thành', + title: 'Đã hoàn thành', onTapSeeMore: controller.onTapSeeMoreFull, child: ContainerStoryHome( models: controller.listStoryFulls.value, @@ -76,8 +95,7 @@ class HomePage extends GetView { ), ), 20.verticalSpace, - _buildTagStory(), - 20.verticalSpace, + ], ).paddingSymmetric(horizontal: 12), ), @@ -92,20 +110,23 @@ class HomePage extends GetView { return GroupStoryByTypeWidget( title: 'Thẻ truyện', onTapSeeMore: controller.onTapSeeMoreTagStory, - child: Wrap( - runSpacing: 10, - spacing: 10, - children: _list.asMap().keys.map((index) { - final _title = _list[index].name ?? ''; - final _index = index % AssetColors.colorRandom.length; - final _color = AssetColors.colorRandom[_index]; - return ItemTagStory( - title: _title, - color: _color, - onTap: () => controller.onTapTagStory(_list[index]), - ); - }).toList(), - ).fullWidth, + child: GridView.count( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + crossAxisCount: 2, + childAspectRatio: 3.5, + padding: const EdgeInsets.only(bottom: 20), + mainAxisSpacing: 12, + crossAxisSpacing: 20, + children: _list.asMap().keys.map((index) { + final _title = _list[index].name ?? ''; + final _index = index % AssetColors.colorRandom.length; + final _color = AssetColors.colorRandom[_index]; + return ItemTagStory( + title: _title, + color: _color, + onTap: () => controller.onTapTagStory(_list[index])); + }).toList()) ); } } diff --git a/lib/pages/home/widget/container_story.dart b/lib/pages/home/widget/container_story.dart index 16fe6b2..b7d9e83 100644 --- a/lib/pages/home/widget/container_story.dart +++ b/lib/pages/home/widget/container_story.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; import '../../../common/common.dart'; import '../../../models/models.dart'; +import '../controller.dart'; import 'widget.dart'; class ContainerStoryHome extends StatelessWidget { @@ -10,7 +12,7 @@ class ContainerStoryHome extends StatelessWidget { final PageController pageController; ContainerStoryHome({required this.models, required this.pageController, this.callBack}); - + final _controller = Get.find(); @override Widget build(BuildContext context) { return Column( @@ -21,7 +23,20 @@ class ContainerStoryHome extends StatelessWidget { onTabChanged: callBack, ), 20.verticalSpace, - if (models.isEmpty) UIHelper.emptyBox else PageViewStoryInGroup(models: models, pageController: pageController), + if (models.isEmpty) UIHelper.emptyBox else GridView.count( + crossAxisCount: 4, + childAspectRatio: 75 / 150, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + mainAxisSpacing: 10, + crossAxisSpacing: 6, + children: (models.length>8?models.sublist(0,8):models).map((item) { + return ItemStoryHome( + model: item, + onTap: () => _controller.onTapStory(item.id), + ); + }).toList()), ], ); } diff --git a/lib/pages/home/widget/group_story_by_type.dart b/lib/pages/home/widget/group_story_by_type.dart index 5914924..a263ab4 100644 --- a/lib/pages/home/widget/group_story_by_type.dart +++ b/lib/pages/home/widget/group_story_by_type.dart @@ -19,13 +19,13 @@ class GroupStoryByTypeWidget extends StatelessWidget { children: [ Text( title, - style: _theme.textTheme.subtitle1, + style: _theme.textTheme.headline6!.textPrimary, ), const Spacer(), InkWell( onTap: onTapSeeMore, child: Text( - 'Xem thêm >', + 'Xem thêm', style: _theme.textTheme.bodyText2!.medium.textPrimary, ), ) @@ -34,6 +34,6 @@ class GroupStoryByTypeWidget extends StatelessWidget { 15.verticalSpace, child, ], - ).wrapCard; + ); } } diff --git a/lib/pages/home/widget/item_story_home.dart b/lib/pages/home/widget/item_story_home.dart index 3401b3e..61962ef 100644 --- a/lib/pages/home/widget/item_story_home.dart +++ b/lib/pages/home/widget/item_story_home.dart @@ -15,6 +15,8 @@ class ItemStoryHome extends StatelessWidget { return InkWell( onTap: onTap, child: Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: Colors.white), child: Column( children: [ _buildImage(), diff --git a/lib/pages/home/widget/tab_bar_widget.dart b/lib/pages/home/widget/tab_bar_widget.dart index 4fe721f..42ce38a 100644 --- a/lib/pages/home/widget/tab_bar_widget.dart +++ b/lib/pages/home/widget/tab_bar_widget.dart @@ -43,27 +43,24 @@ class _CustomTabBarNotTabViewState extends State with Si final _theme = Get.theme; Widget build(BuildContext context) { - return Obx(() { - return TabBar( - controller: _tabController, - unselectedLabelStyle: _theme.textTheme.subtitle2!.regular, - unselectedLabelColor: _theme.hintColor, - labelStyle: _theme.textTheme.subtitle2!.medium, - indicatorWeight: 0, - labelPadding: const EdgeInsets.symmetric(horizontal: 5), - labelColor: Colors.white, - tabs: _controller.tags.asMap().keys.map((index) { - final _title = _controller.tags[index].name ?? ''; - return Tab(child: _buildItemTabBar(title: _title, isFocus: _index.value == index)); - }).toList(), - indicator: const BoxDecoration(), - isScrollable: true, - onTap: (val) { - widget.onTabChanged?.call(_controller.tags[val].id); - _index.value = val; - }, - ); - }); + return TabBar( + controller: _tabController, + unselectedLabelStyle: _theme.textTheme.subtitle2!.regular, + unselectedLabelColor: _theme.hintColor, + labelStyle: _theme.textTheme.subtitle2!.semiBold, + labelPadding: const EdgeInsets.symmetric(horizontal: 5), + labelColor: _theme.primaryColor, + tabs: _controller.tags.asMap().keys.map((index) { + final _title = _controller.tags[index].name ?? ''; + return Tab(text: _title,); + }).toList(), + indicatorColor: _theme.primaryColor, + isScrollable: true, + onTap: (val) { + widget.onTabChanged?.call(_controller.tags[val].id); + _index.value = val; + }, + ); } Widget _buildItemTabBar({required String title, bool isFocus = false}) { diff --git a/lib/pages/list_story/page.dart b/lib/pages/list_story/page.dart index a42a377..fd8a540 100644 --- a/lib/pages/list_story/page.dart +++ b/lib/pages/list_story/page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:truyen_chu/theme/theme.dart'; import '../../common/common.dart'; import 'controller.dart'; @@ -10,10 +11,10 @@ class ListStoryPage extends GetView { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Colors.white, + backgroundColor: AssetColors.colorBlueF2F4FF, appBar: AppBar( title: Obx( - () => Text(controller.title.value,style: _textTheme.headline6!.textBlack,), + () => Text(controller.title.value,style: _textTheme.headline6!.textWhite,), ), ), body: Obx( @@ -25,7 +26,7 @@ class ListStoryPage extends GetView { } return ItemStoryInList(model: controller.listStory[index], onTap: () => controller.onTapStory(controller.listStory[index].id)); }, - separatorBuilder: (_, index) => const Divider(height: 30), + separatorBuilder: (_, index) => 20.verticalSpace, itemCount: controller.listStory.length, ), ), diff --git a/lib/pages/list_story/widget/item_story.dart b/lib/pages/list_story/widget/item_story.dart index 40450ae..c69007d 100644 --- a/lib/pages/list_story/widget/item_story.dart +++ b/lib/pages/list_story/widget/item_story.dart @@ -16,7 +16,13 @@ class ItemStoryInList extends StatelessWidget { onTap: onTap, child: Container( width: double.infinity, - height: 105, + height: 115, + padding: const EdgeInsets.all(8), + + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10) + ), margin: UIHelper.horizontalEdgeInsets20, child: Row( children: [ diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index 4b26db8..b859013 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -17,6 +17,7 @@ class MainController extends GetxController { BottomNavBarModel(icon: 'ic_home', label: 'Trang chủ', page: HomePage()), BottomNavBarModel(icon: 'ic_classify', label: 'Phân Loại', page: ClassifyPage()), BottomNavBarModel(icon: 'ic_story_board', label: 'Tủ truyện', page: StoryBoardPage()), + BottomNavBarModel(icon: 'ic_story_board', label: 'Lịch Sử', page: HistoryReadingPage()), ]; } @@ -31,6 +32,10 @@ class MainController extends GetxController { if (index == 2) { analytics.setCurrentScreen(screenName: Routes.STORY_BOARD); } + if (index == 3) { + Get.find().initLoadData(); + analytics.setCurrentScreen(screenName: Routes.HISTORY_READING); + } } @override diff --git a/lib/pages/main/page.dart b/lib/pages/main/page.dart index cde43db..961eb55 100644 --- a/lib/pages/main/page.dart +++ b/lib/pages/main/page.dart @@ -13,20 +13,20 @@ class MainPage extends GetResponsiveView { items: controller.bottomNavBarItems .map( (item) => BottomNavigationBarItem( - icon: Image.asset(item.icon.assetPathPNG, color: const Color(0xffCBCBCB), width: 24), - activeIcon: Image.asset(item.icon.assetPathPNG, color: _theme.primaryColor, width: 24), + icon: Image.asset(item.icon.assetPathPNG, color: Colors.white, width: 24), + activeIcon: Image.asset(item.icon.assetPathPNG, color: Colors.white, width: 24), label: item.label, ), ) .toList(), type: BottomNavigationBarType.fixed, showSelectedLabels: true, - backgroundColor: Colors.white, + backgroundColor: _theme.primaryColor, showUnselectedLabels: true, currentIndex: controller.currentTabIndex.value, onTap: controller.onItemTapped, - selectedItemColor: _theme.primaryColor, - unselectedItemColor: Colors.grey, + selectedItemColor: Colors.white, + unselectedItemColor: Colors.white, selectedLabelStyle: _theme.textTheme.caption!.bold, unselectedLabelStyle: _theme.textTheme.caption!.regular, ), diff --git a/lib/pages/read_story/controller.dart b/lib/pages/read_story/controller.dart index e45e831..d03b684 100644 --- a/lib/pages/read_story/controller.dart +++ b/lib/pages/read_story/controller.dart @@ -5,6 +5,7 @@ import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; +import 'package:truyen_chu/pages/history_reading/controller.dart'; import 'package:wakelock/wakelock.dart'; import '../../biz/biz.dart'; import '../../main.dart'; @@ -25,7 +26,8 @@ class ReadStoryController extends GetxController { final DBService dbService; - ReadStoryController({required this.chapterRepository, required this.storyRepository, required this.dbService}); + ReadStoryController( + {required this.chapterRepository, required this.storyRepository, required this.dbService}); AppController get appController => Get.find(); @@ -136,7 +138,8 @@ class ReadStoryController extends GetxController { appController.bannerAdMedium.load(); appController.bannerAdMedium2.dispose(); appController.bannerAdMedium2.load(); - final _response = await chapterRepository.fetchChapterContentById(chapterId: chapterId, storyId: storyId); + final _response = + await chapterRepository.fetchChapterContentById(chapterId: chapterId, storyId: storyId); chapterContentModel.value = _response; storyHistoryLocal.chapterId = chapterId; @@ -160,7 +163,10 @@ class ReadStoryController extends GetxController { await Future.delayed(300.milliseconds); itemScrollController.jumpTo(index: _firstTimeLoad ? _initPageIndex : 0); } catch (e) { - itemScrollController.scrollTo(index: _firstTimeLoad ? _initPageIndex - 1 : 0, duration: 150.milliseconds, curve: Curves.linear); + itemScrollController.scrollTo( + index: _firstTimeLoad ? _initPageIndex - 1 : 0, + duration: 150.milliseconds, + curve: Curves.linear); } _firstTimeLoad = false; @@ -170,7 +176,8 @@ class ReadStoryController extends GetxController { void _fetchAllChapterTitle() async { try { - final _response = await chapterRepository.fetchChapterTitleById(storyId: storyId, page: _currentPageChapter); + final _response = await chapterRepository.fetchChapterTitleById( + storyId: storyId, page: _currentPageChapter); final _list = _response.items; if (_list.length >= 50 && _currentPageChapter < _response.totalPages) { _currentPageChapter++; @@ -224,7 +231,7 @@ class ReadStoryController extends GetxController { final _boardLocalModel = storyModel!.toStoryBroadLocalModel; final _response = await dbService.addStoryBoard(model: _boardLocalModel); if (_response) { - EasyLoading.showSuccess('Thêm vào tủ truyện thành công!'); + showSnackBarSuccess(message: 'Thêm vào tủ truyện thành công!'); showButtonAddBoard.value = false; appController.isRefreshStoryBoard.value = true; } diff --git a/lib/pages/read_story/setting_read_page.dart b/lib/pages/read_story/setting_read_page.dart index b2462b6..c59b17b 100644 --- a/lib/pages/read_story/setting_read_page.dart +++ b/lib/pages/read_story/setting_read_page.dart @@ -14,7 +14,7 @@ class SettingReadPage extends StatelessWidget { _fontSize.value = _controller.textStyle.value.fontSize!; return Scaffold( appBar: AppBar( - title: Text('Cài đặt'), + title: Text('Cài đặt',style: _theme.textTheme.headline6!.textWhite,), ), body: _buildContent(), ); diff --git a/lib/pages/read_story/widget/container_drawer.dart b/lib/pages/read_story/widget/container_drawer.dart index bd54967..9d3f17d 100644 --- a/lib/pages/read_story/widget/container_drawer.dart +++ b/lib/pages/read_story/widget/container_drawer.dart @@ -19,7 +19,7 @@ class ContainerDrawer extends StatelessWidget { } return Container( width: double.infinity, - color: AssetColors.colorGreyE7E7E7, + color: _theme.scaffoldBackgroundColor, child: Column( children: [ _buildContainerHeader(), @@ -63,7 +63,7 @@ class ContainerDrawer extends StatelessWidget { title, maxLines: 1, overflow: TextOverflow.ellipsis, - style: _theme.textTheme.subtitle1!.textColor(isSelected ? Color(0xffDF9B34) : Colors.black).weight(isSelected ? FontWeight.bold : FontWeight.w500), + style: _theme.textTheme.subtitle1!.textColor(isSelected ? AssetColors.primary : Colors.black).weight(isSelected ? FontWeight.bold : FontWeight.w500), ), ), ); @@ -74,10 +74,11 @@ class ContainerDrawer extends StatelessWidget { height: 200, padding: const EdgeInsets.fromLTRB(10, 0, 5, 5), width: double.infinity, + color: _theme.primaryColor, child: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - IconButton(onPressed: Get.back, icon: const Icon(Icons.close, size: 26)), + IconButton(onPressed: Get.back, icon: const Icon(Icons.close, size: 26,color: Colors.white,)), _buildContainerStory(), const Spacer(), _buildTotalChapterAndSort(), @@ -95,7 +96,7 @@ class ContainerDrawer extends StatelessWidget { 14.horizontalSpace, _buildContent(), 10.horizontalSpace, - const Icon(Icons.arrow_forward_ios), + const Icon(Icons.arrow_forward_ios,color: Colors.white,), ], ).wrapHeight(100), ); @@ -107,13 +108,13 @@ class ContainerDrawer extends StatelessWidget { children: [ Text( '${_controller.storyModel?.chap ?? 0} chương - ${(_controller.storyModel?.isFull ?? false) ? 'Hoàn thành' : 'Đang ra'}', - style: _theme.textTheme.subtitle1!.regular.text595959, + style: _theme.textTheme.subtitle1!.regular.textWhite, ), InkWell( onTap: _controller.onTapSortChapter, child: Text( 'Đảo thứ tự', - style: _theme.textTheme.subtitle1!.text3F2F0E, + style: _theme.textTheme.subtitle1!.textWhite, ), ) ], @@ -144,14 +145,14 @@ class ContainerDrawer extends StatelessWidget { _controller.storyModel?.title ?? '', maxLines: 3, overflow: TextOverflow.ellipsis, - style: _theme.textTheme.subtitle1!.text3F2F0E.size(18).medium.heightLine(20), + style: _theme.textTheme.subtitle1!.textWhite.size(18).semiBold.heightLine(20), ), 10.horizontalSpace, Text( _controller.storyModel?.authorName ?? '', maxLines: 1, overflow: TextOverflow.ellipsis, - style: _theme.textTheme.subtitle1!.regular.text595959, + style: _theme.textTheme.subtitle1!.regular.textWhite, ), ], ), diff --git a/lib/pages/search/page.dart b/lib/pages/search/page.dart index 0bed512..4e5914e 100644 --- a/lib/pages/search/page.dart +++ b/lib/pages/search/page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:truyen_chu/theme/theme.dart'; import '../../common/common.dart'; import '../../enum.dart'; @@ -10,17 +11,19 @@ class SearchPage extends GetView { @override Widget build(BuildContext context) { return Scaffold( + backgroundColor: AssetColors.colorBlueF2F4FF, appBar: AppBar( elevation: 0, titleSpacing: 0, title: TextFieldSearch(), actions: [ - TextButton( - onPressed: controller.onTapSearch, - child: Text( - 'Tìm kiếm', - style: TextStyle(fontSize: 15), - )), + InkWell( + onTap: controller.onTapSearch, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Icon(Icons.search, color: Colors.white), + ), + ), ], ), body: Column( @@ -39,7 +42,9 @@ class SearchPage extends GetView { final _status = controller.statusSearch.value; final _widget = _status == StatusSearch.INIT_SEARCH ? ContainerInitSearch().paddingSymmetric(horizontal: 20) - : (_status == StatusSearch.HAVE_VALUE ? ContainerSearchResult() : ContainerSearchNotResult().paddingSymmetric(horizontal: 20)); + : (_status == StatusSearch.HAVE_VALUE + ? ContainerSearchResult() + : ContainerSearchNotResult().paddingSymmetric(horizontal: 20)); return _widget; } } diff --git a/lib/pages/search/widget/container_init_search.dart b/lib/pages/search/widget/container_init_search.dart index 92817e6..99dbb89 100644 --- a/lib/pages/search/widget/container_init_search.dart +++ b/lib/pages/search/widget/container_init_search.dart @@ -14,8 +14,7 @@ class ContainerInitSearch extends StatelessWidget { return SingleChildScrollView( child: Column( children: [ - _buildStoryHot(), - const Divider(height: 50), + // _buildStoryHot(), _buildPopularStoryType(), 20.verticalSpace, ], @@ -52,20 +51,24 @@ class ContainerInitSearch extends StatelessWidget { final _list = _controller.appController.popularStoryTags; return TitleAndWidgetSearch( title: 'Thể loại truyện phổ biến', - child: Wrap( - runSpacing: 10, - spacing: 10, - children: _list.asMap().keys.map((index) { - final _title = _list[index].name ?? ''; - final _index = index % AssetColors.colorRandom.length; - final _color = AssetColors.colorRandom[_index]; - return ItemTagStory( - title: _title, - color: _color, - onTap: () => _controller.onTapTypeStory(_list[index]), - ); - }).toList(), - ).fullWidth, + child: GridView.count( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + crossAxisCount: 2, + childAspectRatio: 3.5, + padding: const EdgeInsets.only(bottom: 20), + mainAxisSpacing: 12, + crossAxisSpacing: 20, + children: _list.asMap().keys.map((index) { + final _title = _list[index].name ?? ''; + final _index = index % AssetColors.colorRandom.length; + final _color = AssetColors.colorRandom[_index]; + return ItemTagStory( + title: _title, + color: _color, + onTap: () => _controller.onTapTypeStory(_list[index])); + }).toList()) + .fullWidth, ); } } diff --git a/lib/pages/search/widget/title_and_widget _search.dart b/lib/pages/search/widget/title_and_widget _search.dart index 7d95ef3..7c49595 100644 --- a/lib/pages/search/widget/title_and_widget _search.dart +++ b/lib/pages/search/widget/title_and_widget _search.dart @@ -15,7 +15,7 @@ class TitleAndWidgetSearch extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(title, style: _theme.textTheme.subtitle1).paddingSymmetric(horizontal: paddingTitle), + Text(title, style: _theme.textTheme.headline6).paddingSymmetric(horizontal: paddingTitle), 20.verticalSpace, child, ], diff --git a/lib/pages/storyboard/page.dart b/lib/pages/storyboard/page.dart index 0dac134..cf2cfa2 100644 --- a/lib/pages/storyboard/page.dart +++ b/lib/pages/storyboard/page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:truyen_chu/theme/theme.dart'; import '../../common/common.dart'; import 'controller.dart'; @@ -10,42 +11,31 @@ class StoryBoardPage extends GetView { @override Widget build(BuildContext context) { return Scaffold( + backgroundColor: AssetColors.colorBlueF2F4FF, appBar: AppBar( - title: Text('Tủ truyện của bạn',style: _theme.textTheme.headline6!.textBlack,), + title: Text( + 'Tủ truyện', + style: _theme.textTheme.headline6!.textWhite, + ), ), body: _buildContent(), ); } Widget _buildContent() { - return Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - TextButton( - onPressed: controller.onTapHistoryStory, - child: Text( - 'Lịch sử truyện đã đọc >', - style: _theme.textTheme.headline6!.size(18), - ), - ), - 20.verticalSpace, - Expanded( - child: Obx( - () => GridView.count( - crossAxisCount: 3, - childAspectRatio: 0.5, - padding: const EdgeInsets.only(bottom: 20), - mainAxisSpacing: 25, - crossAxisSpacing: 30, - children: controller.listStory - .map( - (item) => ItemStoryBoard(model: item, onTap: () => controller.onTapStory(item.id)), - ) - .toList(), - ), - ), - ), - ], - ).paddingOnly(right: 20, left: 20); + return Obx( + () => GridView.count( + crossAxisCount: 3, + childAspectRatio: 0.55, + padding: const EdgeInsets.only(bottom: 20), + mainAxisSpacing: 15, + crossAxisSpacing: 10, + children: controller.listStory + .map( + (item) => ItemStoryBoard(model: item, onTap: () => controller.onTapStory(item.id)), + ) + .toList(), + ), + ).paddingOnly(right: 20, left: 20, top: 20); } } diff --git a/lib/pages/storyboard/widget/item_story_board.dart b/lib/pages/storyboard/widget/item_story_board.dart index 2b7e522..842aca3 100644 --- a/lib/pages/storyboard/widget/item_story_board.dart +++ b/lib/pages/storyboard/widget/item_story_board.dart @@ -15,6 +15,8 @@ class ItemStoryBoard extends StatelessWidget { return InkWell( onTap: onTap, child: Container( + padding: const EdgeInsets.all(5), + decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10)), child: Column( children: [ _buildImage(), diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index 3a68cb9..970fcf0 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -18,6 +18,7 @@ abstract class AppPages { BindingsBuilder.put(() => MainController()), BindingsBuilder.put(() => StoryBoardController(dbService: Get.find())), BindingsBuilder.put(() => ClassifyController()), + BindingsBuilder.put(() => HistoryReadingController(dbService: Get.find())), ], ), GetPage( diff --git a/lib/theme/asset_colors.dart b/lib/theme/asset_colors.dart index a5c607f..04d92b4 100644 --- a/lib/theme/asset_colors.dart +++ b/lib/theme/asset_colors.dart @@ -4,7 +4,7 @@ class AssetColors { static Color shimmerBaseColor = Colors.grey.withOpacity(0.8); static Color shimmerHighlightColor = Colors.grey.withOpacity(0.5); static const Color textBlack = Color(0xff181A20); - static const Color primary = Color(0xffFFAC40); + static const Color primary = Color(0xff4285F4); static const Color colorGreyBFBFBF = Color(0xffBFBFBF); static const Color colorGrey333333 = Color(0xff333333); static const Color colorGrey262626 = Color(0xff262626); diff --git a/lib/theme/theme_data.dart b/lib/theme/theme_data.dart index e441c67..04c364f 100644 --- a/lib/theme/theme_data.dart +++ b/lib/theme/theme_data.dart @@ -6,15 +6,15 @@ import 'theme.dart'; class StoryWordThemeData { static final InputBorder _inputBorder = OutlineInputBorder( borderSide: BorderSide(color: Colors.transparent), - borderRadius: BorderRadius.circular(100), + borderRadius: BorderRadius.circular(10), ); static final InputBorder _focusInputBorder = OutlineInputBorder( borderSide: BorderSide(color: Colors.transparent), - borderRadius: BorderRadius.circular(100), + borderRadius: BorderRadius.circular(10), ); static final themeData = ThemeData( colorScheme: _colorScheme, - primaryColor: const Color(0xFFFFAC40), + primaryColor: const Color(0xFF4285F4), // primarySwatch: MaterialColor(0xFFFFAC40, const { // 50: const Color(0xFFFFF4E3), // 100: const Color(0xFFFFE2B8), @@ -31,10 +31,12 @@ class StoryWordThemeData { accentColor: _colorScheme.primary, appBarTheme: AppBarTheme( centerTitle: true, - iconTheme: IconThemeData(color: _colorScheme.onBackground), + iconTheme: IconThemeData(color: Colors.white), textTheme: _textTheme, elevation: 0, - color: Colors.white, + actionsIconTheme: IconThemeData(color: Colors.white), + titleTextStyle: _textTheme.headline6?.copyWith(color: Colors.white), + color: AssetColors.primary, ), canvasColor: _colorScheme.background, toggleableActiveColor: _colorScheme.primary, @@ -104,7 +106,7 @@ class StoryWordThemeData { onPrimary: Colors.white, onSurface: Colors.grey, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(100), + borderRadius: BorderRadius.circular(10), ), ), ), @@ -113,7 +115,7 @@ class StoryWordThemeData { minimumSize: Size(76.0, 56.0), side: BorderSide(width: 1.5, color: _colorScheme.primary), shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(100), + borderRadius: BorderRadius.circular(10), ), ), ), @@ -125,9 +127,9 @@ class StoryWordThemeData { static const _bold = FontWeight.w700; static const _colorScheme = ColorScheme( - primary: const Color(0xFFFFAC40), - primaryVariant: const Color(0xFFE25D20), - secondary: const Color(0xFFFFCF8B), + primary: const Color(0xFF4285F4), + primaryVariant: const Color(0xFF4285F4), + secondary: const Color(0xFF4285F4), secondaryVariant: Color(0xFFC77D02), background: Colors.white, onBackground: Colors.black, diff --git a/truyen_chu.iml b/truyen_chu.iml index 3329c2c..8f18243 100644 --- a/truyen_chu.iml +++ b/truyen_chu.iml @@ -81,6 +81,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +