├── .gitignore ├── LICENSE ├── Linux_点我完成初始化.sh ├── Macos_点我完成初始化.sh ├── README.md ├── Windows_点我完成初始化.bat ├── base ├── .gitignore ├── .metadata ├── CHANGELOG.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── assets │ ├── anime │ │ ├── status_empty.json │ │ ├── status_error.json │ │ ├── status_loading1.json │ │ ├── status_loading2.json │ │ ├── status_loading3.json │ │ └── status_loading4.json │ ├── app_logo.png │ └── source │ │ ├── default.js │ │ └── default.json ├── lib │ ├── base.dart │ ├── common │ │ ├── common.dart │ │ ├── controller.dart │ │ ├── localization │ │ │ └── chinese_cupertino_localizations.dart │ │ ├── logic.dart │ │ ├── manage.dart │ │ ├── model.dart │ │ └── notifier.dart │ ├── manage │ │ ├── anime_parser │ │ │ ├── functions.dart │ │ │ ├── model.dart │ │ │ └── parser.dart │ │ ├── cache.dart │ │ ├── config.dart │ │ ├── db.dart │ │ ├── download │ │ │ ├── base.dart │ │ │ ├── download.dart │ │ │ ├── m3u8.dart │ │ │ ├── parser.dart │ │ │ └── video.dart │ │ ├── event.dart │ │ ├── proxy.dart │ │ ├── router.dart │ │ └── theme.dart │ ├── model │ │ ├── anime.dart │ │ ├── config.dart │ │ ├── database │ │ │ ├── collect.dart │ │ │ ├── download_record.dart │ │ │ ├── filter_select.dart │ │ │ ├── play_record.dart │ │ │ ├── proxy.dart │ │ │ ├── search_record.dart │ │ │ ├── source.dart │ │ │ └── video_cache.dart │ │ ├── download.dart │ │ ├── download_group.dart │ │ ├── filter.dart │ │ ├── time_table.dart │ │ └── version.dart │ ├── tool │ │ ├── date.dart │ │ ├── debounce.dart │ │ ├── file.dart │ │ ├── js_runtime.dart │ │ ├── loading.dart │ │ ├── log.dart │ │ ├── qrcode.dart │ │ ├── screen_type.dart │ │ ├── snack.dart │ │ ├── throttle.dart │ │ ├── tool.dart │ │ └── version.dart │ └── widget │ │ ├── anime_list │ │ ├── anime_list.dart │ │ ├── anime_list_desktop.dart │ │ └── anime_list_mobile.dart │ │ ├── blur.dart │ │ ├── download │ │ ├── downloaded.dart │ │ ├── downloading.dart │ │ ├── list.dart │ │ └── selector.dart │ │ ├── focus │ │ ├── tile.dart │ │ └── view.dart │ │ ├── future_builder.dart │ │ ├── image.dart │ │ ├── keep_alive.dart │ │ ├── listenable_builders.dart │ │ ├── lottie.dart │ │ ├── mask_view.dart │ │ ├── material.dart │ │ ├── message_dialog.dart │ │ ├── player │ │ ├── controller.dart │ │ ├── controls │ │ │ ├── bottom.dart │ │ │ ├── controls.dart │ │ │ ├── controls_desktop.dart │ │ │ ├── controls_mobile.dart │ │ │ ├── ignore_gesture.dart │ │ │ ├── mini.dart │ │ │ ├── side.dart │ │ │ ├── status.dart │ │ │ └── top.dart │ │ ├── player.dart │ │ └── widgets │ │ │ ├── brightness.dart │ │ │ ├── brightness_status.dart │ │ │ ├── buffing_status.dart │ │ │ ├── full_screen_button.dart │ │ │ ├── lock_button.dart │ │ │ ├── mini_screen_button.dart │ │ │ ├── play_button.dart │ │ │ ├── play_speed.dart │ │ │ ├── play_speed_status.dart │ │ │ ├── progress.dart │ │ │ ├── progress_slider.dart │ │ │ ├── volume.dart │ │ │ └── volume_status.dart │ │ ├── proxy │ │ ├── proxy.dart │ │ ├── proxy_update.dart │ │ ├── proxy_update_desktop.dart │ │ └── proxy_update_mobile.dart │ │ ├── qrcode_view.dart │ │ ├── refresh │ │ ├── controller.dart │ │ └── refresh_view.dart │ │ ├── screen_builder.dart │ │ ├── source_import.dart │ │ ├── source_logo.dart │ │ ├── status_box.dart │ │ ├── stream_view.dart │ │ ├── tab.dart │ │ ├── timer.dart │ │ └── vertical_progress.dart ├── pubspec.yaml ├── scripts.bat └── test │ └── base_test.dart ├── desktop ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── assets │ ├── anime │ │ └── home_downloading.json │ ├── app_logo.png │ └── icon │ │ ├── home_navigation_newest.png │ │ └── home_navigation_newest_selected.png ├── lib │ ├── common │ │ ├── custom.dart │ │ ├── icon.dart │ │ └── route.dart │ ├── main.dart │ ├── model │ │ ├── event.dart │ │ └── navigation.dart │ ├── page │ │ ├── anime │ │ │ ├── filter.dart │ │ │ ├── index.dart │ │ │ └── search.dart │ │ ├── collect │ │ │ └── index.dart │ │ ├── detail │ │ │ ├── download.dart │ │ │ ├── index.dart │ │ │ └── info.dart │ │ ├── download │ │ │ └── index.dart │ │ ├── home │ │ │ ├── index.dart │ │ │ └── source.dart │ │ ├── player │ │ │ ├── index.dart │ │ │ └── resource.dart │ │ ├── record │ │ │ └── index.dart │ │ ├── source │ │ │ └── index.dart │ │ └── timetable │ │ │ └── index.dart │ ├── tool │ │ └── version.dart │ └── widget │ │ └── page.dart ├── linux │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ │ └── CMakeLists.txt │ ├── main.cc │ ├── my_application.cc │ └── my_application.h ├── macos │ ├── .gitignore │ ├── Flutter │ │ ├── Flutter-Debug.xcconfig │ │ └── Flutter-Release.xcconfig │ ├── 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 │ │ │ │ ├── Contents.json │ │ │ │ ├── icon-128.png │ │ │ │ ├── icon-128@2x.png │ │ │ │ ├── icon-16.png │ │ │ │ ├── icon-16@2x.png │ │ │ │ ├── icon-256.png │ │ │ │ ├── icon-256@2x.png │ │ │ │ ├── icon-32.png │ │ │ │ ├── icon-32@2x.png │ │ │ │ ├── icon-512.png │ │ │ │ └── icon-512@2x.png │ │ ├── Base.lproj │ │ │ └── MainMenu.xib │ │ ├── Configs │ │ │ ├── AppInfo.xcconfig │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── Warnings.xcconfig │ │ ├── DebugProfile.entitlements │ │ ├── Info.plist │ │ ├── MainFlutterWindow.swift │ │ └── Release.entitlements │ └── RunnerTests │ │ └── RunnerTests.swift ├── pubspec.lock ├── pubspec.yaml ├── test │ └── widget_test.dart └── windows │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ └── CMakeLists.txt │ └── 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 ├── mobile ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── jtech │ │ │ │ │ └── jtech_anime │ │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ │ ├── drawable-hdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-mdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-night-hdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-mdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-xhdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-xxhdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-xxxhdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-v21 │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable-xhdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable │ │ │ │ ├── background.png │ │ │ │ ├── ic_launcher.png │ │ │ │ └── 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 │ │ │ │ ├── values-night-v31 │ │ │ │ └── styles.xml │ │ │ │ ├── values-night │ │ │ │ └── styles.xml │ │ │ │ ├── values-v31 │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ └── styles.xml │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── mobile_android.iml │ └── settings.gradle ├── assets │ ├── anime │ │ └── qrcode_scanner.json │ └── app_logo.png ├── debug.keystore ├── flutter_native_splash.yaml ├── gen_native_splash.bat ├── ios │ ├── .gitignore │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── 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-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ ├── LaunchBackground.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── background.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 │ └── RunnerTests │ │ └── RunnerTests.swift ├── lib │ ├── common │ │ ├── custom.dart │ │ └── route.dart │ ├── main.dart │ ├── manage │ │ └── notification.dart │ ├── page │ │ ├── collect │ │ │ └── index.dart │ │ ├── detail │ │ │ ├── download.dart │ │ │ ├── index.dart │ │ │ └── info.dart │ │ ├── download │ │ │ └── index.dart │ │ ├── home │ │ │ ├── filter.dart │ │ │ ├── index.dart │ │ │ ├── list.dart │ │ │ ├── source.dart │ │ │ └── timetable.dart │ │ ├── player │ │ │ ├── index.dart │ │ │ └── resource.dart │ │ ├── record │ │ │ └── index.dart │ │ ├── search │ │ │ ├── index.dart │ │ │ └── search.dart │ │ └── source │ │ │ └── index.dart │ ├── tool │ │ ├── network.dart │ │ ├── permission.dart │ │ ├── tool.dart │ │ └── version.dart │ └── widget │ │ ├── qr_code │ │ ├── scan │ │ │ ├── controller.dart │ │ │ ├── iso.dart │ │ │ └── view.dart │ │ ├── scanner.dart │ │ └── sheet.dart │ │ └── text_scroll.dart ├── mobile.iml ├── pubspec.yaml └── test │ ├── test.dart │ └── widget_test.dart ├── pad ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── jtech │ │ │ │ │ └── jtech_anime │ │ │ │ │ └── pad │ │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ │ ├── drawable-hdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-mdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-night-hdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-mdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-xhdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-xxhdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-night-xxxhdpi │ │ │ │ └── android12splash.png │ │ │ │ ├── drawable-v21 │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable-xhdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── android12splash.png │ │ │ │ └── splash.png │ │ │ │ ├── drawable │ │ │ │ ├── background.png │ │ │ │ └── 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 │ │ │ │ ├── values-night-v31 │ │ │ │ └── styles.xml │ │ │ │ ├── values-night │ │ │ │ └── styles.xml │ │ │ │ ├── values-v31 │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ └── styles.xml │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── pad_android.iml │ └── settings.gradle ├── assets │ ├── anime │ │ └── qrcode_scanner.json │ └── app_logo.png ├── debug.keystore ├── flutter_native_splash.yaml ├── ios │ ├── .gitignore │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── 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-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ ├── LaunchBackground.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── background.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 │ └── RunnerTests │ │ └── RunnerTests.swift ├── lib │ ├── common │ │ ├── custom.dart │ │ └── route.dart │ ├── main.dart │ ├── manage │ │ └── notification.dart │ ├── page │ │ ├── collect │ │ │ └── index.dart │ │ ├── detail │ │ │ ├── download.dart │ │ │ ├── index.dart │ │ │ └── info.dart │ │ ├── download │ │ │ └── index.dart │ │ ├── home │ │ │ ├── filter.dart │ │ │ ├── index.dart │ │ │ ├── list.dart │ │ │ ├── source.dart │ │ │ └── timetable.dart │ │ ├── player │ │ │ ├── index.dart │ │ │ └── resource.dart │ │ ├── record │ │ │ └── index.dart │ │ ├── search │ │ │ ├── index.dart │ │ │ └── search.dart │ │ └── source │ │ │ └── index.dart │ ├── tool │ │ ├── network.dart │ │ ├── permission.dart │ │ ├── tool.dart │ │ └── version.dart │ └── widget │ │ └── qr_code │ │ ├── scan │ │ ├── controller.dart │ │ ├── iso.dart │ │ └── view.dart │ │ ├── scanner.dart │ │ └── sheet.dart ├── pad.iml ├── pubspec.yaml └── test │ └── widget_test.dart ├── plugin ├── default.backup.js ├── default.js ├── default.json ├── default.png ├── default_hanime1.js ├── default_hanime1.json └── default_hanime1.png ├── readme ├── app_logo.png ├── avatar_mao.jpg ├── desktop.png ├── mobile.jpg └── pad.png └── screen_fusion ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── jtech │ │ │ │ └── jtech_anime │ │ │ │ └── screen_fusion │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── screen_fusion_android.iml └── settings.gradle ├── assets └── app_logo.png ├── debug.keystore ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── 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-App-1024x1024@1x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.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 └── RunnerTests │ └── RunnerTests.swift ├── lib ├── common │ ├── custom.dart │ └── route.dart ├── main.dart └── page │ └── home │ └── index.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 ├── macos ├── .gitignore ├── Flutter │ ├── Flutter-Debug.xcconfig │ ├── Flutter-Release.xcconfig │ └── GeneratedPluginRegistrant.swift ├── 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 │ │ │ ├── Contents.json │ │ │ ├── app_icon_1024.png │ │ │ ├── app_icon_128.png │ │ │ ├── app_icon_16.png │ │ │ ├── app_icon_256.png │ │ │ ├── app_icon_32.png │ │ │ ├── app_icon_512.png │ │ │ └── app_icon_64.png │ ├── Base.lproj │ │ └── MainMenu.xib │ ├── Configs │ │ ├── AppInfo.xcconfig │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── Warnings.xcconfig │ ├── DebugProfile.entitlements │ ├── Info.plist │ ├── MainFlutterWindow.swift │ └── Release.entitlements └── RunnerTests │ └── RunnerTests.swift ├── pubspec.lock ├── pubspec.yaml ├── screen_fusion.iml ├── test └── widget_test.dart └── windows ├── .gitignore ├── CMakeLists.txt ├── flutter ├── CMakeLists.txt ├── generated_plugin_registrant.cc ├── generated_plugin_registrant.h └── generated_plugins.cmake └── 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 | publish 2 | icons -------------------------------------------------------------------------------- /Linux_点我完成初始化.sh: -------------------------------------------------------------------------------- 1 | cd base 2 | dart run build_runner build -------------------------------------------------------------------------------- /Macos_点我完成初始化.sh: -------------------------------------------------------------------------------- 1 | cd base 2 | dart run build_runner run -------------------------------------------------------------------------------- /Windows_点我完成初始化.bat: -------------------------------------------------------------------------------- 1 | cd base 2 | dart run build_runner build -------------------------------------------------------------------------------- /base/.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 | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. 26 | /pubspec.lock 27 | **/doc/api/ 28 | .dart_tool/ 29 | .packages 30 | build/ 31 | 32 | .flutter-plugins 33 | .flutter-plugins-dependencies 34 | 35 | *.g.dart 36 | /assets/update_config.json 37 | -------------------------------------------------------------------------------- /base/.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 and should not be manually edited. 5 | 6 | version: 7 | revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" 8 | channel: "stable" 9 | 10 | project_type: package 11 | -------------------------------------------------------------------------------- /base/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.0.1 2 | 3 | * TODO: Describe initial release. 4 | -------------------------------------------------------------------------------- /base/LICENSE: -------------------------------------------------------------------------------- 1 | TODO: Add your license here. 2 | -------------------------------------------------------------------------------- /base/README.md: -------------------------------------------------------------------------------- 1 | 13 | 14 | TODO: Put a short description of the package here that helps potential users 15 | know whether this package might be useful for them. 16 | 17 | ## Features 18 | 19 | TODO: List what your package can do. Maybe include images, gifs, or videos. 20 | 21 | ## Getting started 22 | 23 | TODO: List prerequisites and provide or point to information on how to 24 | start using the package. 25 | 26 | ## Usage 27 | 28 | TODO: Include short and useful examples for package users. Add longer examples 29 | to `/example` folder. 30 | 31 | ```dart 32 | const like = 'sample'; 33 | ``` 34 | 35 | ## Additional information 36 | 37 | TODO: Tell users more about the package: where to find more information, how to 38 | contribute to the package, how to file issues, what response they can expect 39 | from the package authors, and more. 40 | -------------------------------------------------------------------------------- /base/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:flutter_lints/flutter.yaml 2 | 3 | # Additional information about this file can be found at 4 | # https://dart.dev/guides/language/analysis-options 5 | -------------------------------------------------------------------------------- /base/assets/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/base/assets/app_logo.png -------------------------------------------------------------------------------- /base/assets/source/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "yhdmz", 3 | "name": "樱花动漫", 4 | "homepage": "https://www.yhdmz.org", 5 | "version": "1.0.0", 6 | "lastEditDate": "2023-08-10T17:19:42.113727", 7 | "logoUrl": "https://www.yhdmz.org/tpsf/yh_pic/favicon.ico", 8 | "fileUri": "packages/jtech_anime_base/assets/source/default.js" 9 | } -------------------------------------------------------------------------------- /base/lib/common/common.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | /* 4 | * 静态资源/通用静态变量 5 | * @author wuxubaiyang 6 | * @Time 2022/9/8 14:54 7 | */ 8 | class Common { 9 | // app名称 10 | static const String appName = '看番咩?'; 11 | 12 | // 动画-加载动画 13 | static String get statusLoadingAsset => [ 14 | // 'packages/jtech_anime_base/assets/anime/status_loading1.json', 15 | // 'packages/jtech_anime_base/assets/anime/status_loading2.json', 16 | 'packages/jtech_anime_base/assets/anime/status_loading3.json', 17 | // 'packages/jtech_anime_base/assets/anime/status_loading4.json', 18 | ][Random().nextInt(1)]; 19 | 20 | // 动画-空内容 21 | static const String statusEmptyAsset = 22 | 'packages/jtech_anime_base/assets/anime/status_empty.json'; 23 | 24 | // 动画-错误 25 | static const String statusErrorAsset = 26 | 'packages/jtech_anime_base/assets/anime/status_error.json'; 27 | } 28 | 29 | /* 30 | * 目录管理 31 | * @author wuxubaiyang 32 | * @Time 2022/9/9 17:57 33 | */ 34 | class FileDirPath { 35 | // 图片缓存路径 36 | static const String imageCachePath = 'image_cache'; 37 | 38 | // 视频缓存路径 39 | static const String videoCachePath = 'video_cache'; 40 | 41 | // 音频缓存路径 42 | static const String audioCachePath = 'audio_cache'; 43 | 44 | // 番剧解析js缓存目录 45 | static const String animeParserCachePath = 'anime_parser_cache'; 46 | } 47 | -------------------------------------------------------------------------------- /base/lib/common/controller.dart: -------------------------------------------------------------------------------- 1 | import 'notifier.dart'; 2 | 3 | /* 4 | * 控制器基类 5 | * @author wuxubaiyang 6 | * @Time 2022/3/30 17:32 7 | */ 8 | abstract class BaseController extends ValueChangeNotifier { 9 | BaseController(super.v); 10 | } 11 | 12 | /* 13 | * 控制器基类-表单 14 | * @author wuxubaiyang 15 | * @Time 2022/3/31 15:36 16 | */ 17 | abstract class BaseControllerMap extends MapValueChangeNotifier { 18 | BaseControllerMap(super.v); 19 | } 20 | 21 | /* 22 | * 控制器基类-集合 23 | * @author wuxubaiyang 24 | * @Time 2022/3/31 15:37 25 | */ 26 | abstract class BaseControllerList extends ListValueChangeNotifier { 27 | BaseControllerList(super.v); 28 | } 29 | -------------------------------------------------------------------------------- /base/lib/common/manage.dart: -------------------------------------------------------------------------------- 1 | /* 2 | * 管理基类 3 | * @author wuxubaiyang 4 | * @Time 2022/3/17 14:11 5 | */ 6 | abstract class BaseManage { 7 | // 初始化方法 8 | Future init() async {} 9 | } 10 | -------------------------------------------------------------------------------- /base/lib/common/model.dart: -------------------------------------------------------------------------------- 1 | /* 2 | * 数据对象基类 3 | * @author wuxubaiyang 4 | * @Time 2022/3/17 9:39 5 | */ 6 | abstract class BaseModel { 7 | const BaseModel(); 8 | 9 | Map to() => {}; 10 | } 11 | -------------------------------------------------------------------------------- /base/lib/manage/download/video.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:io'; 3 | import 'package:dio/dio.dart'; 4 | import 'package:jtech_anime_base/tool/tool.dart'; 5 | import 'package:path/path.dart'; 6 | import 'base.dart'; 7 | 8 | /* 9 | * 一般视频下载 10 | * @author wuxubaiyang 11 | * @Time 2023/8/1 11:23 12 | */ 13 | class VideoDownloader extends Downloader { 14 | // 下载番剧 15 | @override 16 | Future start( 17 | String url, 18 | String savePath, { 19 | CancelToken? cancelToken, 20 | DownloaderProgressCallback? receiveProgress, 21 | }) async { 22 | // 文件不存在则启用下载 23 | final filename = 24 | basename(url.split('?').firstOrNull ?? 'default/${md5(url)}.mp4'); 25 | final downloadFile = File('$savePath/$filename'); 26 | if (!downloadFile.existsSync()) { 27 | // 下载文件并存储到本地 28 | final tempFile = await download( 29 | url, 30 | '${downloadFile.path}.tmp', 31 | receiveProgress: receiveProgress, 32 | cancelToken: cancelToken, 33 | ); 34 | // 如果被取消了则直接返回 35 | if (isCanceled(cancelToken)) return null; 36 | // 如果没有返回下载的文件则认为是异常 37 | if (tempFile == null) throw Exception('下载文件返回为空'); 38 | // 下载完成后去掉.tmp标记 39 | await tempFile.rename(downloadFile.path); 40 | } 41 | return downloadFile; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /base/lib/manage/event.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:jtech_anime_base/common/manage.dart'; 3 | import 'package:jtech_anime_base/common/model.dart'; 4 | 5 | /* 6 | * 消息总线管理 7 | * @author wuxubaiyang 8 | * @Time 2022/3/17 14:14 9 | */ 10 | class EventManage extends BaseManage { 11 | static final EventManage _instance = EventManage._internal(); 12 | 13 | factory EventManage() => _instance; 14 | 15 | // 流控制器 16 | final StreamController _streamController; 17 | 18 | EventManage._internal() 19 | : _streamController = StreamController.broadcast(sync: false); 20 | 21 | // 注册事件 22 | Stream on() => 23 | _streamController.stream.where((event) => event is T).cast(); 24 | 25 | // 注册值对比事件 26 | Stream onValue(T value) => 27 | _streamController.stream.where((event) => event == value).cast(); 28 | 29 | // 发送事件 30 | void send(T event) => _streamController.add(event); 31 | 32 | // 销毁消息总线 33 | void destroy() => _streamController.close(); 34 | } 35 | 36 | // 单例调用 37 | final event = EventManage(); 38 | 39 | /* 40 | * 消息总线对象基类 41 | * @author wuxubaiyang 42 | * @Time 2022/3/17 14:15 43 | */ 44 | abstract class EventModel extends BaseModel { 45 | const EventModel(); 46 | } 47 | -------------------------------------------------------------------------------- /base/lib/model/database/filter_select.dart: -------------------------------------------------------------------------------- 1 | import 'package:isar/isar.dart'; 2 | 3 | part 'filter_select.g.dart'; 4 | 5 | @collection 6 | class FilterSelect { 7 | Id id = Isar.autoIncrement; 8 | 9 | // 夫分类名称 10 | String parentName = ''; 11 | 12 | // 子分类名称 13 | String name = ''; 14 | 15 | // 父分类key 16 | @Index(type: IndexType.hash) 17 | String key = ''; 18 | 19 | // 子分类值 20 | @Index(type: IndexType.hash) 21 | String value = ''; 22 | 23 | // 过滤数据源 24 | @Index(type: IndexType.hash) 25 | String source = ''; 26 | } 27 | -------------------------------------------------------------------------------- /base/lib/model/database/play_record.dart: -------------------------------------------------------------------------------- 1 | import 'package:isar/isar.dart'; 2 | 3 | part 'play_record.g.dart'; 4 | 5 | /* 6 | * 播放记录 7 | * @author wuxubaiyang 8 | * @Time 2023/7/13 16:06 9 | */ 10 | @collection 11 | class PlayRecord { 12 | Id id = Isar.autoIncrement; 13 | 14 | // 番剧url 15 | @Index(type: IndexType.hash, unique: true, replace: true) 16 | String url = ''; 17 | 18 | // 数据源 19 | @Index(type: IndexType.hash) 20 | String source = ''; 21 | 22 | // 番剧名称 23 | String name = ''; 24 | 25 | // 播放番剧封面 26 | String cover = ''; 27 | 28 | // 播放资源名称 29 | String resName = ''; 30 | 31 | // 播放的资源url 32 | String resUrl = ''; 33 | 34 | // 播放进度(单位秒) 35 | int progress = 0; 36 | 37 | // 最后更新时间 38 | DateTime updateTime = DateTime.now(); 39 | } 40 | -------------------------------------------------------------------------------- /base/lib/model/database/proxy.dart: -------------------------------------------------------------------------------- 1 | import 'package:isar/isar.dart'; 2 | 3 | part 'proxy.g.dart'; 4 | 5 | /* 6 | * 代理记录 7 | * @author wuxubaiyang 8 | * @Time 2023/10/23 11:09 9 | */ 10 | @Collection() 11 | class ProxyRecord { 12 | Id id = Isar.autoIncrement; 13 | 14 | // 域名 15 | String host = ''; 16 | 17 | // 端口 18 | int port = 7890; 19 | 20 | // 完成代理地址 21 | @Index(type: IndexType.hash, unique: true) 22 | String proxy = ''; 23 | 24 | // 从json加载 25 | static ProxyRecord from(obj) { 26 | return ProxyRecord() 27 | ..host = obj['host'] ?? '' 28 | ..port = obj['port'] ?? '' 29 | ..proxy = obj['proxy'] ?? ''; 30 | } 31 | 32 | // 转换为json 33 | Map toJson() => { 34 | 'host': host, 35 | 'port': port, 36 | 'proxy': proxy, 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /base/lib/model/database/search_record.dart: -------------------------------------------------------------------------------- 1 | import 'package:isar/isar.dart'; 2 | 3 | part 'search_record.g.dart'; 4 | 5 | /* 6 | * 搜索记录 7 | * @author wuxubaiyang 8 | * @Time 2023/7/13 16:06 9 | */ 10 | @collection 11 | class SearchRecord { 12 | Id id = Isar.autoIncrement; 13 | 14 | // 搜索内容 15 | @Index(type: IndexType.hash) 16 | String keyword = ''; 17 | 18 | // 搜索热度 19 | int heat = 0; 20 | } 21 | -------------------------------------------------------------------------------- /base/lib/model/database/video_cache.dart: -------------------------------------------------------------------------------- 1 | import 'package:isar/isar.dart'; 2 | import 'package:jtech_anime_base/model/anime.dart'; 3 | 4 | part 'video_cache.g.dart'; 5 | 6 | /* 7 | * 视频缓存 8 | * @author wuxubaiyang 9 | * @Time 2023/7/13 16:06 10 | */ 11 | @collection 12 | class VideoCache { 13 | Id id = Isar.autoIncrement; 14 | 15 | // 原始地址 16 | @Index(type: IndexType.hash, unique: true, replace: true) 17 | String url = ''; 18 | 19 | // 播放地址 20 | String playUrl = ''; 21 | 22 | // 缓存时间 23 | int cacheTime = DateTime.now().millisecondsSinceEpoch; 24 | 25 | // 原始资源信息 26 | @Ignore() 27 | ResourceItemModel? item; 28 | 29 | static VideoCache from(obj, [ResourceItemModel? item]) { 30 | return VideoCache() 31 | ..url = obj['url'] ?? '' 32 | ..playUrl = obj['playUrl'] ?? '' 33 | ..item = item; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /base/lib/model/download_group.dart: -------------------------------------------------------------------------------- 1 | import 'package:jtech_anime_base/common/model.dart'; 2 | import 'database/download_record.dart'; 3 | 4 | /* 5 | * 下载记录分组 6 | * @author wuxubaiyang 7 | * @Time 2023/8/8 11:03 8 | */ 9 | class DownloadGroup extends BaseModel { 10 | // 最近的更新时间 11 | final DateTime updateTime; 12 | 13 | // 番剧名称 14 | final String title; 15 | 16 | // 番剧封面 17 | final String cover; 18 | 19 | // 番剧地址 20 | final String url; 21 | 22 | // 番剧来源 23 | final String source; 24 | 25 | // 资源列表 26 | final List records; 27 | 28 | DownloadGroup({ 29 | required this.updateTime, 30 | required this.title, 31 | required this.cover, 32 | required this.url, 33 | required this.source, 34 | required this.records, 35 | }); 36 | 37 | // 从记录集合中封装成组 38 | static DownloadGroup? fromRecords(List records) { 39 | if (records.isEmpty) return null; 40 | final item = records.first; 41 | // 对下载记录列表重新排序并获取最新的更新时间 42 | DateTime updateTime = item.updateTime; 43 | records.sort((l, r) { 44 | if (r.updateTime.compareTo(updateTime) > 1) { 45 | updateTime = r.updateTime; 46 | } 47 | return l.order.compareTo(r.order); 48 | }); 49 | return DownloadGroup( 50 | url: item.url, 51 | title: item.title, 52 | cover: item.cover, 53 | source: item.source, 54 | records: records, 55 | updateTime: updateTime, 56 | ); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /base/lib/model/filter.dart: -------------------------------------------------------------------------------- 1 | import 'package:jtech_anime_base/common/model.dart'; 2 | 3 | /* 4 | * 动漫列表过滤条件 5 | * @author wuxubaiyang 6 | * @Time 2023/7/6 11:25 7 | */ 8 | class AnimeFilterModel extends BaseModel { 9 | // 名称 10 | final String name; 11 | 12 | // key 13 | final String key; 14 | 15 | // 最大选择数 16 | final int maxSelected; 17 | 18 | // 选项 19 | final List items; 20 | 21 | AnimeFilterModel.from(obj) 22 | : name = obj['name'] ?? '', 23 | key = obj['key'] ?? '', 24 | maxSelected = obj['maxSelected'] ?? 1, 25 | items = (obj['items'] ?? []) 26 | .map((e) => AnimeFilterItemModel.from(e)) 27 | .toList(); 28 | } 29 | 30 | /* 31 | * 动漫过滤列表项 32 | * @author wuxubaiyang 33 | * @Time 2023/7/6 11:26 34 | */ 35 | class AnimeFilterItemModel extends BaseModel { 36 | // 名称 37 | final String name; 38 | 39 | // 值 40 | final String value; 41 | 42 | AnimeFilterItemModel.from(obj) 43 | : name = obj['name'] ?? '', 44 | value = obj['value'] ?? ''; 45 | } 46 | -------------------------------------------------------------------------------- /base/lib/tool/debounce.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:flutter/animation.dart'; 3 | 4 | /* 5 | * 防抖 6 | * @author wuxubaiyang 7 | * @Time 2023/7/18 13:29 8 | */ 9 | class Debounce { 10 | // 防抖方法表 11 | static final _debounce = {}; 12 | 13 | // 防抖 14 | static void c(Function() func, String key, 15 | {Duration delay = const Duration(milliseconds: 2000)}) { 16 | Timer? timer = _debounce[key]; 17 | if (timer?.isActive ?? false) { 18 | _debounce.remove(key); 19 | timer?.cancel(); 20 | } 21 | _debounce[key] = Timer(delay, func); 22 | } 23 | 24 | // 防抖方法 25 | static VoidCallback? click(Function() func, String key, 26 | {Duration delay = const Duration(milliseconds: 2000)}) { 27 | return () => c(func, key, delay: delay); 28 | } 29 | 30 | // 清除防抖 31 | static void clear(String key) { 32 | Timer? timer = _debounce[key]; 33 | if (timer?.isActive ?? false) { 34 | _debounce.remove(key); 35 | timer?.cancel(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /base/lib/tool/js_runtime.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_js/flutter_js.dart'; 2 | 3 | /* 4 | * js运行时方法封装 5 | * @author wuxubaiyang 6 | * @Time 2023/9/6 16:37 7 | */ 8 | class JSRuntime { 9 | // 持有js运行时对象 10 | final _jsRuntime = getJavascriptRuntime(); 11 | 12 | // 执行js方法 13 | Future eval(String code) async { 14 | final result = await _jsRuntime.evaluateAsync(code); 15 | _jsRuntime.executePendingJob(); 16 | final evalResult = await _jsRuntime.handlePromise(result); 17 | return evalResult.stringResult; 18 | } 19 | 20 | // 监听自定义消息 21 | void onMessage(String channelName, dynamic Function(dynamic args) fn) { 22 | _jsRuntime.onMessage(channelName, fn); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /base/lib/tool/screen_type.dart: -------------------------------------------------------------------------------- 1 | /* 2 | * 屏幕类型 3 | * @author wuxubaiyang 4 | * @Time 2023/11/14 13:50 5 | */ 6 | enum ScreenType { mobile, pad, desktop, fusion } 7 | 8 | /* 9 | * 扩展屏幕类型方法 10 | * @author wuxubaiyang 11 | * @Time 2023/11/14 13:51 12 | */ 13 | extension ScreenTypeExtension on ScreenType { 14 | // 是否是移动端 15 | bool get isMobile => this == ScreenType.mobile; 16 | 17 | // 是否是平板 18 | bool get isPad => this == ScreenType.pad; 19 | 20 | // 是否是桌面端 21 | bool get isDesktop => this == ScreenType.desktop; 22 | 23 | // 是否是融合端 24 | bool get isFusion => this == ScreenType.fusion; 25 | } 26 | -------------------------------------------------------------------------------- /base/lib/tool/throttle.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:ui'; 3 | 4 | /* 5 | * 节流 6 | * @author wuxubaiyang 7 | * @Time 2023/7/18 13:29 8 | */ 9 | class Throttle { 10 | // 节流方法 11 | static final _throttle = {}; 12 | 13 | // 节流 14 | static void c(Function() func, String key, 15 | {Duration delay = const Duration(milliseconds: 2000)}) async { 16 | if (_throttle.contains(key)) return; 17 | _throttle.add(key); 18 | func.call(); 19 | await Future.delayed(delay); 20 | _throttle.remove(key); 21 | } 22 | 23 | // 节流方法 24 | static VoidCallback? click(Function() func, String key, 25 | {Duration delay = const Duration(milliseconds: 2000)}) { 26 | return () => c(func, key, delay: delay); 27 | } 28 | 29 | // 清除节流 30 | static void clear(String key) => _throttle.remove(key); 31 | } 32 | -------------------------------------------------------------------------------- /base/lib/widget/blur.dart: -------------------------------------------------------------------------------- 1 | import 'package:blur/blur.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | /* 5 | * 模糊组件 6 | * @author wuxubaiyang 7 | * @Time 2023/9/6 16:48 8 | */ 9 | class BlurView extends StatelessWidget { 10 | // 模糊度 11 | final double blur; 12 | 13 | // 模糊颜色 14 | final Color color; 15 | 16 | // 元素 17 | final Widget child; 18 | 19 | const BlurView({ 20 | super.key, 21 | required this.blur, 22 | required this.child, 23 | this.color = Colors.white, 24 | }); 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return Blur( 29 | blur: blur, 30 | blurColor: color, 31 | child: child, 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /base/lib/widget/keep_alive.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | /* 4 | * 保持页面状态的组件,用于解决页面切换时重绘的问题 5 | * @author wuxubaiyang 6 | * @Time 2023/9/8 16:53 7 | */ 8 | class KeepAliveWrapper extends StatefulWidget { 9 | const KeepAliveWrapper({ 10 | super.key, 11 | this.keepAlive = true, 12 | required this.child, 13 | }); 14 | 15 | final bool keepAlive; 16 | final Widget child; 17 | 18 | @override 19 | State createState() => _KeepAliveWrapperState(); 20 | } 21 | 22 | /* 23 | * 保持页面状态的组件-状态,用于解决页面切换时重绘的问题 24 | * @author wuxubaiyang 25 | * @Time 2023/9/8 16:53 26 | */ 27 | class _KeepAliveWrapperState extends State 28 | with AutomaticKeepAliveClientMixin { 29 | @override 30 | Widget build(BuildContext context) { 31 | super.build(context); 32 | return widget.child; 33 | } 34 | 35 | @override 36 | void didUpdateWidget(covariant KeepAliveWrapper oldWidget) { 37 | if (oldWidget.keepAlive != widget.keepAlive) { 38 | updateKeepAlive(); 39 | } 40 | super.didUpdateWidget(oldWidget); 41 | } 42 | 43 | @override 44 | bool get wantKeepAlive => widget.keepAlive; 45 | } 46 | -------------------------------------------------------------------------------- /base/lib/widget/lottie.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:lottie/lottie.dart'; 3 | 4 | /* 5 | * lottie动画组件 6 | * @author wuxubaiyang 7 | * @Time 2023/9/6 16:30 8 | */ 9 | class LottieView extends StatelessWidget { 10 | // 资源路径 11 | final String assetName; 12 | 13 | // 宽度 14 | final double? width; 15 | 16 | // 高度 17 | final double? height; 18 | 19 | // 填充方式 20 | final BoxFit? fit; 21 | 22 | const LottieView(this.assetName, { 23 | super.key, 24 | this.width, 25 | this.height, 26 | this.fit, 27 | }); 28 | 29 | @override 30 | Widget build(BuildContext context) { 31 | return Lottie.asset( 32 | assetName, 33 | frameRate: FrameRate.max, 34 | height: height, 35 | width: width, 36 | fit: fit, 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /base/lib/widget/material.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_localizations/flutter_localizations.dart'; 3 | import 'package:jtech_anime_base/common/common.dart'; 4 | import 'package:jtech_anime_base/common/localization/chinese_cupertino_localizations.dart'; 5 | import 'package:jtech_anime_base/manage/router.dart'; 6 | import 'stream_view.dart'; 7 | 8 | /* 9 | * 自定义material入口 10 | * @author wuxubaiyang 11 | * @Time 2023/9/6 12:01 12 | */ 13 | class CustomMaterialApp extends StatelessWidget { 14 | // 路由表 15 | final Map routesMap; 16 | 17 | // 首页 18 | final Widget? home; 19 | 20 | const CustomMaterialApp({ 21 | super.key, 22 | this.routesMap = const {}, 23 | this.home, 24 | }); 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return ThemeStreamView( 29 | builder: (_, snap) => MaterialApp( 30 | title: Common.appName, 31 | theme: snap.data?.data, 32 | navigatorKey: router.navigateKey, 33 | debugShowCheckedModeBanner: false, 34 | onGenerateRoute: router.onGenerateRoute( 35 | routesMap: routesMap, 36 | ), 37 | localizationsDelegates: const [ 38 | GlobalWidgetsLocalizations.delegate, 39 | GlobalMaterialLocalizations.delegate, 40 | ChineseCupertinoLocalizations.delegate, 41 | ], 42 | supportedLocales: const [ 43 | Locale('en', 'US'), 44 | Locale('zh', 'CN'), 45 | ], 46 | home: home, 47 | ), 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /base/lib/widget/player/controls/mini.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/base.dart'; 3 | import 'package:jtech_anime_base/widget/player/widgets/play_button.dart'; 4 | import 'package:jtech_anime_base/widget/player/widgets/progress.dart'; 5 | 6 | /* 7 | * 自定义播放器控制层-mini窗口状态 8 | * @author wuxubaiyang 9 | * @Time 2023/8/28 10:57 10 | */ 11 | class CustomPlayerControlsMini extends StatelessWidget { 12 | // 播放器控制器 13 | final CustomVideoPlayerController controller; 14 | 15 | const CustomPlayerControlsMini({ 16 | super.key, 17 | required this.controller, 18 | }); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Container( 23 | color: Colors.black.withOpacity(0.75), 24 | child: Stack( 25 | alignment: Alignment.center, 26 | children: [ 27 | Align( 28 | alignment: Alignment.topLeft, 29 | child: CloseButton( 30 | onPressed: controller.toggleMiniWindow, 31 | ), 32 | ), 33 | CustomPlayerPlayButton( 34 | controller: controller, 35 | ), 36 | Align( 37 | alignment: Alignment.bottomCenter, 38 | child: CustomPlayerProgress( 39 | controller: controller, 40 | ), 41 | ), 42 | ], 43 | ), 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /base/lib/widget/player/controls/side.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/base.dart'; 3 | import 'package:jtech_anime_base/widget/player/widgets/lock_button.dart'; 4 | 5 | /* 6 | * 自定义播放器控制层-侧边 7 | * @author wuxubaiyang 8 | * @Time 2023/8/28 10:19 9 | */ 10 | class CustomPlayerControlsSide extends StatelessWidget { 11 | // 播放器控制器 12 | final CustomVideoPlayerController controller; 13 | 14 | // 是否展示锁定 15 | final bool showLock; 16 | 17 | const CustomPlayerControlsSide({ 18 | super.key, 19 | required this.controller, 20 | this.showLock = true, 21 | }); 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return Align( 26 | alignment: Alignment.centerRight, 27 | child: _buildSideActions(), 28 | ); 29 | } 30 | 31 | // 构建侧边按钮 32 | Widget _buildSideActions() { 33 | return Padding( 34 | padding: const EdgeInsets.all(12), 35 | child: Column( 36 | mainAxisSize: MainAxisSize.min, 37 | children: [ 38 | if (showLock) CustomPlayerLockButton(controller: controller), 39 | ], 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/brightness.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/widget/player/controller.dart'; 3 | 4 | /* 5 | * 自定义播放器控制层-亮度 6 | * @author wuxubaiyang 7 | * @Time 2023/11/6 15:15 8 | */ 9 | class CustomPlayerBrightness extends StatelessWidget { 10 | // 控制器 11 | final CustomVideoPlayerController controller; 12 | 13 | const CustomPlayerBrightness({ 14 | super.key, 15 | required this.controller, 16 | }); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return ValueListenableBuilder( 21 | valueListenable: controller.screenBrightness, 22 | builder: (_, brightness, __) { 23 | return Opacity( 24 | opacity: 1 - brightness, 25 | child: Container(color: Colors.black.withOpacity(0.75)), 26 | ); 27 | }, 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/brightness_status.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 3 | import 'package:jtech_anime_base/widget/player/controller.dart'; 4 | import 'package:jtech_anime_base/widget/vertical_progress.dart'; 5 | 6 | /* 7 | * 自定义播放器控制层-亮度状态 8 | * @author wuxubaiyang 9 | * @Time 2023/11/6 15:58 10 | */ 11 | class CustomPlayerBrightnessStatus extends StatelessWidget { 12 | // 播放器控制器 13 | final CustomVideoPlayerController controller; 14 | 15 | // 是否展示音量控制 16 | final bool visible; 17 | 18 | // 进度条尺寸 19 | final Size? size; 20 | 21 | // 外间距 22 | final EdgeInsetsGeometry? margin; 23 | 24 | const CustomPlayerBrightnessStatus({ 25 | super.key, 26 | required this.controller, 27 | this.size, 28 | this.margin, 29 | this.visible = false, 30 | }); 31 | 32 | @override 33 | Widget build(BuildContext context) { 34 | return ValueListenableBuilder( 35 | valueListenable: controller.screenBrightness, 36 | builder: (_, brightness, __) { 37 | return AnimatedOpacity( 38 | opacity: visible ? 1.0 : 0, 39 | duration: const Duration(milliseconds: 150), 40 | child: VerticalProgressView( 41 | size: size, 42 | margin: margin, 43 | progress: brightness, 44 | icon: const Icon(FontAwesomeIcons.sun), 45 | ), 46 | ); 47 | }, 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/buffing_status.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/widget/player/controller.dart'; 3 | import 'package:jtech_anime_base/widget/status_box.dart'; 4 | 5 | /* 6 | * 自定义播放器-缓冲状态提示 7 | * @author wuxubaiyang 8 | * @Time 2023/11/6 14:26 9 | */ 10 | class CustomPlayerBufferingStatus extends StatelessWidget { 11 | // 播放器控制器 12 | final CustomVideoPlayerController controller; 13 | 14 | // 缓冲状态大小 15 | final double? statusSize; 16 | 17 | const CustomPlayerBufferingStatus({ 18 | super.key, 19 | required this.controller, 20 | this.statusSize, 21 | }); 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return StreamBuilder( 26 | stream: controller.stream.buffering, 27 | builder: (_, snap) { 28 | if (!(snap.data ?? false)) return const SizedBox(); 29 | return StatusBox( 30 | status: StatusBoxStatus.loading, 31 | statusSize: statusSize ?? 65, 32 | ); 33 | }, 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/full_screen_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 3 | import 'package:jtech_anime_base/widget/player/controller.dart'; 4 | 5 | /* 6 | * 自定义播放器控制层-最大化屏幕进入按钮 7 | * @author wuxubaiyang 8 | * @Time 2023/11/6 15:41 9 | */ 10 | class CustomPlayerFullScreenButton extends StatelessWidget { 11 | // 播放器控制器 12 | final CustomVideoPlayerController controller; 13 | 14 | const CustomPlayerFullScreenButton({ 15 | super.key, 16 | required this.controller, 17 | }); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return ValueListenableBuilder( 22 | valueListenable: controller.controlFullscreen, 23 | builder: (_, expanded, __) { 24 | final icon = 25 | expanded ? FontAwesomeIcons.compress : FontAwesomeIcons.expand; 26 | return IconButton( 27 | tooltip: '全屏播放', 28 | icon: Icon(icon), 29 | onPressed: () => controller.toggleFullscreen(), 30 | ); 31 | }, 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/lock_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 3 | import 'package:jtech_anime_base/manage/theme.dart'; 4 | import 'package:jtech_anime_base/widget/player/controller.dart'; 5 | 6 | /* 7 | * 自定义播放器-锁定按钮 8 | * @author wuxubaiyang 9 | * @Time 2023/11/6 16:51 10 | */ 11 | class CustomPlayerLockButton extends StatelessWidget { 12 | // 播放器控制器 13 | final CustomVideoPlayerController controller; 14 | 15 | const CustomPlayerLockButton({ 16 | super.key, 17 | required this.controller, 18 | }); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return ValueListenableBuilder( 23 | valueListenable: controller.screenLocked, 24 | builder: (_, locked, __) { 25 | final icon = locked ? FontAwesomeIcons.lock : FontAwesomeIcons.lockOpen; 26 | return IconButton( 27 | icon: Icon(icon), 28 | color: locked ? kPrimaryColor : null, 29 | onPressed: () { 30 | controller.setControlVisible(true); 31 | controller.toggleScreenLocked(); 32 | }, 33 | ); 34 | }, 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/mini_screen_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 3 | import 'package:jtech_anime_base/widget/player/controller.dart'; 4 | 5 | /* 6 | * 自定义播放器控制层-mini屏幕进入按钮 7 | * @author wuxubaiyang 8 | * @Time 2023/11/6 15:41 9 | */ 10 | class CustomPlayerMiniScreenButton extends StatelessWidget { 11 | // 播放器控制器 12 | final CustomVideoPlayerController controller; 13 | 14 | const CustomPlayerMiniScreenButton({ 15 | super.key, 16 | required this.controller, 17 | }); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return ValueListenableBuilder( 22 | valueListenable: controller.miniWindow, 23 | builder: (_, isMiniWindow, __) { 24 | return IconButton( 25 | tooltip: '小窗口播放', 26 | onPressed: controller.toggleMiniWindow, 27 | icon: const Icon(FontAwesomeIcons.windowRestore), 28 | ); 29 | }, 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/play_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 3 | import 'package:jtech_anime_base/widget/player/controller.dart'; 4 | 5 | /* 6 | * 自定义播放器控制层-播放按钮 7 | * @author wuxubaiyang 8 | * @Time 2023/11/6 14:14 9 | */ 10 | class CustomPlayerPlayButton extends StatelessWidget { 11 | // 播放器控制器 12 | final CustomVideoPlayerController controller; 13 | 14 | const CustomPlayerPlayButton({ 15 | super.key, 16 | required this.controller, 17 | }); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return StreamBuilder( 22 | stream: controller.stream.playing, 23 | builder: (_, snap) { 24 | final playing = controller.state.playing; 25 | final icon = playing ? FontAwesomeIcons.pause : FontAwesomeIcons.play; 26 | return IconButton( 27 | icon: Icon(icon), 28 | onPressed: () { 29 | controller.setControlVisible(true); 30 | controller.resumeOrPause(); 31 | }, 32 | ); 33 | }, 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/play_speed_status.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 3 | import 'package:jtech_anime_base/widget/player/controller.dart'; 4 | 5 | /* 6 | * 自定义播放器控制层-播放速度状态 7 | * @author wuxubaiyang 8 | * @Time 2023/11/6 15:58 9 | */ 10 | class CustomPlayerPlaySpeedStatus extends StatelessWidget { 11 | // 播放器控制器 12 | final CustomVideoPlayerController controller; 13 | 14 | // 是否展示音量控制 15 | final bool visible; 16 | 17 | const CustomPlayerPlaySpeedStatus({ 18 | super.key, 19 | required this.controller, 20 | this.visible = false, 21 | }); 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return AnimatedOpacity( 26 | opacity: visible ? 1.0 : 0, 27 | duration: const Duration(milliseconds: 150), 28 | child: const Card( 29 | elevation: 0, 30 | color: Colors.black38, 31 | child: Padding( 32 | padding: EdgeInsets.all(8), 33 | child: Row( 34 | mainAxisSize: MainAxisSize.min, 35 | children: [ 36 | Text('快进中', style: TextStyle(fontSize: 14)), 37 | SizedBox(width: 4), 38 | Icon(FontAwesomeIcons.anglesRight, size: 18), 39 | ], 40 | ), 41 | ), 42 | ), 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /base/lib/widget/player/widgets/progress.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/widget/player/controller.dart'; 3 | 4 | /* 5 | * 自定义播放器控制层-播放进度 6 | * @author wuxubaiyang 7 | * @Time 2023/11/6 14:36 8 | */ 9 | class CustomPlayerProgress extends StatelessWidget { 10 | // 播放器控制器 11 | final CustomVideoPlayerController controller; 12 | 13 | const CustomPlayerProgress({ 14 | super.key, 15 | required this.controller, 16 | }); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return StreamBuilder( 21 | stream: controller.stream.position, 22 | builder: (_, snap) { 23 | final total = controller.state.duration; 24 | final progress = controller.state.position; 25 | final ratio = progress.inMilliseconds / total.inMilliseconds; 26 | return LinearProgressIndicator( 27 | minHeight: 2, 28 | value: ratio.isNaN ? 0 : ratio, 29 | backgroundColor: Colors.transparent, 30 | ); 31 | }, 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /base/lib/widget/proxy/proxy_update.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/model/database/proxy.dart'; 3 | import 'package:jtech_anime_base/widget/proxy/proxy_update_desktop.dart'; 4 | import 'package:jtech_anime_base/widget/proxy/proxy_update_mobile.dart'; 5 | import 'package:jtech_anime_base/widget/screen_builder.dart'; 6 | 7 | /* 8 | * 代理配置编辑/新增 9 | * @author wuxubaiyang 10 | * @Time 2023/11/14 10:29 11 | */ 12 | abstract class AnimeSourceProxyUpdateSheet extends StatefulWidget { 13 | // 代理记录 14 | final ProxyRecord? record; 15 | 16 | const AnimeSourceProxyUpdateSheet({super.key, this.record}); 17 | 18 | static Future show(BuildContext context, 19 | {ProxyRecord? record}) { 20 | return showModalBottomSheet( 21 | context: context, 22 | isScrollControlled: true, 23 | builder: (_) => ScreenBuilder( 24 | builder: (_) => DesktopAnimeSourceProxyUpdateSheet(record: record), 25 | mobile: (_) => MobileAnimeSourceProxyUpdateSheet(record: record), 26 | ), 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /base/lib/widget/qrcode_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:zxing_widget/qrcode.dart'; 3 | 4 | /* 5 | * 根据输入文本生成二维码 6 | * @author wuxubaiyang 7 | * @Time 2023/9/19 13:38 8 | */ 9 | class QRCodeView extends StatelessWidget { 10 | // 输入文本 11 | final String text; 12 | 13 | // 二维码尺寸 14 | final Size size; 15 | 16 | // 二维码颜色 17 | final Color color; 18 | 19 | // 背景色 20 | final Color backgroundColor; 21 | 22 | // 中间要放的元素 23 | final Widget? child; 24 | 25 | const QRCodeView({ 26 | super.key, 27 | required this.text, 28 | this.child, 29 | this.color = Colors.black, 30 | this.size = const Size(200, 200), 31 | this.backgroundColor = Colors.white, 32 | }); 33 | 34 | @override 35 | Widget build(BuildContext context) { 36 | return BarcodeWidget( 37 | QrcodePainter( 38 | text, 39 | foregroundColor: color, 40 | backgroundColor: backgroundColor, 41 | errorCorrectionLevel: ErrorCorrectionLevel.H, 42 | ), 43 | size: size, 44 | child: child, 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /base/lib/widget/refresh/controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:easy_refresh/easy_refresh.dart'; 2 | import 'package:jtech_anime_base/common/notifier.dart'; 3 | 4 | /* 5 | * 自定义刷新组件控制器 6 | * @author wuxubaiyang 7 | * @Time 2023/7/15 14:02 8 | */ 9 | class CustomRefreshController extends ValueChangeNotifier { 10 | // 控制器 11 | final controller = EasyRefreshController(); 12 | 13 | CustomRefreshController() : super(0); 14 | 15 | // 启动下拉刷新 16 | void startRefresh() => controller.callRefresh(); 17 | } 18 | -------------------------------------------------------------------------------- /base/lib/widget/screen_builder.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/manage/config.dart'; 3 | import 'package:jtech_anime_base/tool/screen_type.dart'; 4 | 5 | /* 6 | * 屏幕类型构造器 7 | * @author wuxubaiyang 8 | * @Time 2023/11/14 13:59 9 | */ 10 | class ScreenBuilder extends StatefulWidget { 11 | // 默认构造器 12 | final WidgetBuilder builder; 13 | 14 | // 移动端构造器 15 | final WidgetBuilder? mobile; 16 | 17 | // 平板端构造器 18 | final WidgetBuilder? pad; 19 | 20 | // 桌面端构造器 21 | final WidgetBuilder? desktop; 22 | 23 | // 大屏幕融合端构造器 24 | final WidgetBuilder? fusion; 25 | 26 | const ScreenBuilder({ 27 | super.key, 28 | required this.builder, 29 | this.pad, 30 | this.mobile, 31 | this.fusion, 32 | this.desktop, 33 | }); 34 | 35 | @override 36 | State createState() => _ScreenBuilderState(); 37 | } 38 | 39 | /* 40 | * 屏幕类型构造器-状态 41 | * @author wuxubaiyang 42 | * @Time 2023/11/14 14:00 43 | */ 44 | class _ScreenBuilderState extends State { 45 | // 平台构建对照表 46 | late final Map screenBuilder = { 47 | ScreenType.pad: widget.pad, 48 | ScreenType.mobile: widget.mobile, 49 | ScreenType.fusion: widget.fusion, 50 | ScreenType.desktop: widget.desktop, 51 | }; 52 | 53 | @override 54 | Widget build(BuildContext context) { 55 | final builder = screenBuilder[rootConfig.screenType] ?? widget.builder; 56 | return builder.call(context); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /base/lib/widget/source_logo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/manage/theme.dart'; 3 | import 'package:jtech_anime_base/model/database/source.dart'; 4 | import 'package:jtech_anime_base/widget/image.dart'; 5 | 6 | /* 7 | * 番剧解析源图标 8 | * @author wuxubaiyang 9 | * @Time 2023/8/16 14:43 10 | */ 11 | class AnimeSourceLogo extends StatelessWidget { 12 | // 番剧解析源 13 | final AnimeSource source; 14 | 15 | // 图标尺寸 16 | final double ratio; 17 | 18 | const AnimeSourceLogo({ 19 | super.key, 20 | required this.source, 21 | this.ratio = 20, 22 | }); 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | return CircleAvatar( 27 | radius: ratio, 28 | backgroundColor: source.getColor(), 29 | child: _buildSourceIcon(source), 30 | ); 31 | } 32 | 33 | // 构建数据源图标 34 | Widget _buildSourceIcon(AnimeSource source) { 35 | if (source.logoUrl.isNotEmpty) { 36 | return ImageView.net(source.logoUrl, size: ratio * 0.85); 37 | } 38 | final textStyle = TextStyle(color: kPrimaryColor); 39 | if (source.name.isNotEmpty) { 40 | return Text( 41 | source.name.substring(0, 1), 42 | style: textStyle, 43 | ); 44 | } 45 | if (source.key.isNotEmpty) { 46 | return Text( 47 | source.key.substring(0, 1), 48 | style: textStyle, 49 | ); 50 | } 51 | return const SizedBox(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /base/lib/widget/stream_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/manage/anime_parser/parser.dart'; 3 | import 'package:jtech_anime_base/manage/event.dart'; 4 | import 'package:jtech_anime_base/manage/theme.dart'; 5 | 6 | /* 7 | * 样式变化监听组件 8 | * @author wuxubaiyang 9 | * @Time 2023/2/14 16:29 10 | */ 11 | class ThemeStreamView extends StatelessWidget { 12 | final AsyncWidgetBuilder builder; 13 | 14 | const ThemeStreamView({ 15 | super.key, 16 | required this.builder, 17 | }); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return StreamBuilder( 22 | initialData: ThemeEvent(theme.currentTheme), 23 | stream: event.on(), 24 | builder: builder, 25 | ); 26 | } 27 | } 28 | 29 | /* 30 | * 解析源变化监听组件 31 | * @author wuxubaiyang 32 | * @Time 2023/2/14 16:29 33 | */ 34 | class SourceStreamView extends StatelessWidget { 35 | final AsyncWidgetBuilder builder; 36 | 37 | const SourceStreamView({ 38 | super.key, 39 | required this.builder, 40 | }); 41 | 42 | @override 43 | Widget build(BuildContext context) { 44 | return StreamBuilder( 45 | initialData: SourceChangeEvent(animeParser.currentSource), 46 | stream: event.on(), 47 | builder: builder, 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /base/lib/widget/timer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/tool/date.dart'; 3 | 4 | /* 5 | * 自定义播放器控制层-时间组件 6 | * @author wuxubaiyang 7 | * @Time 2023/11/6 15:31 8 | */ 9 | class TimerView extends StatelessWidget { 10 | // 时间格式化 11 | final String? pattern; 12 | 13 | // 文本样式 14 | final TextStyle? textStyle; 15 | 16 | const TimerView({super.key, this.pattern, this.textStyle}); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return StreamBuilder( 21 | stream: Stream.periodic( 22 | const Duration(seconds: 1), (_) => DateTime.now()), 23 | builder: (_, snap) { 24 | final dateTime = snap.data ?? DateTime.now(); 25 | return Text( 26 | dateTime.format(pattern ?? DatePattern.time), 27 | style: textStyle, 28 | ); 29 | }, 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /base/scripts.bat: -------------------------------------------------------------------------------- 1 | dart pub run build_runner watch --verbose -------------------------------------------------------------------------------- /base/test/base_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:logger/logger.dart'; 3 | 4 | void main() { 5 | test('test', () async { 6 | Logger logger = Logger(); 7 | logger.i({'name':'荒唐哥','sex':'unknown'}); 8 | }); 9 | } 10 | -------------------------------------------------------------------------------- /desktop/.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 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | 46 | generated* 47 | Generated* 48 | 49 | assets/update_config.json 50 | publish 51 | /assets/update_config.json 52 | -------------------------------------------------------------------------------- /desktop/.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 and should not be manually edited. 5 | 6 | version: 7 | revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" 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: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 17 | base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 18 | - platform: linux 19 | create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 20 | base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 21 | - platform: macos 22 | create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 23 | base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 24 | - platform: windows 25 | create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 26 | base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 27 | 28 | # User provided section 29 | 30 | # List of Local paths (relative to this file) that should be 31 | # ignored by the migrate tool. 32 | # 33 | # Files that are not part of the templates will be ignored by default. 34 | unmanaged_files: 35 | - 'lib/main.dart' 36 | - 'ios/Runner.xcodeproj/project.pbxproj' 37 | -------------------------------------------------------------------------------- /desktop/README.md: -------------------------------------------------------------------------------- 1 | # desktop 2 | 3 | jtech anime desktop 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /desktop/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 https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /desktop/assets/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/assets/app_logo.png -------------------------------------------------------------------------------- /desktop/assets/icon/home_navigation_newest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/assets/icon/home_navigation_newest.png -------------------------------------------------------------------------------- /desktop/assets/icon/home_navigation_newest_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/assets/icon/home_navigation_newest_selected.png -------------------------------------------------------------------------------- /desktop/lib/common/icon.dart: -------------------------------------------------------------------------------- 1 | /* 2 | * 自定义图标 3 | * @author wuxubaiyang 4 | * @Time 2023/9/11 13:37 5 | */ 6 | class CustomIcon { 7 | // 首页导航图标-最新的 8 | static const String homeNavigationNewest = 9 | 'assets/icon/home_navigation_newest.png'; 10 | 11 | // 首页导航图标-最新的-已选择 12 | static const String homeNavigationNewestSelected = 13 | 'assets/icon/home_navigation_newest_selected.png'; 14 | } 15 | 16 | /* 17 | * 自定义动画 18 | * @author wuxubaiyang 19 | * @Time 2023/9/21 14:06 20 | */ 21 | class CustomAnime { 22 | // 首页下载动画 23 | static const String homeDownloading = 'assets/anime/home_downloading.json'; 24 | } 25 | -------------------------------------------------------------------------------- /desktop/lib/common/route.dart: -------------------------------------------------------------------------------- 1 | import 'package:desktop/page/detail/index.dart'; 2 | import 'package:desktop/page/home/index.dart'; 3 | import 'package:desktop/page/player/index.dart'; 4 | import 'package:desktop/page/source/index.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | /* 8 | * 路由路径静态变量 9 | * @author wuxubaiyang 10 | * @Time 2022/9/8 14:55 11 | */ 12 | class RoutePath { 13 | // 路由表 14 | static Map get routes => { 15 | home: (_) => const HomePage(), 16 | player: (_) => const PlayerPage(), 17 | animeDetail: (_) => const AnimeDetailPage(), 18 | animeSource: (_) => const AnimeSourcePage(), 19 | }; 20 | 21 | // 首页 22 | static const String home = '/home'; 23 | 24 | // 番剧详情页 25 | static const String animeDetail = '/anime/detail'; 26 | 27 | // 播放器页 28 | static const String player = '/player'; 29 | 30 | // 番剧解析源管理页 31 | static const String animeSource = 'anime/source'; 32 | } 33 | -------------------------------------------------------------------------------- /desktop/lib/model/event.dart: -------------------------------------------------------------------------------- 1 | import 'package:jtech_anime_base/base.dart'; 2 | 3 | /* 4 | * 番剧收藏事件 5 | * @author wuxubaiyang 6 | * @Time 2023/9/18 9:37 7 | */ 8 | class CollectEvent extends EventModel { 9 | final Collect? collect; 10 | 11 | CollectEvent({this.collect}); 12 | } 13 | 14 | /* 15 | * 播放记录事件 16 | * @author wuxubaiyang 17 | * @Time 2023/9/18 9:41 18 | */ 19 | class PlayRecordEvent extends EventModel { 20 | final PlayRecord? playRecord; 21 | 22 | PlayRecordEvent({this.playRecord}); 23 | } 24 | 25 | /* 26 | * 新的下载记录事件 27 | * @author wuxubaiyang 28 | * @Time 2023/9/20 15:16 29 | */ 30 | class NewDownloadEvent extends EventModel { 31 | final List downloadRecords; 32 | 33 | NewDownloadEvent({this.downloadRecords = const []}); 34 | } 35 | -------------------------------------------------------------------------------- /desktop/lib/model/navigation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/base.dart'; 3 | 4 | /* 5 | * 首页导航栏model 6 | * @author wuxubaiyang 7 | * @Time 2023/9/8 17:05 8 | */ 9 | class HomeNavigationModel extends BaseModel { 10 | // 名称 11 | final String name; 12 | 13 | // 图标 14 | final IconData icon; 15 | 16 | // 选中图标 17 | final IconData selectedIcon; 18 | 19 | HomeNavigationModel({ 20 | required this.name, 21 | required this.icon, 22 | required this.selectedIcon, 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /desktop/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /desktop/linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /desktop/linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /desktop/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /desktop/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /desktop/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /desktop/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /desktop/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /desktop/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /desktop/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-128.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-128@2x.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-16.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-16@2x.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-256.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-256@2x.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-32.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-32@2x.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-512.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-512@2x.png -------------------------------------------------------------------------------- /desktop/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = desktop 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.desktop 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /desktop/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /desktop/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /desktop/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /desktop/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /desktop/macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | JTechAnime 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | com.apple.security.network.server 32 | 33 | com.apple.security.network.client 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /desktop/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /desktop/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /desktop/macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import FlutterMacOS 2 | import Cocoa 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /desktop/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:desktop/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | test('description', () { 31 | print(0/100); 32 | }); 33 | } 34 | -------------------------------------------------------------------------------- /desktop/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /desktop/windows/runner/flutter_window.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_FLUTTER_WINDOW_H_ 2 | #define RUNNER_FLUTTER_WINDOW_H_ 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | #include "win32_window.h" 10 | 11 | // A window that does nothing but host a Flutter view. 12 | class FlutterWindow : public Win32Window { 13 | public: 14 | // Creates a new FlutterWindow hosting a Flutter view running |project|. 15 | explicit FlutterWindow(const flutter::DartProject& project); 16 | virtual ~FlutterWindow(); 17 | 18 | protected: 19 | // Win32Window: 20 | bool OnCreate() override; 21 | void OnDestroy() override; 22 | LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, 23 | LPARAM const lparam) noexcept override; 24 | 25 | private: 26 | // The project to run. 27 | flutter::DartProject project_; 28 | 29 | // The Flutter instance hosted by this window. 30 | std::unique_ptr flutter_controller_; 31 | }; 32 | 33 | #endif // RUNNER_FLUTTER_WINDOW_H_ 34 | -------------------------------------------------------------------------------- /desktop/windows/runner/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "flutter_window.h" 6 | #include "utils.h" 7 | 8 | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, 9 | _In_ wchar_t *command_line, _In_ int show_command) { 10 | // Attach to console when present (e.g., 'flutter run') or create a 11 | // new console when running with a debugger. 12 | if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { 13 | CreateAndAttachConsole(); 14 | } 15 | 16 | // Initialize COM, so that it is available for use in the library and/or 17 | // plugins. 18 | ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); 19 | 20 | flutter::DartProject project(L"data"); 21 | 22 | std::vector command_line_arguments = 23 | GetCommandLineArguments(); 24 | 25 | project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); 26 | 27 | FlutterWindow window(project); 28 | Win32Window::Point origin(10, 10); 29 | Win32Window::Size size(1280, 720); 30 | if (!window.Create(L"JTechAnime", origin, size)) { 31 | return EXIT_FAILURE; 32 | } 33 | window.SetQuitOnClose(true); 34 | 35 | ::MSG msg; 36 | while (::GetMessage(&msg, nullptr, 0, 0)) { 37 | ::TranslateMessage(&msg); 38 | ::DispatchMessage(&msg); 39 | } 40 | 41 | ::CoUninitialize(); 42 | return EXIT_SUCCESS; 43 | } 44 | -------------------------------------------------------------------------------- /desktop/windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /desktop/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/desktop/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /desktop/windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /desktop/windows/runner/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_UTILS_H_ 2 | #define RUNNER_UTILS_H_ 3 | 4 | #include 5 | #include 6 | 7 | // Creates a console for the process, and redirects stdout and stderr to 8 | // it for both the runner and the Flutter library. 9 | void CreateAndAttachConsole(); 10 | 11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string 12 | // encoded in UTF-8. Returns an empty std::string on failure. 13 | std::string Utf8FromUtf16(const wchar_t* utf16_string); 14 | 15 | // Gets the command line arguments passed in as a std::vector, 16 | // encoded in UTF-8. Returns an empty std::vector on failure. 17 | std::vector GetCommandLineArguments(); 18 | 19 | #endif // RUNNER_UTILS_H_ 20 | -------------------------------------------------------------------------------- /mobile/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | # If you're building an application, you may want to check-in your pubspec.lock 8 | pubspec.lock 9 | 10 | # Directory created by dartdoc 11 | # If you don't generate documentation locally you can remove this line. 12 | doc/api/ 13 | 14 | # dotenv environment variables file 15 | .env* 16 | 17 | # Avoid committing generated Javascript files: 18 | *.dart.js 19 | *.info.json # Produced by the --dump-info flag. 20 | *.js # When generated by dart2js. Don't specify *.js if your 21 | # project includes source files written in JavaScript. 22 | *.js_ 23 | *.js.deps 24 | *.js.map 25 | 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .idea 29 | 30 | *.g.dart 31 | 32 | assets/update_config.json 33 | keystore 34 | outputs 35 | /local.properties 36 | /assets/update_config.json 37 | -------------------------------------------------------------------------------- /mobile/.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 and should not be manually edited. 5 | 6 | version: 7 | revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" 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: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 17 | base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 18 | - platform: android 19 | create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 20 | base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 21 | - platform: ios 22 | create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 23 | base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a 24 | 25 | # User provided section 26 | 27 | # List of Local paths (relative to this file) that should be 28 | # ignored by the migrate tool. 29 | # 30 | # Files that are not part of the templates will be ignored by default. 31 | unmanaged_files: 32 | - 'lib/main.dart' 33 | - 'ios/Runner.xcodeproj/project.pbxproj' 34 | -------------------------------------------------------------------------------- /mobile/README.md: -------------------------------------------------------------------------------- 1 | # mobile 2 | 3 | jtech anime mobile 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /mobile/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 https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /mobile/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 | -------------------------------------------------------------------------------- /mobile/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/android/app/src/main/kotlin/com/jtech/jtech_anime/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.jtech.jtech_anime 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-hdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-mdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-night-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-night-hdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-night-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-night-mdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-night-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-night-xhdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-v21/background.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-xhdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable/background.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/values-night-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/values-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /mobile/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /mobile/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.8.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 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 | -------------------------------------------------------------------------------- /mobile/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /mobile/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /mobile/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | } 9 | settings.ext.flutterSdkPath = flutterSdkPath() 10 | 11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") 12 | 13 | plugins { 14 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false 15 | } 16 | } 17 | 18 | include ":app" 19 | 20 | apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle" 21 | -------------------------------------------------------------------------------- /mobile/assets/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/assets/app_logo.png -------------------------------------------------------------------------------- /mobile/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/debug.keystore -------------------------------------------------------------------------------- /mobile/gen_native_splash.bat: -------------------------------------------------------------------------------- 1 | dart run flutter_native_splash:create -------------------------------------------------------------------------------- /mobile/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 | -------------------------------------------------------------------------------- /mobile/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 | -------------------------------------------------------------------------------- /mobile/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/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 | -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "background.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LaunchImage.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "LaunchImage@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "LaunchImage@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /mobile/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. -------------------------------------------------------------------------------- /mobile/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /mobile/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /mobile/lib/tool/tool.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | 3 | // 修改屏幕方向 4 | void setScreenOrientation(bool portrait) { 5 | SystemChrome.setPreferredOrientations([ 6 | if (portrait) ...[ 7 | DeviceOrientation.portraitUp, 8 | DeviceOrientation.portraitDown, 9 | ] else ...[ 10 | DeviceOrientation.landscapeLeft, 11 | DeviceOrientation.landscapeRight, 12 | ] 13 | ]); 14 | } 15 | -------------------------------------------------------------------------------- /mobile/lib/widget/qr_code/scan/controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:camera/camera.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | /// Scan controller to start/stop set flashMode 5 | class CustomScanController extends ValueNotifier { 6 | ScanState? _state; 7 | 8 | /// constructor 9 | CustomScanController() : super(''); 10 | 11 | /// atatch to a state 12 | void attach(ScanState state) { 13 | _state = state; 14 | } 15 | 16 | /// start capture 17 | Future start() async { 18 | return _state?.start(); 19 | } 20 | 21 | /// stop capture 22 | Future stop() async { 23 | return _state?.stop(); 24 | } 25 | 26 | /// set flashMode 27 | Future setFlashMode(FlashMode mode) async { 28 | return _state?.setFlashMode(mode); 29 | } 30 | } 31 | 32 | /// An abstract scan state 33 | abstract class ScanState { 34 | /// start capture 35 | Future start(); 36 | 37 | /// stop capture 38 | Future stop(); 39 | 40 | /// set flashMode 41 | Future setFlashMode(FlashMode mode); 42 | } 43 | -------------------------------------------------------------------------------- /mobile/lib/widget/text_scroll.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:text_scroll/text_scroll.dart'; 3 | 4 | /* 5 | * 自定义跑马灯文本组件 6 | * @author wuxubaiyang 7 | * @Time 2023/7/14 15:43 8 | */ 9 | class CustomScrollText extends StatelessWidget { 10 | // 文本内容 11 | final String text; 12 | 13 | // 文本样式 14 | final TextStyle? style; 15 | 16 | // 播放速度 17 | final ScrollTextSpeed speed; 18 | 19 | const CustomScrollText(this.text, 20 | {super.key, this.speed = ScrollTextSpeed.normal, this.style}); 21 | 22 | const CustomScrollText.slow(this.text, {super.key, this.style}) 23 | : speed = ScrollTextSpeed.slow; 24 | 25 | const CustomScrollText.fast(this.text, {super.key, this.style}) 26 | : speed = ScrollTextSpeed.fast; 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | return TextScroll( 31 | '$text ', 32 | style: style, 33 | pauseBetween: const Duration(milliseconds: 0), 34 | velocity: Velocity(pixelsPerSecond: Offset(speed.value, 0)), 35 | ); 36 | } 37 | } 38 | 39 | /* 40 | * 播放速度枚举 41 | * @author wuxubaiyang 42 | * @Time 2023/7/14 15:44 43 | */ 44 | enum ScrollTextSpeed { slow, normal, fast } 45 | 46 | /* 47 | * 播放速度枚举扩展 48 | * @author wuxubaiyang 49 | * @Time 2023/7/14 15:45 50 | */ 51 | extension ScrollTextSpeedExtension on ScrollTextSpeed { 52 | // 获取速度 53 | double get value => { 54 | ScrollTextSpeed.slow: 25.0, 55 | ScrollTextSpeed.normal: 60.0, 56 | ScrollTextSpeed.fast: 100.0, 57 | }[this]!; 58 | } 59 | -------------------------------------------------------------------------------- /mobile/mobile.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /mobile/test/test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:jtech_anime_base/base.dart'; 3 | 4 | void main() { 5 | test('test', () async { 6 | }); 7 | } 8 | -------------------------------------------------------------------------------- /mobile/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:mobile/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /pad/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | # If you're building an application, you may want to check-in your pubspec.lock 8 | pubspec.lock 9 | 10 | # Directory created by dartdoc 11 | # If you don't generate documentation locally you can remove this line. 12 | doc/api/ 13 | 14 | # dotenv environment variables file 15 | .env* 16 | 17 | # Avoid committing generated Javascript files: 18 | *.dart.js 19 | *.info.json # Produced by the --dump-info flag. 20 | *.js # When generated by dart2js. Don't specify *.js if your 21 | # project includes source files written in JavaScript. 22 | *.js_ 23 | *.js.deps 24 | *.js.map 25 | 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .idea 29 | 30 | *.g.dart 31 | 32 | assets/update_config.json 33 | keystore 34 | outputs 35 | /local.properties 36 | /assets/update_config.json 37 | -------------------------------------------------------------------------------- /pad/.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 and should not be manually edited. 5 | 6 | version: 7 | revision: "d211f42860350d914a5ad8102f9ec32764dc6d06" 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: d211f42860350d914a5ad8102f9ec32764dc6d06 17 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 18 | - platform: android 19 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 20 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 21 | - platform: ios 22 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 23 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 24 | 25 | # User provided section 26 | 27 | # List of Local paths (relative to this file) that should be 28 | # ignored by the migrate tool. 29 | # 30 | # Files that are not part of the templates will be ignored by default. 31 | unmanaged_files: 32 | - 'lib/main.dart' 33 | - 'ios/Runner.xcodeproj/project.pbxproj' 34 | -------------------------------------------------------------------------------- /pad/README.md: -------------------------------------------------------------------------------- 1 | # pad 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /pad/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 https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /pad/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 | -------------------------------------------------------------------------------- /pad/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pad/android/app/src/main/kotlin/com/jtech/jtech_anime/pad/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.jtech.jtech_anime.pad 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-hdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-mdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-night-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-night-hdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-night-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-night-mdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-night-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-night-xhdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-v21/background.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-xhdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/drawable/background.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /pad/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /pad/android/app/src/main/res/values-night-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /pad/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /pad/android/app/src/main/res/values-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /pad/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /pad/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pad/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.8.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 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 | -------------------------------------------------------------------------------- /pad/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /pad/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /pad/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | } 9 | settings.ext.flutterSdkPath = flutterSdkPath() 10 | 11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") 12 | 13 | plugins { 14 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false 15 | } 16 | } 17 | 18 | include ":app" 19 | 20 | apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle" 21 | -------------------------------------------------------------------------------- /pad/assets/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/assets/app_logo.png -------------------------------------------------------------------------------- /pad/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/debug.keystore -------------------------------------------------------------------------------- /pad/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 | -------------------------------------------------------------------------------- /pad/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 | -------------------------------------------------------------------------------- /pad/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /pad/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /pad/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pad/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pad/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pad/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pad/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pad/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pad/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 | -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "background.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LaunchImage.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "LaunchImage@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "LaunchImage@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /pad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/pad/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /pad/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. -------------------------------------------------------------------------------- /pad/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /pad/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /pad/lib/tool/tool.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | 3 | // 修改屏幕方向 4 | void setScreenOrientation(bool portrait) { 5 | SystemChrome.setPreferredOrientations([ 6 | if (portrait) ...[ 7 | DeviceOrientation.portraitUp, 8 | DeviceOrientation.portraitDown, 9 | ] else ...[ 10 | DeviceOrientation.landscapeLeft, 11 | DeviceOrientation.landscapeRight, 12 | ] 13 | ]); 14 | } 15 | -------------------------------------------------------------------------------- /pad/lib/widget/qr_code/scan/controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:camera/camera.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | /// Scan controller to start/stop set flashMode 5 | class CustomScanController extends ValueNotifier { 6 | ScanState? _state; 7 | 8 | /// constructor 9 | CustomScanController() : super(''); 10 | 11 | /// atatch to a state 12 | void attach(ScanState state) { 13 | _state = state; 14 | } 15 | 16 | /// start capture 17 | Future start() async { 18 | return _state?.start(); 19 | } 20 | 21 | /// stop capture 22 | Future stop() async { 23 | return _state?.stop(); 24 | } 25 | 26 | /// set flashMode 27 | Future setFlashMode(FlashMode mode) async { 28 | return _state?.setFlashMode(mode); 29 | } 30 | } 31 | 32 | /// An abstract scan state 33 | abstract class ScanState { 34 | /// start capture 35 | Future start(); 36 | 37 | /// stop capture 38 | Future stop(); 39 | 40 | /// set flashMode 41 | Future setFlashMode(FlashMode mode); 42 | } 43 | -------------------------------------------------------------------------------- /pad/pad.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /pad/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:pad/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /plugin/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "yhdmz", 3 | "name": "樱花动漫", 4 | "homepage": "https://www.yhdmz.org", 5 | "version": "1.0.0", 6 | "lastEditDate": "2023-08-10T17:19:42.113727", 7 | "logoUrl": "https://www.yhdmz.org/tpsf/yh_pic/favicon.ico", 8 | "fileUri": "assets/source/default.js" 9 | } -------------------------------------------------------------------------------- /plugin/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/plugin/default.png -------------------------------------------------------------------------------- /plugin/default_hanime1.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "hanime1", 3 | "name": "H1里番站", 4 | "homepage": "https://hanime1.me", 5 | "version": "1.0.0", 6 | "lastEditDate": "2023-08-26T17:19:42.113727", 7 | "logoUrl": "https://cdn.jsdelivr.net/gh/jokogebai/jokogebai@v1.0.0/tab_logo.jpg", 8 | "fileUri": "assets/source/default_1.js", 9 | "nsfw": true, 10 | "proxy": true 11 | } -------------------------------------------------------------------------------- /plugin/default_hanime1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/plugin/default_hanime1.png -------------------------------------------------------------------------------- /readme/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/readme/app_logo.png -------------------------------------------------------------------------------- /readme/avatar_mao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/readme/avatar_mao.jpg -------------------------------------------------------------------------------- /readme/desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/readme/desktop.png -------------------------------------------------------------------------------- /readme/mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/readme/mobile.jpg -------------------------------------------------------------------------------- /readme/pad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/readme/pad.png -------------------------------------------------------------------------------- /screen_fusion/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | # If you're building an application, you may want to check-in your pubspec.lock 8 | pubspec.lock 9 | 10 | # Directory created by dartdoc 11 | # If you don't generate documentation locally you can remove this line. 12 | doc/api/ 13 | 14 | # dotenv environment variables file 15 | .env* 16 | 17 | # Avoid committing generated Javascript files: 18 | *.dart.js 19 | *.info.json # Produced by the --dump-info flag. 20 | *.js # When generated by dart2js. Don't specify *.js if your 21 | # project includes source files written in JavaScript. 22 | *.js_ 23 | *.js.deps 24 | *.js.map 25 | 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .idea 29 | 30 | *.g.dart 31 | 32 | assets/update_config.json 33 | keystore 34 | outputs 35 | /local.properties 36 | /assets/update_config.json 37 | -------------------------------------------------------------------------------- /screen_fusion/README.md: -------------------------------------------------------------------------------- 1 | # screen_fusion 2 | 3 | app for bigscreen(tv or desktop) 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /screen_fusion/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 https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /screen_fusion/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 | -------------------------------------------------------------------------------- /screen_fusion/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/kotlin/com/jtech/jtech_anime/screen_fusion/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.jtech.jtech_anime.screen_fusion 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /screen_fusion/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /screen_fusion/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /screen_fusion/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.8.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 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 | -------------------------------------------------------------------------------- /screen_fusion/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /screen_fusion/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /screen_fusion/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | } 9 | settings.ext.flutterSdkPath = flutterSdkPath() 10 | 11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") 12 | 13 | plugins { 14 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false 15 | } 16 | } 17 | 18 | include ":app" 19 | 20 | apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle" 21 | -------------------------------------------------------------------------------- /screen_fusion/assets/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/assets/app_logo.png -------------------------------------------------------------------------------- /screen_fusion/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/debug.keystore -------------------------------------------------------------------------------- /screen_fusion/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 | -------------------------------------------------------------------------------- /screen_fusion/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 | -------------------------------------------------------------------------------- /screen_fusion/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /screen_fusion/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /screen_fusion/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 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /screen_fusion/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 | -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /screen_fusion/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. -------------------------------------------------------------------------------- /screen_fusion/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /screen_fusion/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /screen_fusion/lib/common/route.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:screen_fusion/page/home/index.dart'; 3 | 4 | /* 5 | * 路由路径静态变量 6 | * @author wuxubaiyang 7 | * @Time 2022/9/8 14:55 8 | */ 9 | class RoutePath { 10 | // 创建路由表 11 | static Map get routes => { 12 | home: (_) => const HomePage(), 13 | }; 14 | 15 | // 首页 16 | static const String home = '/home'; 17 | } 18 | -------------------------------------------------------------------------------- /screen_fusion/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter/services.dart'; 4 | import 'package:jtech_anime_base/base.dart'; 5 | import 'common/custom.dart'; 6 | import 'common/route.dart'; 7 | import 'page/home/index.dart'; 8 | 9 | void main() async { 10 | WidgetsFlutterBinding.ensureInitialized(); 11 | 12 | /// 下方设置系统主题,全局的配置/样式 13 | await ensureInitializedCore( 14 | config: Custom.config, 15 | themeData: Custom.themeData, 16 | systemTheme: Custom.systemThemeData, 17 | ); 18 | // 强制竖屏 19 | SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, 20 | overlays: SystemUiOverlay.values); 21 | // 设置沉浸式状态栏 22 | if (Platform.isAndroid) { 23 | SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( 24 | statusBarIconBrightness: Brightness.light, 25 | statusBarColor: Colors.transparent, 26 | )); 27 | } 28 | runApp(const MyApp()); 29 | } 30 | 31 | class MyApp extends StatelessWidget { 32 | const MyApp({super.key}); 33 | 34 | @override 35 | Widget build(BuildContext context) { 36 | return CustomMaterialApp( 37 | routesMap: RoutePath.routes, 38 | home: const HomePage(), 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /screen_fusion/lib/page/home/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:jtech_anime_base/base.dart'; 3 | 4 | /* 5 | * 首页 6 | * @author wuxubaiyang 7 | * @Time 2023/7/6 10:03 8 | */ 9 | class HomePage extends StatefulWidget { 10 | const HomePage({super.key}); 11 | 12 | @override 13 | State createState() => _HomePageState(); 14 | } 15 | 16 | /* 17 | * 首页-状态 18 | * @author wuxubaiyang 19 | * @Time 2023/7/6 10:03 20 | */ 21 | class _HomePageState extends LogicState 22 | with SingleTickerProviderStateMixin, WidgetsBindingObserver { 23 | @override 24 | _HomeLogic initLogic() => _HomeLogic(); 25 | 26 | @override 27 | Widget buildWidget(BuildContext context) { 28 | return SizedBox(); 29 | } 30 | } 31 | 32 | /* 33 | * 首页-逻辑 34 | * @author wuxubaiyang 35 | * @Time 2023/7/6 10:03 36 | */ 37 | class _HomeLogic extends BaseLogic {} 38 | -------------------------------------------------------------------------------- /screen_fusion/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /screen_fusion/linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /screen_fusion/linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | file_selector_linux 7 | flutter_js 8 | flutter_volume_controller 9 | gamepads_linux 10 | isar_flutter_libs 11 | media_kit_libs_linux 12 | media_kit_video 13 | url_launcher_linux 14 | ) 15 | 16 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 17 | media_kit_native_event_loop 18 | ) 19 | 20 | set(PLUGIN_BUNDLED_LIBRARIES) 21 | 22 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 23 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 24 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 25 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 26 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 27 | endforeach(plugin) 28 | 29 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 30 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 31 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 32 | endforeach(ffi_plugin) 33 | -------------------------------------------------------------------------------- /screen_fusion/linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /screen_fusion/linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /screen_fusion/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /screen_fusion/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /screen_fusion/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = screen_fusion 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.jtech.jtechanime.screenfusion.screenFusion 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2023 com.jtech.jtech_anime.screen_fusion. All rights reserved. 15 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /screen_fusion/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /screen_fusion/macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import FlutterMacOS 2 | import Cocoa 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /screen_fusion/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:screen_fusion/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /screen_fusion/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /screen_fusion/windows/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void RegisterPlugins(flutter::PluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /screen_fusion/windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | file_selector_windows 7 | flutter_js 8 | flutter_volume_controller 9 | gamepads_windows 10 | isar_flutter_libs 11 | media_kit_libs_windows_video 12 | media_kit_video 13 | screen_brightness_windows 14 | url_launcher_windows 15 | ) 16 | 17 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 18 | media_kit_native_event_loop 19 | ) 20 | 21 | set(PLUGIN_BUNDLED_LIBRARIES) 22 | 23 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 24 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 25 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 26 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 27 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 28 | endforeach(plugin) 29 | 30 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 31 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 32 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 33 | endforeach(ffi_plugin) 34 | -------------------------------------------------------------------------------- /screen_fusion/windows/runner/flutter_window.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_FLUTTER_WINDOW_H_ 2 | #define RUNNER_FLUTTER_WINDOW_H_ 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | #include "win32_window.h" 10 | 11 | // A window that does nothing but host a Flutter view. 12 | class FlutterWindow : public Win32Window { 13 | public: 14 | // Creates a new FlutterWindow hosting a Flutter view running |project|. 15 | explicit FlutterWindow(const flutter::DartProject& project); 16 | virtual ~FlutterWindow(); 17 | 18 | protected: 19 | // Win32Window: 20 | bool OnCreate() override; 21 | void OnDestroy() override; 22 | LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, 23 | LPARAM const lparam) noexcept override; 24 | 25 | private: 26 | // The project to run. 27 | flutter::DartProject project_; 28 | 29 | // The Flutter instance hosted by this window. 30 | std::unique_ptr flutter_controller_; 31 | }; 32 | 33 | #endif // RUNNER_FLUTTER_WINDOW_H_ 34 | -------------------------------------------------------------------------------- /screen_fusion/windows/runner/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include "flutter_window.h" 6 | #include "utils.h" 7 | 8 | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, 9 | _In_ wchar_t *command_line, _In_ int show_command) { 10 | // Attach to console when present (e.g., 'flutter run') or create a 11 | // new console when running with a debugger. 12 | if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { 13 | CreateAndAttachConsole(); 14 | } 15 | 16 | // Initialize COM, so that it is available for use in the library and/or 17 | // plugins. 18 | ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); 19 | 20 | flutter::DartProject project(L"data"); 21 | 22 | std::vector command_line_arguments = 23 | GetCommandLineArguments(); 24 | 25 | project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); 26 | 27 | FlutterWindow window(project); 28 | Win32Window::Point origin(10, 10); 29 | Win32Window::Size size(1280, 720); 30 | if (!window.Create(L"screen_fusion", origin, size)) { 31 | return EXIT_FAILURE; 32 | } 33 | window.SetQuitOnClose(true); 34 | 35 | ::MSG msg; 36 | while (::GetMessage(&msg, nullptr, 0, 0)) { 37 | ::TranslateMessage(&msg); 38 | ::DispatchMessage(&msg); 39 | } 40 | 41 | ::CoUninitialize(); 42 | return EXIT_SUCCESS; 43 | } 44 | -------------------------------------------------------------------------------- /screen_fusion/windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /screen_fusion/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuXuBaiYang/jtech_anime/b3e08d352a96c886180a808b5c4b5c177a88b09e/screen_fusion/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /screen_fusion/windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /screen_fusion/windows/runner/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_UTILS_H_ 2 | #define RUNNER_UTILS_H_ 3 | 4 | #include 5 | #include 6 | 7 | // Creates a console for the process, and redirects stdout and stderr to 8 | // it for both the runner and the Flutter library. 9 | void CreateAndAttachConsole(); 10 | 11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string 12 | // encoded in UTF-8. Returns an empty std::string on failure. 13 | std::string Utf8FromUtf16(const wchar_t* utf16_string); 14 | 15 | // Gets the command line arguments passed in as a std::vector, 16 | // encoded in UTF-8. Returns an empty std::vector on failure. 17 | std::vector GetCommandLineArguments(); 18 | 19 | #endif // RUNNER_UTILS_H_ 20 | --------------------------------------------------------------------------------