├── .github
└── workflows
│ └── publish_app_release.yml
├── .gitignore
├── .metadata
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xycz
│ │ │ │ └── dmzjx
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-ldpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── playstore-icon.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ ├── values
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── network_security_config.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── images
│ ├── logo.png
│ ├── logo_dmzj.png
│ ├── vip.png
│ ├── vip_chapter.png
│ └── vip_comic.png
├── lotties
│ ├── empty.json
│ ├── error.json
│ └── loadding.json
├── proto
│ ├── comic.proto
│ ├── news.proto
│ └── novel.proto
└── statement.txt
├── distribute_options.yaml
├── document
├── RELEASE.txt
├── app_version.json
├── logo.png
├── screenshot_dark.jpg
└── screenshot_light.jpg
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── flutter_export_environment.sh
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── icon-1024.png
│ │ ├── icon-20-ipad.png
│ │ ├── icon-20@2x-ipad.png
│ │ ├── icon-20@2x.png
│ │ ├── icon-20@3x.png
│ │ ├── icon-29-ipad.png
│ │ ├── icon-29.png
│ │ ├── icon-29@2x-ipad.png
│ │ ├── icon-29@2x.png
│ │ ├── icon-29@3x.png
│ │ ├── icon-40.png
│ │ ├── icon-40@2x.png
│ │ ├── icon-40@3x.png
│ │ ├── icon-60@2x.png
│ │ ├── icon-60@3x.png
│ │ ├── icon-76.png
│ │ ├── icon-76@2x.png
│ │ └── icon-83.5@2x.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── Runner-Bridging-Header.h
│ ├── en.lproj
│ └── InfoPlist.strings
│ └── zh-Hans.lproj
│ ├── InfoPlist.strings
│ ├── LaunchScreen.strings
│ └── Main.strings
├── lib
├── app
│ ├── app_color.dart
│ ├── app_constant.dart
│ ├── app_error.dart
│ ├── app_style.dart
│ ├── controller
│ │ └── base_controller.dart
│ ├── dialog_utils.dart
│ ├── event_bus.dart
│ ├── keys.dart
│ ├── log.dart
│ └── utils.dart
├── main.dart
├── models
│ ├── comic
│ │ ├── author_model.dart
│ │ ├── category_comic_model.dart
│ │ ├── category_filter_model.dart
│ │ ├── category_item_model.dart
│ │ ├── chapter_detail_web_model.dart
│ │ ├── chapter_info.dart
│ │ ├── comic_related_model.dart
│ │ ├── detail_info.dart
│ │ ├── detail_v1_model.dart
│ │ ├── recommend_model.dart
│ │ ├── search_item.dart
│ │ ├── search_model.dart
│ │ ├── special_detail_model.dart
│ │ ├── special_model.dart
│ │ ├── view_point_model.dart
│ │ └── web_search_model.dart
│ ├── comment
│ │ ├── comment_item.dart
│ │ └── user_comment_item.dart
│ ├── db
│ │ ├── comic_download_info.dart
│ │ ├── comic_download_info.g.dart
│ │ ├── comic_history.dart
│ │ ├── comic_history.g.dart
│ │ ├── download_status.dart
│ │ ├── download_status.g.dart
│ │ ├── local_favorite.dart
│ │ ├── local_favorite.g.dart
│ │ ├── novel_download_info.dart
│ │ ├── novel_download_info.g.dart
│ │ ├── novel_history.dart
│ │ └── novel_history.g.dart
│ ├── news
│ │ ├── news_banner_model.dart
│ │ ├── news_stat_model.dart
│ │ └── news_tag_model.dart
│ ├── novel
│ │ ├── category_filter_model.dart
│ │ ├── category_model.dart
│ │ ├── category_novel_model.dart
│ │ ├── latest_model.dart
│ │ ├── novel_detail_model.dart
│ │ ├── rank_model.dart
│ │ ├── recommend_model.dart
│ │ └── search_model.dart
│ ├── proto
│ │ ├── comic.pb.dart
│ │ ├── comic.pbjson.dart
│ │ ├── news.pb.dart
│ │ ├── news.pbjson.dart
│ │ ├── novel.pb.dart
│ │ └── novel.pbjson.dart
│ ├── user
│ │ ├── bind_status_model.dart
│ │ ├── comic_history_model.dart
│ │ ├── login_result_model.dart
│ │ ├── novel_history_model.dart
│ │ ├── subscribe_comic_model.dart
│ │ ├── subscribe_news_model.dart
│ │ ├── subscribe_novel_model.dart
│ │ └── user_profile_model.dart
│ └── version_model.dart
├── modules
│ ├── comic
│ │ ├── author_detail
│ │ │ ├── author_detail_controller.dart
│ │ │ └── author_detail_page.dart
│ │ ├── category_detail
│ │ │ ├── category_detail_controller.dart
│ │ │ └── category_detail_page.dart
│ │ ├── detail
│ │ │ ├── comic_detail_controller.dart
│ │ │ ├── comic_detail_page.dart
│ │ │ └── comic_detail_related_page.dart
│ │ ├── home
│ │ │ ├── category
│ │ │ │ ├── comic_category_controller.dart
│ │ │ │ └── comic_category_view.dart
│ │ │ ├── comic_home_controller.dart
│ │ │ ├── comic_home_page.dart
│ │ │ ├── latest
│ │ │ │ ├── comic_latest_controller.dart
│ │ │ │ └── comic_latest_view.dart
│ │ │ ├── rank
│ │ │ │ ├── comic_rank_controller.dart
│ │ │ │ └── comic_rank_view.dart
│ │ │ ├── recommend
│ │ │ │ ├── comic_recommend_controller.dart
│ │ │ │ └── comic_recommend_view.dart
│ │ │ └── special
│ │ │ │ ├── comic_special_controller.dart
│ │ │ │ └── comic_special_view.dart
│ │ ├── reader
│ │ │ ├── comic_reader_controller.dart
│ │ │ └── comic_reader_page.dart
│ │ ├── search
│ │ │ ├── comic_search_controller.dart
│ │ │ └── comic_search_page.dart
│ │ ├── select_chapter
│ │ │ ├── comic_select_chapter_controller.dart
│ │ │ └── comic_select_chapter_page.dart
│ │ └── special_detail
│ │ │ ├── special_detail_controller.dart
│ │ │ └── special_detail_page.dart
│ ├── common
│ │ ├── comment
│ │ │ ├── add_comment_controller.dart
│ │ │ ├── add_comment_page.dart
│ │ │ ├── comment_controller.dart
│ │ │ ├── comment_list_controller.dart
│ │ │ ├── comment_list_view.dart
│ │ │ └── comment_page.dart
│ │ ├── download
│ │ │ ├── comic
│ │ │ │ ├── comic_download_page.dart
│ │ │ │ ├── comic_downloaded_detail_controller.dart
│ │ │ │ ├── comic_downloaded_detail_page.dart
│ │ │ │ ├── comic_downloaded_view.dart
│ │ │ │ └── comic_downloading_view.dart
│ │ │ └── novel
│ │ │ │ ├── novel_download_page.dart
│ │ │ │ ├── novel_downloaded_detail_controller.dart
│ │ │ │ ├── novel_downloaded_detail_page.dart
│ │ │ │ ├── novel_downloaded_view.dart
│ │ │ │ └── novel_downloading_view.dart
│ │ ├── empty_page.dart
│ │ ├── test_subroute_page.dart
│ │ └── webview
│ │ │ ├── webview_controller.dart
│ │ │ └── webview_page.dart
│ ├── index
│ │ ├── index_controller.dart
│ │ └── index_page.dart
│ ├── news
│ │ ├── detail
│ │ │ ├── news_detail_controller.dart
│ │ │ └── news_detail_page.dart
│ │ └── home
│ │ │ ├── news_home_controller.dart
│ │ │ ├── news_home_page.dart
│ │ │ ├── news_list_controller.dart
│ │ │ └── news_list_view.dart
│ ├── novel
│ │ ├── category_detail
│ │ │ ├── novel_category_detail_controller.dart
│ │ │ └── novel_category_detail_page.dart
│ │ ├── detail
│ │ │ ├── novel_detail_controller.dart
│ │ │ └── novel_detail_page.dart
│ │ ├── home
│ │ │ ├── category
│ │ │ │ ├── novel_category_controller.dart
│ │ │ │ └── novel_category_view.dart
│ │ │ ├── latest
│ │ │ │ ├── novel_latest_controller.dart
│ │ │ │ └── novel_latest_view.dart
│ │ │ ├── novel_home_controller.dart
│ │ │ ├── novel_home_page.dart
│ │ │ ├── rank
│ │ │ │ ├── novel_rank_controller.dart
│ │ │ │ └── novel_rank_view.dart
│ │ │ └── recommend
│ │ │ │ ├── novel_recommend_controller.dart
│ │ │ │ └── novel_recommend_view.dart
│ │ ├── reader
│ │ │ ├── novel_horizontal_reader.dart
│ │ │ ├── novel_reader_controller.dart
│ │ │ └── novel_reader_page.dart
│ │ ├── search
│ │ │ ├── novel_search_controller.dart
│ │ │ └── novel_search_page.dart
│ │ └── select_chapter
│ │ │ ├── novel_select_chapter_controller.dart
│ │ │ └── novel_select_chapter_page.dart
│ └── user
│ │ ├── comment
│ │ ├── user_comment_controller.dart
│ │ ├── user_comment_page.dart
│ │ └── user_comment_view.dart
│ │ ├── history
│ │ ├── comic
│ │ │ ├── comic_history_controller.dart
│ │ │ └── comic_history_view.dart
│ │ ├── novel
│ │ │ ├── novel_history_controller.dart
│ │ │ └── novel_history_view.dart
│ │ ├── user_history_controller.dart
│ │ └── user_history_page.dart
│ │ ├── local_favorite
│ │ ├── local_favorite_controller.dart
│ │ └── local_favorite_page.dart
│ │ ├── local_history
│ │ ├── comic
│ │ │ ├── comic_history_controller.dart
│ │ │ └── comic_history_view.dart
│ │ ├── local_history_controller.dart
│ │ ├── local_history_page.dart
│ │ └── novel
│ │ │ ├── novel_history_controller.dart
│ │ │ └── novel_history_view.dart
│ │ ├── login
│ │ ├── user_login_controller.dart
│ │ └── user_login_dialog.dart
│ │ ├── settings
│ │ ├── settings_controller.dart
│ │ └── settings_page.dart
│ │ ├── subscribe
│ │ ├── comic
│ │ │ ├── comic_subscribe_controller.dart
│ │ │ └── comic_subscribe_view.dart
│ │ ├── news
│ │ │ ├── news_subscribe_controller.dart
│ │ │ └── news_subscribe_view.dart
│ │ ├── novel
│ │ │ ├── novel_subscribe_controller.dart
│ │ │ └── novel_subscribe_view.dart
│ │ ├── user_subscribe_controller.dart
│ │ └── user_subscribe_pgae.dart
│ │ ├── user_home_controller.dart
│ │ └── user_home_page.dart
├── requests
│ ├── comic_request.dart
│ ├── comment_request.dart
│ ├── common
│ │ ├── api.dart
│ │ ├── custom_interceptor.dart
│ │ └── http_client.dart
│ ├── common_request.dart
│ ├── news_request.dart
│ ├── novel_request.dart
│ └── user_request.dart
├── routes
│ ├── app_navigator.dart
│ ├── app_pages.dart
│ └── route_path.dart
├── services
│ ├── app_settings_service.dart
│ ├── comic_download_service.dart
│ ├── db_service.dart
│ ├── download_task
│ │ ├── comic_downloader.dart
│ │ └── novel_downloader.dart
│ ├── local_storage_service.dart
│ ├── novel_download_service.dart
│ └── user_service.dart
└── widgets
│ ├── border_text.dart
│ ├── comment_item_widget.dart
│ ├── custom_header.dart
│ ├── keep_alive_wrapper.dart
│ ├── loadding.dart
│ ├── local_image.dart
│ ├── net_image.dart
│ ├── page_grid_view.dart
│ ├── page_list_view.dart
│ ├── refresh_until_widget.dart
│ ├── shadow_card.dart
│ ├── status
│ ├── app_empty_widget.dart
│ ├── app_error_widget.dart
│ └── app_loadding_widget.dart
│ ├── tab_appbar.dart
│ └── user_photo.dart
├── linux
├── .gitignore
├── CMakeLists.txt
├── flutter
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
├── main.cc
├── my_application.cc
├── my_application.h
└── packaging
│ └── deb
│ └── make_config.yaml
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── 1024.png
│ │ │ ├── 128.png
│ │ │ ├── 16.png
│ │ │ ├── 256.png
│ │ │ ├── 32.png
│ │ │ ├── 512.png
│ │ │ ├── 64.png
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ └── Image.imageset
│ │ │ └── Contents.json
│ ├── Base.lproj
│ │ └── MainMenu.xib
│ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
└── packaging
│ └── dmg
│ └── make_config.yaml
├── pubspec.lock
├── pubspec.yaml
└── windows
├── .gitignore
├── CMakeLists.txt
├── flutter
├── CMakeLists.txt
├── generated_plugin_registrant.cc
├── generated_plugin_registrant.h
└── generated_plugins.cmake
├── packaging
└── msix
│ └── make_config.yaml
└── runner
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── resources
└── app_icon.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 | migrate_working_dir/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # The .vscode folder contains launch configuration and tasks you configure in
20 | # VS Code which you may wish to be included in version control, so this line
21 | # is commented out by default.
22 | #.vscode/
23 |
24 | # Flutter/Dart/Pub related
25 | **/doc/api/
26 | **/ios/Flutter/.last_build_id
27 | .dart_tool/
28 | .flutter-plugins
29 | .flutter-plugins-dependencies
30 | .packages
31 | .pub-cache/
32 | .pub/
33 | /build/
34 |
35 | # Web related
36 | lib/generated_plugin_registrant.dart
37 |
38 | # Symbolication related
39 | app.*.symbols
40 |
41 | # Obfuscation related
42 | app.*.map.json
43 |
44 | # Android Studio will place build artifacts here
45 | /android/app/debug
46 | /android/app/profile
47 | /android/app/release
48 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled.
5 |
6 | version:
7 | revision: 12cb4eb7a009f52b347b62ade7cb4854b926af72
8 | channel: stable
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: 12cb4eb7a009f52b347b62ade7cb4854b926af72
17 | base_revision: 12cb4eb7a009f52b347b62ade7cb4854b926af72
18 | - platform: windows
19 | create_revision: 12cb4eb7a009f52b347b62ade7cb4854b926af72
20 | base_revision: 12cb4eb7a009f52b347b62ade7cb4854b926af72
21 |
22 | # User provided section
23 |
24 | # List of Local paths (relative to this file) that should be
25 | # ignored by the migrate tool.
26 | #
27 | # Files that are not part of the templates will be ignored by default.
28 | unmanaged_files:
29 | - 'lib/main.dart'
30 | - 'ios/Runner.xcodeproj/project.pbxproj'
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 动漫之家X
8 |
9 |
10 | 使用Flutter编写的动漫之家跨平台第三方客户端
11 |
12 |
13 | 
14 |
15 | 
16 |
17 | ## 支持平台
18 |
19 | - [x] Android
20 | - [x] iOS
21 | - [x] Windows `Beta`
22 | - [x] MacOS `Beta`
23 | - [x] Linux `Beta`
24 |
25 | 请到[Releases](https://github.com/xiaoyaocz/flutter_dmzj/releases)下载最新版本,iOS请下载ipa文件自行签名安装。
26 |
27 | 反馈问题、相关讨论请到[Discussions](https://github.com/xiaoyaocz/flutter_dmzj/discussions),代码改进请直接提交PR。
28 |
29 | ## 声明
30 |
31 | - 本项目为[动漫之家](https://dmzj.com)第三方开源APP
32 |
33 | - 本项目仅用于学习交流编程技术,严禁将本项目用于商业目的。如有任何商业行为,均与本项目无关。
34 |
35 | - 本项目内所有资源版权均归属于其著作者或动漫之家所有
36 |
37 | - 如果本项目存在侵犯您的相关权益的情况,请及时与开发者联系,开发者将会及时删除有关内容。
38 |
39 | ## License
40 |
41 | [GPL-3.0 License](https://github.com/xiaoyaocz/flutter_dmzj/blob/main/LICENSE),禁止用于任何商业用途
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
12 |
20 |
24 |
28 |
29 |
30 |
31 |
32 |
33 |
35 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/xycz/dmzjx/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.xycz.dmzjx
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/android/app/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/playstore-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/android/app/src/main/res/playstore-icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
19 |
20 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
19 |
20 |
--------------------------------------------------------------------------------
/android/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.7.10'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:7.1.2'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | mavenCentral()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | tasks.register("clean", Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/assets/images/logo.png
--------------------------------------------------------------------------------
/assets/images/logo_dmzj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/assets/images/logo_dmzj.png
--------------------------------------------------------------------------------
/assets/images/vip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/assets/images/vip.png
--------------------------------------------------------------------------------
/assets/images/vip_chapter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/assets/images/vip_chapter.png
--------------------------------------------------------------------------------
/assets/images/vip_comic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/assets/images/vip_comic.png
--------------------------------------------------------------------------------
/assets/proto/news.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 | // 该文件使用ChatGPT辅助生成
3 |
4 | message NewsListResponseProto {
5 | int32 errno = 1;
6 | string errmsg = 2;
7 | repeated NewsListInfoProto data = 3;
8 | }
9 |
10 | message NewsListInfoProto {
11 | int64 articleId = 1;
12 | string title = 2;
13 | string fromName = 3;
14 | string fromUrl = 4;
15 | int64 createTime = 5;
16 | int32 isForeign = 6;
17 | string foreignUrl = 7;
18 | string intro = 8;
19 | int64 authorId = 9;
20 | int32 status = 10;
21 | string rowPicUrl = 11;
22 | string colPicUrl = 12;
23 | int32 qchatShow = 13;
24 | string pageUrl = 14;
25 | int64 commentAmount = 15;
26 | int64 authorUid = 16;
27 | string cover = 17;
28 | string nickname = 18;
29 | int64 moodAmount = 19;
30 | }
31 |
32 |
--------------------------------------------------------------------------------
/assets/proto/novel.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 | // 该文件使用ChatGPT辅助生成
3 |
4 | message NovelChapterDetailProto {
5 | int64 chapterId = 1;
6 | string chapterName = 2;
7 | int32 chapterOrder = 3;
8 | }
9 |
10 | message NovelVolumeProto {
11 | int64 volume_id = 1;
12 | int64 lnovel_id = 2;
13 | string volume_name = 3;
14 | int32 volume_order = 4;
15 | int64 addtime = 5;
16 | int32 sum_chapters = 6;
17 | }
18 | message NovelChapterResponseProto {
19 | int32 errno = 1;
20 | string errmsg = 2;
21 | repeated NovelVolumeDetailProto data = 3;
22 | }
23 | message NovelVolumeDetailProto {
24 | int64 volume_id = 1;
25 | string volume_name = 2;
26 | int32 volume_order = 3;
27 | repeated NovelChapterDetailProto chapters = 4;
28 | }
29 |
30 | message NovelDetailProto {
31 | int64 novel_id = 1;
32 | string name = 2;
33 | string zone = 3;
34 | string status = 4;
35 | string last_update_volume_name = 5;
36 | string last_update_chapter_name = 6;
37 | int64 last_update_volume_id = 7;
38 | int64 last_update_chapter_id = 8;
39 | int64 last_update_time = 9;
40 | string cover = 10;
41 | int64 hot_hits = 11;
42 | string introduction = 12;
43 | repeated string types = 13;
44 | string authors = 14;
45 | string first_letter = 15;
46 | int64 subscribe_num = 16;
47 | int64 redis_update_time = 17;
48 | repeated NovelVolumeProto volume = 18;
49 | }
50 | message NovelDetailResponseProto {
51 | int32 errno = 1;
52 | string errmsg = 2;
53 | NovelDetailProto data = 3;
54 | }
--------------------------------------------------------------------------------
/assets/statement.txt:
--------------------------------------------------------------------------------
1 | 在使用本软件之前,请您仔细阅读以下内容,并确保您充分理解并同意以下条款:
2 |
3 | 1、本软件为开源的第三方软件,可以免费下载用于测试相关功能,在测试完毕后应及时卸载本软件。
4 |
5 | 2、本软件为第三方开源软件,不与动漫之家(dmzj.com)有任何关联。软件内所有内容均来自动漫之家(dmzj.com)公开在互联网的资源,仅供用户参考和学习使用,不得用于商业和非法用途。对于使用本软件所造成的任何后果,本软件作者概不负责。
6 |
7 | 3、如果本软件存在侵犯您的合法权益的情况,请及时与作者联系,作者将会及时删除有关内容。
8 |
9 | 4、本软件不会收集、存储、使用任何用户的个人信息,包括但不限于姓名、地址、电子邮件地址、电话号码等。在使用本软件过程中,不会进行任何形式的个人信息采集。如用户提供任何个人信息,将被视为用户已自愿提供,并且用户将自行承担由此产生的所有法律责任。
10 |
11 | 5、本软件使用者应遵守国家相关法律法规和使用规范,不得利用本软件从事任何违法违规行为。如因使用本软件而导致的违法行为,使用者应承担相应的法律责任。
12 |
13 | 6、本软件作者保留对免责声明的最终解释权。
14 |
15 | 如您不同意本免责声明中的任何内容,请勿使用本软件。使用本软件即代表您已完全理解并同意上述内容。
--------------------------------------------------------------------------------
/distribute_options.yaml:
--------------------------------------------------------------------------------
1 | output: build/dist/
--------------------------------------------------------------------------------
/document/RELEASE.txt:
--------------------------------------------------------------------------------
1 | 1. 适配Flutter 3.22
2 | 2. 点击换一批按钮时旋转加载图标 #216 @GZGavinZhao
--------------------------------------------------------------------------------
/document/app_version.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.1.2-beta",
3 | "version_num": 20102,
4 | "version_desc": "1. 更新请求接口",
5 | "prerelease":false,
6 | "download_url": "https://github.com/xiaoyaocz/flutter_dmzj/releases"
7 | }
--------------------------------------------------------------------------------
/document/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/document/logo.png
--------------------------------------------------------------------------------
/document/screenshot_dark.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/document/screenshot_dark.jpg
--------------------------------------------------------------------------------
/document/screenshot_light.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/document/screenshot_light.jpg
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | **/dgph
2 | *.mode1v3
3 | *.mode2v3
4 | *.moved-aside
5 | *.pbxuser
6 | *.perspectivev3
7 | **/*sync/
8 | .sconsign.dblite
9 | .tags*
10 | **/.vagrant/
11 | **/DerivedData/
12 | Icon?
13 | **/Pods/
14 | **/.symlinks/
15 | profile
16 | xcuserdata
17 | **/.generated/
18 | Flutter/App.framework
19 | Flutter/Flutter.framework
20 | Flutter/Flutter.podspec
21 | Flutter/Generated.xcconfig
22 | Flutter/ephemeral/
23 | Flutter/app.flx
24 | Flutter/app.zip
25 | Flutter/flutter_assets/
26 | Flutter/flutter_export_environment.sh
27 | ServiceDefinitions.json
28 | Runner/GeneratedPluginRegistrant.*
29 |
30 | # Exceptions to above rules.
31 | !default.mode1v3
32 | !default.mode2v3
33 | !default.pbxuser
34 | !default.perspectivev3
35 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 11.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/flutter_export_environment.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # This is a generated file; do not edit or check into version control.
3 | export "FLUTTER_ROOT=D:\flutter"
4 | export "FLUTTER_APPLICATION_PATH=D:\projects\dmzj_flutter"
5 | export "COCOAPODS_PARALLEL_CODE_SIGN=true"
6 | export "FLUTTER_TARGET=lib\main.dart"
7 | export "FLUTTER_BUILD_DIR=build"
8 | export "FLUTTER_BUILD_NAME=2.1.0"
9 | export "FLUTTER_BUILD_NUMBER=20100"
10 | export "DART_OBFUSCATION=false"
11 | export "TRACK_WIDGET_CREATION=true"
12 | export "TREE_SHAKE_ICONS=false"
13 | export "PACKAGE_CONFIG=.dart_tool/package_config.json"
14 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaoyaocz/flutter_dmzj/6e27f949f2932708f9e2794a3b9e7a6e0e7909ef/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | DMZJX
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | DMZJX
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(FLUTTER_BUILD_NUMBER)
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | UIViewControllerBasedStatusBarAppearance
45 |
46 | CADisableMinimumFrameDurationOnPhone
47 |
48 | UIApplicationSupportsIndirectInputEvents
49 |
50 | NSAppTransportSecurity
51 |
52 | NSAllowsArbitraryLoads
53 |
54 |
55 | NSPhotoLibraryUsageDescription
56 | Save pictures to your gallery
57 |
58 |
59 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/ios/Runner/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | Runner
4 |
5 | Created by xiaoyaocz on 2023/3/15.
6 |
7 | */
8 | "CFBundleDisplayName" = "DMZJX";
9 | "NSPhotoLibraryUsageDescription" = "Save pictures to your gallery";
--------------------------------------------------------------------------------
/ios/Runner/zh-Hans.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /*
2 | InfoPlist.strings
3 | Runner
4 |
5 | Created by xiaoyaocz on 2023/3/15.
6 |
7 | */
8 | "CFBundleDisplayName" = "动漫之家X";
9 | "NSPhotoLibraryUsageDescription" = "保存图片至相册";
10 |
--------------------------------------------------------------------------------
/ios/Runner/zh-Hans.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/zh-Hans.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/lib/app/app_color.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AppColor {
4 | static ColorScheme colorSchemeLight = ColorScheme.fromSwatch(
5 | primarySwatch: Colors.blue,
6 | brightness: Brightness.light,
7 | );
8 | static ColorScheme colorSchemeDark = ColorScheme.fromSwatch(
9 | primarySwatch: Colors.blue,
10 | accentColor: Colors.blue,
11 | //primaryColorDark: Colors.blue,
12 | brightness: Brightness.dark,
13 | );
14 | static const Color backgroundColor = Color(0xfffafafa);
15 | static const Color backgroundColorDark = Color(0xff212121);
16 | static const Color black333 = Color(0xff333333);
17 | static const Color greyf0f0f0 = Color(0xfff0f0f0);
18 |
19 | static Map> novelThemes = {
20 | 0: [
21 | const Color.fromRGBO(245, 239, 217, 1),
22 | const Color(0xff301e1b),
23 | ],
24 | 1: [
25 | const Color.fromRGBO(248, 247, 252, 1),
26 | black333,
27 | ],
28 | 2: [
29 | const Color.fromRGBO(192, 237, 198, 1),
30 | Colors.black,
31 | ],
32 | 3: [
33 | const Color(0xff3b3a39),
34 | const Color.fromRGBO(230, 230, 230, 1),
35 | ],
36 | 4: [
37 | Colors.black,
38 | const Color.fromRGBO(200, 200, 200, 1),
39 | ],
40 | };
41 | }
42 |
--------------------------------------------------------------------------------
/lib/app/app_constant.dart:
--------------------------------------------------------------------------------
1 | class AppConstant {
2 | /// 定义平板宽度,当大于此宽度时APP进入双栏模式
3 | static const double kTabletWidth = 1000;
4 |
5 | /// 类型ID-漫画
6 | static const int kTypeComic = 4;
7 |
8 | /// 类型ID-新闻
9 | static const int kTypeNews = 6;
10 |
11 | /// 类型ID-专题
12 | static const int kTypeSpecial = 2;
13 |
14 | /// 类型ID-轻小说
15 | static const int kTypeNovel = 1;
16 | }
17 |
18 | class ReaderDirection {
19 | /// 左右 0
20 | static const int kLeftToRight = 0;
21 |
22 | /// 上下 1
23 | static const int kUpToDown = 1;
24 |
25 | /// 右左 2
26 | static const int kRightToLeft = 2;
27 | }
28 |
--------------------------------------------------------------------------------
/lib/app/app_error.dart:
--------------------------------------------------------------------------------
1 | class AppError implements Exception {
2 | final int code;
3 | final String message;
4 | AppError(
5 | this.message, {
6 | this.code = 0,
7 | });
8 |
9 | @override
10 | String toString() {
11 | return message;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/lib/app/event_bus.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter_dmzj/app/log.dart';
4 |
5 | /// 全局事件
6 | class EventBus {
7 | /// 点击了底部导航
8 | static const String kBottomNavigationBarClicked =
9 | "BottomNavigationBarClicked";
10 |
11 | /// 更新了漫画记录
12 | static const String kUpdatedComicHistory = "UpdateComicHistory";
13 |
14 | /// 更新了小说记录
15 | static const String kUpdatedNovelHistory = "UpdateNovelHistory";
16 | static EventBus? _instance;
17 |
18 | static EventBus get instance {
19 | _instance ??= EventBus();
20 | return _instance!;
21 | }
22 |
23 | final Map _streams = {};
24 |
25 | /// 触发事件
26 | void emit(String name, T data) {
27 | if (!_streams.containsKey(name)) {
28 | _streams.addAll({name: StreamController.broadcast()});
29 | }
30 | Log.d("Emit Event:$name\r\n$data");
31 |
32 | _streams[name]!.add(data);
33 | }
34 |
35 | /// 监听事件
36 | StreamSubscription listen(String name, Function(dynamic)? onData) {
37 | if (!_streams.containsKey(name)) {
38 | _streams.addAll({name: StreamController.broadcast()});
39 | }
40 | return _streams[name]!.stream.listen(onData);
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/app/keys.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: constant_identifier_names
2 |
3 | class Keys {
4 | /// APP相关设置的Hive Box名称
5 | static const SETTINGS_BOX_NAME = "DmzjSettings";
6 |
7 | /// 主题模式
8 | static const SETTINGS_THEME_MODE = "ThemeMode";
9 |
10 | /// 主题颜色
11 | static const SETTINGS_THEME_COLOR = "ThemeColor";
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app/log.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/foundation.dart';
2 | import 'package:logger/logger.dart';
3 |
4 | class Log {
5 | static Logger logger = Logger(
6 | printer: PrettyPrinter(
7 | methodCount: 0,
8 | errorMethodCount: 8,
9 | lineLength: 120,
10 | colors: true,
11 | printEmojis: true,
12 | printTime: false,
13 | ),
14 | );
15 |
16 | static d(String message) {
17 | logger.d("${DateTime.now().toString()}\n$message");
18 | }
19 |
20 | static i(String message) {
21 | logger.i("${DateTime.now().toString()}\n$message");
22 | }
23 |
24 | static e(String message, StackTrace stackTrace) {
25 | logger.e("${DateTime.now().toString()}\n$message", stackTrace: stackTrace);
26 | }
27 |
28 | static w(String message) {
29 | logger.w("${DateTime.now().toString()}\n$message");
30 | }
31 |
32 | static void logPrint(dynamic obj) {
33 | if (obj is Error) {
34 | Log.e(obj.toString(), obj.stackTrace ?? StackTrace.current);
35 | } else if (kDebugMode) {
36 | print(obj);
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/models/comic/author_model.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 |
3 | T? asT(dynamic value) {
4 | if (value is T) {
5 | return value;
6 | }
7 | return null;
8 | }
9 |
10 | class ComicAuthorModel {
11 | ComicAuthorModel({
12 | required this.nickname,
13 | this.description,
14 | required this.cover,
15 | required this.data,
16 | });
17 |
18 | factory ComicAuthorModel.fromJson(Map json) {
19 | final List? data =
20 | json['data'] is List ? [] : null;
21 | if (data != null) {
22 | for (final dynamic item in json['data']!) {
23 | if (item != null) {
24 | data.add(
25 | ComicAuthorComicModel.fromJson(asT