├── .gitignore ├── .metadata ├── LICENSE ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── c001apk │ │ │ │ └── flutter │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-night-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-night-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-night-v21 │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-night-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-night-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-night-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-night │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-v21 │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable │ │ │ ├── background.png │ │ │ ├── ic_launcher_foreground.xml │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── values-night-v31 │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ ├── values-v31 │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ │ └── xml │ │ │ └── network_security_config.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── emojis │ ├── c_coolb.png │ ├── c_fived.png │ ├── c_fivef.png │ ├── c_fivem.png │ ├── c_fiveo.png │ ├── c_fivey.png │ ├── c_fy.png │ ├── c_oned.png │ ├── c_onef.png │ ├── c_onem.png │ ├── c_oneo.png │ ├── c_oney.png │ ├── c_oy.png │ ├── c_teny.png │ ├── c_twod.png │ ├── c_twof.png │ ├── c_twom.png │ ├── c_twoo.png │ ├── c_twoy.png │ ├── c_ty.png │ ├── coolapk_emotion_100_qqdoge.png │ ├── coolapk_emotion_1010.png │ ├── coolapk_emotion_1011.png │ ├── coolapk_emotion_1012.png │ ├── coolapk_emotion_1013.png │ ├── coolapk_emotion_1014.png │ ├── coolapk_emotion_1015.png │ ├── coolapk_emotion_1016.png │ ├── coolapk_emotion_1017.png │ ├── coolapk_emotion_1018.png │ ├── coolapk_emotion_1019.png │ ├── coolapk_emotion_101_pyjiaoyi.png │ ├── coolapk_emotion_1020.png │ ├── coolapk_emotion_1021.png │ ├── coolapk_emotion_1022_zhenbuchuo.png │ ├── coolapk_emotion_1023_liewenhuke.png │ ├── coolapk_emotion_1024.png │ ├── coolapk_emotion_1025.png │ ├── coolapk_emotion_1026.png │ ├── coolapk_emotion_1027.png │ ├── coolapk_emotion_1028.png │ ├── coolapk_emotion_1029.png │ ├── coolapk_emotion_102_fadai.png │ ├── coolapk_emotion_1030.png │ ├── coolapk_emotion_1031.png │ ├── coolapk_emotion_103_nb.png │ ├── coolapk_emotion_104.png │ ├── coolapk_emotion_105.png │ ├── coolapk_emotion_106.png │ ├── coolapk_emotion_107.png │ ├── coolapk_emotion_108.png │ ├── coolapk_emotion_109.png │ ├── coolapk_emotion_10_aoman.png │ ├── coolapk_emotion_11_yiwen.png │ ├── coolapk_emotion_12_wuyu.png │ ├── coolapk_emotion_13_huaixiao.png │ ├── coolapk_emotion_14_bishi.png │ ├── coolapk_emotion_15_fanu.png │ ├── coolapk_emotion_16_tuosai.png │ ├── coolapk_emotion_17_tushe.png │ ├── coolapk_emotion_18_han.png │ ├── coolapk_emotion_19_koubi.png │ ├── coolapk_emotion_1_hahaha.png │ ├── coolapk_emotion_20_qinqin.png │ ├── coolapk_emotion_21_penxue.png │ ├── coolapk_emotion_22_xiaoyan.png │ ├── coolapk_emotion_23_shui.png │ ├── coolapk_emotion_24_wuzuixiao.png │ ├── coolapk_emotion_25_zaijian.png │ ├── coolapk_emotion_26_kelian.png │ ├── coolapk_emotion_27_qiang.png │ ├── coolapk_emotion_28_ruo.png │ ├── coolapk_emotion_29_baoquan.png │ ├── coolapk_emotion_2_jingya.png │ ├── coolapk_emotion_30_ok.png │ ├── coolapk_emotion_31_xiaoku.png │ ├── coolapk_emotion_32_heiha.png │ ├── coolapk_emotion_33_wulian.png │ ├── coolapk_emotion_34_jizhi.png │ ├── coolapk_emotion_35_ye.png │ ├── coolapk_emotion_36_ku.png │ ├── coolapk_emotion_37_doge.png │ ├── coolapk_emotion_38_wozuimei.png │ ├── coolapk_emotion_39_caidao.png │ ├── coolapk_emotion_3_ciya.png │ ├── coolapk_emotion_40_aixin.png │ ├── coolapk_emotion_41_meigui.png │ ├── coolapk_emotion_42_diaoxie.png │ ├── coolapk_emotion_43_heixian.png │ ├── coolapk_emotion_44_pen.png │ ├── coolapk_emotion_45_yinxian.png │ ├── coolapk_emotion_46_nanguo.png │ ├── coolapk_emotion_47_weiqu.png │ ├── coolapk_emotion_48_weiweiyixiao.png │ ├── coolapk_emotion_49_huanhu.png │ ├── coolapk_emotion_4_liulei.png │ ├── coolapk_emotion_50_xinsui.png │ ├── coolapk_emotion_51_chigua.png │ ├── coolapk_emotion_52_hejiu.png │ ├── coolapk_emotion_53_pu.png │ ├── coolapk_emotion_54_hongyaowan.png │ ├── coolapk_emotion_55_lvyaowan.png │ ├── coolapk_emotion_56_dogexiaoku.png │ ├── coolapk_emotion_57_dogehechi.png │ ├── coolapk_emotion_58_dogeyuanliangta.png │ ├── coolapk_emotion_59_erha.png │ ├── coolapk_emotion_5_keai.png │ ├── coolapk_emotion_60_kuan.png │ ├── coolapk_emotion_61_lvmao.png │ ├── coolapk_emotion_62_huaji.png │ ├── coolapk_emotion_63_liuhanhuaji.png │ ├── coolapk_emotion_64_shounuehuaji.png │ ├── coolapk_emotion_65_coshuaji.png │ ├── coolapk_emotion_66_doujiyanhuaji.png │ ├── coolapk_emotion_67_mojinghuaji.png │ ├── coolapk_emotion_68.png │ ├── coolapk_emotion_69.png │ ├── coolapk_emotion_6_weixiao.png │ ├── coolapk_emotion_70.png │ ├── coolapk_emotion_71.png │ ├── coolapk_emotion_72.png │ ├── coolapk_emotion_73.png │ ├── coolapk_emotion_74.png │ ├── coolapk_emotion_75.png │ ├── coolapk_emotion_76.png │ ├── coolapk_emotion_77.png │ ├── coolapk_emotion_78.png │ ├── coolapk_emotion_79.png │ ├── coolapk_emotion_7_hehe.png │ ├── coolapk_emotion_80.png │ ├── coolapk_emotion_81_naikezui.png │ ├── coolapk_emotion_82_miaomiao.png │ ├── coolapk_emotion_83_huoba.png │ ├── coolapk_emotion_84_baiyan.png │ ├── coolapk_emotion_85.png │ ├── coolapk_emotion_86.png │ ├── coolapk_emotion_87.png │ ├── coolapk_emotion_88.png │ ├── coolapk_emotion_89.png │ ├── coolapk_emotion_8_piezui.png │ ├── coolapk_emotion_90.png │ ├── coolapk_emotion_91.png │ ├── coolapk_emotion_92.png │ ├── coolapk_emotion_93.png │ ├── coolapk_emotion_94.png │ ├── coolapk_emotion_95_erhading.png │ ├── coolapk_emotion_96_kuanlvmao.png │ ├── coolapk_emotion_97_haixiu.png │ ├── coolapk_emotion_98_wunai.png │ ├── coolapk_emotion_99_zhoumei.png │ └── coolapk_emotion_9_se.png └── icon │ ├── icon-splash.png │ └── icon.png ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-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-50x50@1x.png │ │ │ ├── Icon-App-50x50@2x.png │ │ │ ├── Icon-App-57x57@1x.png │ │ │ ├── Icon-App-57x57@2x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-72x72@1x.png │ │ │ ├── Icon-App-72x72@2x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── LaunchBackground.imageset │ │ │ ├── Contents.json │ │ │ ├── background.png │ │ │ └── darkbackground.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── LaunchImageDark.png │ │ │ ├── LaunchImageDark@2x.png │ │ │ ├── LaunchImageDark@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h └── RunnerTests │ └── RunnerTests.swift ├── lib ├── components │ ├── cards │ │ ├── app_card.dart │ │ ├── app_info_card.dart │ │ ├── app_update_card.dart │ │ ├── carousel_card.dart │ │ ├── chat_card.dart │ │ ├── chat_time_card.dart │ │ ├── collection_card.dart │ │ ├── feed_card.dart │ │ ├── feed_reply_card.dart │ │ ├── icon_link_grid_card.dart │ │ ├── icon_mini_grid_card.dart │ │ ├── icon_mini_scroll_card.dart │ │ ├── icon_scroll_card.dart │ │ ├── image_square_scroll_card.dart │ │ ├── image_text_scroll_card.dart │ │ ├── like_card.dart │ │ ├── message_card.dart │ │ ├── message_first_card.dart │ │ ├── message_header_card.dart │ │ ├── message_second_card.dart │ │ ├── message_third_card.dart │ │ ├── notification_card.dart │ │ ├── search_history_card.dart │ │ ├── text_card.dart │ │ ├── title_card.dart │ │ └── user_info_card.dart │ ├── common_body.dart │ ├── custom_toast.dart │ ├── dialog.dart │ ├── feed_article_body.dart │ ├── footer.dart │ ├── html_text.dart │ ├── icon_text.dart │ ├── imageview.dart │ ├── index_switcher.dart │ ├── item_card.dart │ ├── like_button.dart │ ├── nested_tab_bar_view.dart │ ├── network_image.dart │ ├── nine_grid_view.dart │ ├── no_splash_factory.dart │ ├── self_sized_horizontal_list.dart │ ├── settings │ │ ├── drop_down_menu_item.dart │ │ ├── edittext_item.dart │ │ ├── item_title.dart │ │ └── switch_item.dart │ ├── silver_sticky_header.dart │ ├── single_line_fitted_box.dart │ ├── sliver_pinned_box_adapter.dart │ └── sticky_sliver_to_box_adapter.dart ├── constants │ └── constants.dart ├── logic │ ├── model │ │ ├── app_info │ │ │ └── app_info.dart │ │ ├── check_count │ │ │ ├── check_count.dart │ │ │ └── datum.dart │ │ ├── check_info │ │ │ ├── check.dart │ │ │ ├── check.g.dart │ │ │ ├── data.dart │ │ │ ├── data.g.dart │ │ │ ├── notify_count.dart │ │ │ ├── notify_count.g.dart │ │ │ ├── system_config.dart │ │ │ └── system_config.g.dart │ │ ├── check_update │ │ │ ├── check_update.dart │ │ │ ├── check_update.g.dart │ │ │ ├── datum.dart │ │ │ └── datum.g.dart │ │ ├── fav_history │ │ │ ├── fav_history.dart │ │ │ └── fav_history.g.dart │ │ ├── feed │ │ │ ├── data_list_model.dart │ │ │ ├── data_list_model.g.dart │ │ │ ├── data_model.dart │ │ │ ├── data_model.g.dart │ │ │ ├── datum.dart │ │ │ ├── datum.g.dart │ │ │ ├── entity.dart │ │ │ ├── entity.g.dart │ │ │ ├── extra_data_arr.dart │ │ │ ├── extra_data_arr.g.dart │ │ │ ├── relation_row.dart │ │ │ ├── relation_row.g.dart │ │ │ ├── reply_row.dart │ │ │ ├── reply_row.g.dart │ │ │ ├── tab_list.dart │ │ │ ├── tab_list.g.dart │ │ │ ├── target_row.dart │ │ │ ├── target_row.g.dart │ │ │ ├── user_action.dart │ │ │ ├── user_action.g.dart │ │ │ ├── user_info.dart │ │ │ └── user_info.g.dart │ │ ├── feed_article │ │ │ └── feed_article.dart │ │ ├── login │ │ │ └── login_response.dart │ │ └── oss_upload │ │ │ ├── datum.dart │ │ │ ├── file_info.dart │ │ │ ├── oss_upload_model.dart │ │ │ ├── oss_upload_response.dart │ │ │ └── upload_prepare_info.dart │ ├── network │ │ ├── api.dart │ │ ├── interceptor.dart │ │ ├── network_repo.dart │ │ └── request.dart │ └── state │ │ └── loading_state.dart ├── main.dart ├── pages │ ├── app │ │ ├── app_content.dart │ │ ├── app_content_controller.dart │ │ ├── app_controller.dart │ │ └── app_page.dart │ ├── blacklist │ │ ├── black_list_controller.dart │ │ └── black_list_page.dart │ ├── carousel │ │ ├── carousel_controller.dart │ │ └── carousel_page.dart │ ├── chat │ │ ├── chat_controller.dart │ │ └── chat_page.dart │ ├── common │ │ └── common_controller.dart │ ├── coolpic │ │ ├── coolpic_content.dart │ │ ├── coolpic_controller.dart │ │ └── coolpic_page.dart │ ├── dyh │ │ ├── dyh_content.dart │ │ ├── dyh_controller.dart │ │ └── dyh_page.dart │ ├── feed │ │ ├── feed_controller.dart │ │ ├── feed_page.dart │ │ ├── reply │ │ │ ├── emoji_panel.dart │ │ │ ├── reply_dialog.dart │ │ │ ├── reply_page.dart │ │ │ └── toolbar_icon_button.dart │ │ └── reply2reply │ │ │ ├── reply_2_reply_controller.dart │ │ │ └── reply_2_reply_page.dart │ ├── ffflist │ │ ├── ffflist_content.dart │ │ ├── ffflist_controller.dart │ │ └── ffflist_page.dart │ ├── history │ │ ├── history_controller.dart │ │ └── history_page.dart │ ├── home │ │ ├── app │ │ │ ├── app_list_controller.dart │ │ │ ├── app_list_page.dart │ │ │ └── update │ │ │ │ └── app_update_page.dart │ │ ├── feed │ │ │ ├── home_feed_controller.dart │ │ │ └── home_feed_page.dart │ │ ├── home_page.dart │ │ ├── return_top_controller.dart │ │ └── topic │ │ │ ├── controller.dart │ │ │ └── home_topic_page.dart │ ├── login │ │ └── login_page.dart │ ├── main │ │ ├── main_controller.dart │ │ └── main_page.dart │ ├── message │ │ ├── message_controller.dart │ │ └── message_page.dart │ ├── noitfication │ │ ├── notification_controller.dart │ │ └── notification_page.dart │ ├── others │ │ ├── copy_page.dart │ │ └── imageview_page.dart │ ├── search │ │ ├── search_controller.dart │ │ ├── search_order_controller.dart │ │ ├── search_page.dart │ │ ├── search_page_controller.dart │ │ ├── search_result_content.dart │ │ └── search_result_page.dart │ ├── settings │ │ ├── about_page.dart │ │ ├── params_page.dart │ │ └── settings_page.dart │ ├── topic │ │ ├── topic_content.dart │ │ ├── topic_content_controller.dart │ │ ├── topic_controller.dart │ │ ├── topic_order_controller.dart │ │ └── topic_page.dart │ ├── user │ │ ├── user_controller.dart │ │ └── user_page.dart │ └── webview │ │ └── webview_page.dart ├── router │ └── app_pages.dart └── utils │ ├── cache_util.dart │ ├── date_util.dart │ ├── device_util.dart │ ├── download_util.dart │ ├── emoji_util.dart │ ├── extensions.dart │ ├── global_data.dart │ ├── oss │ ├── aliyunoss_client.dart │ ├── aliyunoss_config.dart │ ├── aliyunoss_http.dart │ └── aliyunoss_utils.dart │ ├── oss_util.dart │ ├── storage_util.dart │ ├── token_util.dart │ └── utils.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 ├── web ├── favicon.png ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── index.html ├── manifest.json └── splash │ └── img │ ├── dark-1x.png │ ├── dark-2x.png │ ├── dark-3x.png │ ├── dark-4x.png │ ├── light-1x.png │ ├── light-2x.png │ ├── light-3x.png │ └── light-4x.png └── 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 | # 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 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Symbolication related 35 | app.*.symbols 36 | 37 | # Obfuscation related 38 | app.*.map.json 39 | 40 | # Android Studio will place build artifacts here 41 | /android/app/debug 42 | /android/app/profile 43 | /android/app/release 44 | -------------------------------------------------------------------------------- /.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: "9ab8b6e15043de9627941e186d58711312dbd256" 8 | channel: "master" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 9ab8b6e15043de9627941e186d58711312dbd256 17 | base_revision: 9ab8b6e15043de9627941e186d58711312dbd256 18 | - platform: android 19 | create_revision: 9ab8b6e15043de9627941e186d58711312dbd256 20 | base_revision: 9ab8b6e15043de9627941e186d58711312dbd256 21 | - platform: ios 22 | create_revision: 9ab8b6e15043de9627941e186d58711312dbd256 23 | base_revision: 9ab8b6e15043de9627941e186d58711312dbd256 24 | - platform: linux 25 | create_revision: 9ab8b6e15043de9627941e186d58711312dbd256 26 | base_revision: 9ab8b6e15043de9627941e186d58711312dbd256 27 | - platform: macos 28 | create_revision: 9ab8b6e15043de9627941e186d58711312dbd256 29 | base_revision: 9ab8b6e15043de9627941e186d58711312dbd256 30 | - platform: web 31 | create_revision: 9ab8b6e15043de9627941e186d58711312dbd256 32 | base_revision: 9ab8b6e15043de9627941e186d58711312dbd256 33 | - platform: windows 34 | create_revision: 9ab8b6e15043de9627941e186d58711312dbd256 35 | base_revision: 9ab8b6e15043de9627941e186d58711312dbd256 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # c001apk-flutter 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 | 18 | ## Credits: 19 | - [pilipala](https://github.com/guozhigq/pilipala) -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/to/reference-keystore 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-night-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-night-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-night-v21/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-night-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-night-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-night-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-night/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-v21/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/drawable/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/values-night-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:color/system_accent1_800 4 | @android:color/system_accent1_200 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:color/system_accent1_0 4 | @android:color/system_accent1_600 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #607D8B 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | maven { url 'https://jitpack.io' } 6 | } 7 | } 8 | 9 | rootProject.buildDir = "../build" 10 | subprojects { 11 | project.buildDir = "${rootProject.buildDir}/${project.name}" 12 | } 13 | subprojects { 14 | project.evaluationDependsOn(":app") 15 | } 16 | 17 | tasks.register("clean", Delete) { 18 | delete rootProject.buildDir 19 | } 20 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /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.6.3-all.zip 6 | -------------------------------------------------------------------------------- /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 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "7.3.0" apply false 22 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false 23 | } 24 | 25 | include ":app" 26 | -------------------------------------------------------------------------------- /assets/emojis/c_coolb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_coolb.png -------------------------------------------------------------------------------- /assets/emojis/c_fived.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_fived.png -------------------------------------------------------------------------------- /assets/emojis/c_fivef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_fivef.png -------------------------------------------------------------------------------- /assets/emojis/c_fivem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_fivem.png -------------------------------------------------------------------------------- /assets/emojis/c_fiveo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_fiveo.png -------------------------------------------------------------------------------- /assets/emojis/c_fivey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_fivey.png -------------------------------------------------------------------------------- /assets/emojis/c_fy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_fy.png -------------------------------------------------------------------------------- /assets/emojis/c_oned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_oned.png -------------------------------------------------------------------------------- /assets/emojis/c_onef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_onef.png -------------------------------------------------------------------------------- /assets/emojis/c_onem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_onem.png -------------------------------------------------------------------------------- /assets/emojis/c_oneo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_oneo.png -------------------------------------------------------------------------------- /assets/emojis/c_oney.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_oney.png -------------------------------------------------------------------------------- /assets/emojis/c_oy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_oy.png -------------------------------------------------------------------------------- /assets/emojis/c_teny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_teny.png -------------------------------------------------------------------------------- /assets/emojis/c_twod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_twod.png -------------------------------------------------------------------------------- /assets/emojis/c_twof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_twof.png -------------------------------------------------------------------------------- /assets/emojis/c_twom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_twom.png -------------------------------------------------------------------------------- /assets/emojis/c_twoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_twoo.png -------------------------------------------------------------------------------- /assets/emojis/c_twoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_twoy.png -------------------------------------------------------------------------------- /assets/emojis/c_ty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/c_ty.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_100_qqdoge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_100_qqdoge.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1010.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1011.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1012.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1013.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1014.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1015.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1016.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1017.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1018.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1019.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_101_pyjiaoyi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_101_pyjiaoyi.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1020.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1021.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1022_zhenbuchuo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1022_zhenbuchuo.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1023_liewenhuke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1023_liewenhuke.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1024.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1025.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1026.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1027.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1028.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1029.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_102_fadai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_102_fadai.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1030.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1031.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_103_nb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_103_nb.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_104.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_105.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_106.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_107.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_108.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_109.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_10_aoman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_10_aoman.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_11_yiwen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_11_yiwen.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_12_wuyu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_12_wuyu.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_13_huaixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_13_huaixiao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_14_bishi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_14_bishi.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_15_fanu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_15_fanu.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_16_tuosai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_16_tuosai.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_17_tushe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_17_tushe.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_18_han.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_18_han.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_19_koubi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_19_koubi.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_1_hahaha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_1_hahaha.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_20_qinqin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_20_qinqin.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_21_penxue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_21_penxue.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_22_xiaoyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_22_xiaoyan.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_23_shui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_23_shui.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_24_wuzuixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_24_wuzuixiao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_25_zaijian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_25_zaijian.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_26_kelian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_26_kelian.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_27_qiang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_27_qiang.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_28_ruo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_28_ruo.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_29_baoquan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_29_baoquan.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_2_jingya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_2_jingya.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_30_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_30_ok.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_31_xiaoku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_31_xiaoku.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_32_heiha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_32_heiha.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_33_wulian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_33_wulian.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_34_jizhi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_34_jizhi.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_35_ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_35_ye.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_36_ku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_36_ku.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_37_doge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_37_doge.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_38_wozuimei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_38_wozuimei.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_39_caidao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_39_caidao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_3_ciya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_3_ciya.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_40_aixin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_40_aixin.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_41_meigui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_41_meigui.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_42_diaoxie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_42_diaoxie.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_43_heixian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_43_heixian.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_44_pen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_44_pen.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_45_yinxian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_45_yinxian.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_46_nanguo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_46_nanguo.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_47_weiqu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_47_weiqu.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_48_weiweiyixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_48_weiweiyixiao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_49_huanhu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_49_huanhu.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_4_liulei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_4_liulei.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_50_xinsui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_50_xinsui.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_51_chigua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_51_chigua.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_52_hejiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_52_hejiu.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_53_pu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_53_pu.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_54_hongyaowan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_54_hongyaowan.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_55_lvyaowan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_55_lvyaowan.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_56_dogexiaoku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_56_dogexiaoku.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_57_dogehechi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_57_dogehechi.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_58_dogeyuanliangta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_58_dogeyuanliangta.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_59_erha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_59_erha.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_5_keai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_5_keai.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_60_kuan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_60_kuan.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_61_lvmao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_61_lvmao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_62_huaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_62_huaji.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_63_liuhanhuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_63_liuhanhuaji.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_64_shounuehuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_64_shounuehuaji.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_65_coshuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_65_coshuaji.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_66_doujiyanhuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_66_doujiyanhuaji.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_67_mojinghuaji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_67_mojinghuaji.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_68.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_69.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_6_weixiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_6_weixiao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_70.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_71.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_72.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_73.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_74.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_75.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_76.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_77.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_78.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_79.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_7_hehe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_7_hehe.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_80.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_81_naikezui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_81_naikezui.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_82_miaomiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_82_miaomiao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_83_huoba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_83_huoba.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_84_baiyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_84_baiyan.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_85.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_86.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_87.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_88.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_89.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_8_piezui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_8_piezui.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_90.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_91.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_92.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_93.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_94.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_95_erhading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_95_erhading.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_96_kuanlvmao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_96_kuanlvmao.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_97_haixiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_97_haixiu.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_98_wunai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_98_wunai.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_99_zhoumei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_99_zhoumei.png -------------------------------------------------------------------------------- /assets/emojis/coolapk_emotion_9_se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/emojis/coolapk_emotion_9_se.png -------------------------------------------------------------------------------- /assets/icon/icon-splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/icon/icon-splash.png -------------------------------------------------------------------------------- /assets/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/assets/icon/icon.png -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @main 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 | application.applicationSupportsShakeToEdit = false 12 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "background.png", 5 | "idiom" : "universal" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "dark" 12 | } 13 | ], 14 | "filename" : "darkbackground.png", 15 | "idiom" : "universal" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchBackground.imageset/darkbackground.png -------------------------------------------------------------------------------- /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 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "LaunchImageDark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "LaunchImage@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "LaunchImageDark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "LaunchImage@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "LaunchImageDark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImageDark@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/components/cards/chat_time_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ChatTimeCard extends StatelessWidget { 4 | const ChatTimeCard({super.key, required this.text}); 5 | 6 | final String text; 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return Padding( 11 | padding: const EdgeInsets.all(12), 12 | child: Text( 13 | text, 14 | style: TextStyle( 15 | fontSize: 13, 16 | color: Theme.of(context).colorScheme.outline, 17 | ), 18 | textAlign: TextAlign.center, 19 | ), 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/components/cards/message_third_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | Widget messageThirdCard( 4 | BuildContext context, 5 | int backgroundColor, 6 | IconData icon, 7 | String title, 8 | int? badge, 9 | Function() onTap, 10 | ) { 11 | return Material( 12 | clipBehavior: Clip.hardEdge, 13 | borderRadius: const BorderRadius.all(Radius.circular(12)), 14 | color: Theme.of(context).colorScheme.onInverseSurface, 15 | child: InkWell( 16 | onTap: onTap, 17 | child: Padding( 18 | padding: const EdgeInsets.all(10), 19 | child: Stack( 20 | alignment: Alignment.center, 21 | children: [ 22 | Row( 23 | children: [ 24 | Container( 25 | width: 40, 26 | height: 40, 27 | alignment: Alignment.center, 28 | decoration: BoxDecoration( 29 | color: Color(backgroundColor), 30 | shape: BoxShape.circle, 31 | ), 32 | child: Icon( 33 | icon, 34 | color: Colors.white, 35 | ), 36 | ), 37 | const SizedBox(width: 10), 38 | Expanded( 39 | flex: 1, 40 | child: Text( 41 | title, 42 | maxLines: 1, 43 | overflow: TextOverflow.ellipsis, 44 | )), 45 | Icon( 46 | Icons.keyboard_arrow_right, 47 | color: Theme.of(context).colorScheme.outline, 48 | ), 49 | ], 50 | ), 51 | if (badge != null && badge > 0) Badge.count(count: badge) 52 | ], 53 | ), 54 | ), 55 | ), 56 | ); 57 | } 58 | -------------------------------------------------------------------------------- /lib/components/cards/search_history_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SearchHistoryCard extends StatelessWidget { 4 | const SearchHistoryCard({ 5 | super.key, 6 | required this.text, 7 | required this.onTap, 8 | required this.onLongPress, 9 | }); 10 | 11 | final String text; 12 | final Function() onTap; 13 | final Function() onLongPress; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return InkWell( 18 | onTap: onTap, 19 | onLongPress: onLongPress, 20 | borderRadius: BorderRadius.circular(20), 21 | child: Ink( 22 | decoration: BoxDecoration( 23 | color: Theme.of(context).colorScheme.onInverseSurface, 24 | borderRadius: BorderRadius.circular(20), 25 | ), 26 | padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), 27 | child: Text( 28 | text, 29 | maxLines: 1, 30 | overflow: TextOverflow.ellipsis, 31 | style: const TextStyle(height: 1), 32 | strutStyle: const StrutStyle(leading: 0, height: 1), 33 | ), 34 | ), 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/components/cards/text_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TextCard extends StatelessWidget { 4 | const TextCard({ 5 | super.key, 6 | required this.text, 7 | this.isMessage = false, 8 | this.isEndCard = false, 9 | this.isRefreshCard = false, 10 | }); 11 | 12 | final String text; 13 | final bool isMessage; 14 | final bool isEndCard; 15 | final bool isRefreshCard; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return Container( 20 | width: double.infinity, 21 | height: isEndCard ? 80 : null, 22 | alignment: isEndCard ? Alignment.center : null, 23 | padding: const EdgeInsets.all(10), 24 | decoration: BoxDecoration( 25 | color: isMessage 26 | ? Theme.of(context).colorScheme.secondaryContainer 27 | : Theme.of(context).colorScheme.onInverseSurface, 28 | borderRadius: BorderRadius.circular(12), 29 | ), 30 | child: Text( 31 | text, 32 | textAlign: isRefreshCard || isEndCard ? TextAlign.center : null, 33 | style: TextStyle( 34 | color: isMessage 35 | ? Theme.of(context).colorScheme.onSecondaryContainer 36 | : Theme.of(context).colorScheme.outline, 37 | ), 38 | ), 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/components/cards/title_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../utils/utils.dart'; 4 | 5 | class TitleCard extends StatelessWidget { 6 | const TitleCard({ 7 | super.key, 8 | required this.title, 9 | required this.url, 10 | this.bottomPadding = 0, 11 | }); 12 | 13 | final String title; 14 | final String url; 15 | final double bottomPadding; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return Padding( 20 | padding: EdgeInsets.only(left: 10, right: 10, bottom: bottomPadding), 21 | child: GestureDetector( 22 | onTap: () { 23 | if (url.isNotEmpty) { 24 | Utils.onOpenLink(url, title); 25 | } 26 | }, 27 | child: Row( 28 | children: [ 29 | Expanded( 30 | flex: 1, 31 | child: Text( 32 | title, 33 | style: const TextStyle( 34 | fontSize: 16, 35 | fontWeight: FontWeight.bold, 36 | ), 37 | ), 38 | ), 39 | if (url.isNotEmpty) 40 | Icon( 41 | Icons.keyboard_arrow_right_outlined, 42 | color: Theme.of(context).colorScheme.outline, 43 | ), 44 | ], 45 | ), 46 | ), 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/components/custom_toast.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CustomToast extends StatelessWidget { 4 | const CustomToast({super.key, required this.msg}); 5 | 6 | final String msg; 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return Container( 11 | margin: 12 | EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom + 30), 13 | padding: const EdgeInsets.symmetric(horizontal: 17, vertical: 10), 14 | decoration: BoxDecoration( 15 | color: Theme.of(context).colorScheme.primaryContainer, 16 | borderRadius: BorderRadius.circular(20), 17 | ), 18 | child: Text( 19 | msg, 20 | style: TextStyle( 21 | fontSize: 13, 22 | color: Theme.of(context).colorScheme.primary, 23 | ), 24 | ), 25 | ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/components/footer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../logic/state/loading_state.dart'; 4 | 5 | Widget footerWidget(LoadingState footerState, Function() onReload) { 6 | switch (footerState) { 7 | case Empty(): 8 | return Container( 9 | height: 80, 10 | alignment: Alignment.center, 11 | padding: const EdgeInsets.all(10.0), 12 | child: const Text('END'), 13 | ); 14 | case Error(): 15 | return GestureDetector( 16 | onTap: onReload, 17 | child: Container( 18 | height: 80, 19 | alignment: Alignment.center, 20 | padding: const EdgeInsets.all(10.0), 21 | child: Text(footerState.errMsg), 22 | ), 23 | ); 24 | default: 25 | return Container( 26 | height: 80, 27 | alignment: Alignment.center, 28 | padding: const EdgeInsets.all(10.0), 29 | child: const CircularProgressIndicator(), 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/components/icon_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class IconText extends StatelessWidget { 4 | const IconText({super.key, required this.icon, required this.text}); 5 | 6 | final IconData icon; 7 | final String text; 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Row( 12 | mainAxisSize: MainAxisSize.min, 13 | crossAxisAlignment: CrossAxisAlignment.center, 14 | children: [ 15 | Icon( 16 | icon, 17 | size: MediaQuery.textScalerOf(context).scale(13), 18 | color: Theme.of(context).colorScheme.outline, 19 | ), 20 | Flexible( 21 | flex: 1, 22 | child: Text( 23 | text, 24 | maxLines: 1, 25 | overflow: TextOverflow.ellipsis, 26 | style: TextStyle( 27 | fontSize: 14, 28 | color: Theme.of(context).colorScheme.outline, 29 | ), 30 | ), 31 | ), 32 | ], 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/components/like_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LikeButton extends StatelessWidget { 4 | const LikeButton({ 5 | super.key, 6 | required this.value, 7 | required this.icon, 8 | this.isLike = false, 9 | this.onClick, 10 | }); 11 | 12 | final dynamic value; 13 | final IconData icon; 14 | final bool isLike; 15 | final Function()? onClick; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return TextButton( 20 | onPressed: onClick, 21 | style: TextButton.styleFrom( 22 | minimumSize: Size.zero, 23 | tapTargetSize: MaterialTapTargetSize.shrinkWrap, 24 | padding: const EdgeInsets.symmetric(horizontal: 12), 25 | visualDensity: const VisualDensity( 26 | horizontal: -4, 27 | vertical: -4, 28 | ), 29 | ), 30 | child: Row( 31 | mainAxisSize: MainAxisSize.min, 32 | children: [ 33 | Icon( 34 | icon, 35 | color: isLike 36 | ? Theme.of(context).colorScheme.primary 37 | : Theme.of(context).colorScheme.outline, 38 | size: MediaQuery.textScalerOf(context).scale(14), 39 | ), 40 | const SizedBox(width: 2), 41 | Text( 42 | value.toString(), 43 | style: TextStyle( 44 | fontSize: 14, 45 | fontWeight: FontWeight.normal, 46 | color: isLike 47 | ? Theme.of(context).colorScheme.primary 48 | : Theme.of(context).colorScheme.outline, 49 | ), 50 | ), 51 | ], 52 | ), 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/components/no_splash_factory.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class NoSplashFactory extends InteractiveInkFeatureFactory { 4 | @override 5 | InteractiveInkFeature create( 6 | {required MaterialInkController controller, 7 | required RenderBox referenceBox, 8 | required Offset position, 9 | required Color color, 10 | required TextDirection textDirection, 11 | bool containedInkWell = false, 12 | RectCallback? rectCallback, 13 | BorderRadius? borderRadius, 14 | ShapeBorder? customBorder, 15 | double? radius, 16 | VoidCallback? onRemoved}) { 17 | return _NoInteractiveInkFeature( 18 | controller: controller, 19 | referenceBox: referenceBox, 20 | color: color, 21 | onRemoved: onRemoved); 22 | } 23 | } 24 | 25 | class _NoInteractiveInkFeature extends InteractiveInkFeature { 26 | @override 27 | void paintFeature(Canvas canvas, Matrix4 transform) {} 28 | _NoInteractiveInkFeature({ 29 | required super.controller, 30 | required super.referenceBox, 31 | required super.color, 32 | super.onRemoved, 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /lib/components/settings/drop_down_menu_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:get/get.dart'; 3 | 4 | import '../../utils/storage_util.dart'; 5 | 6 | class DropDownMenuItem extends StatefulWidget { 7 | const DropDownMenuItem({ 8 | super.key, 9 | required this.icon, 10 | required this.title, 11 | required this.boxKey, 12 | required this.items, 13 | this.forceAppUpdate = false, 14 | }); 15 | 16 | final IconData icon; 17 | final String title; 18 | final String boxKey; 19 | final List> items; 20 | final bool forceAppUpdate; 21 | 22 | @override 23 | State createState() => _DropDownMenuItemState(); 24 | } 25 | 26 | class _DropDownMenuItemState extends State { 27 | late int value; 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | value = GStorage.settings.get(widget.boxKey, defaultValue: 0); 33 | } 34 | 35 | @override 36 | Widget build(BuildContext context) { 37 | return ListTile( 38 | leading: Icon(widget.icon), 39 | title: Text(widget.title), 40 | trailing: DropdownButton( 41 | value: value, 42 | onChanged: (int? newValue) { 43 | if (newValue != null) { 44 | GStorage.settings.put(widget.boxKey, newValue); 45 | setState(() => value = newValue); 46 | if (widget.forceAppUpdate) { 47 | Get.forceAppUpdate(); 48 | } 49 | } 50 | }, 51 | items: widget.items, 52 | ), 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/components/settings/item_title.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ItemTitle extends StatelessWidget { 4 | const ItemTitle({super.key, required this.title}); 5 | 6 | final String title; 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return ListTile( 11 | title: Text( 12 | title, 13 | style: TextStyle( 14 | color: Theme.of(context).colorScheme.primary, 15 | ), 16 | ), 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/components/settings/switch_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:get/get.dart'; 3 | 4 | import '../../utils/storage_util.dart'; 5 | 6 | class SwitchItem extends StatefulWidget { 7 | const SwitchItem({ 8 | super.key, 9 | required this.icon, 10 | required this.title, 11 | required this.boxKey, 12 | required this.defaultValue, 13 | this.forceAppUpdate = false, 14 | }); 15 | 16 | final IconData icon; 17 | final String title; 18 | final String boxKey; 19 | final bool defaultValue; 20 | final bool forceAppUpdate; 21 | 22 | @override 23 | State createState() => _SwitchItemState(); 24 | } 25 | 26 | class _SwitchItemState extends State { 27 | late bool value; 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | value = 33 | GStorage.settings.get(widget.boxKey, defaultValue: widget.defaultValue); 34 | } 35 | 36 | void onChanged(bool value) async { 37 | await GStorage.settings.put(widget.boxKey, value); 38 | if (widget.forceAppUpdate) { 39 | Get.forceAppUpdate(); 40 | } 41 | setState(() => this.value = value); 42 | } 43 | 44 | @override 45 | Widget build(BuildContext context) { 46 | return ListTile( 47 | leading: Icon(widget.icon), 48 | title: Text(widget.title), 49 | trailing: Switch( 50 | value: value, 51 | onChanged: onChanged, 52 | ), 53 | onTap: () => onChanged(!value), 54 | ); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /lib/components/single_line_fitted_box.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SingleLineFittedBox extends StatelessWidget { 4 | const SingleLineFittedBox({super.key, this.child}); 5 | final Widget? child; 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return LayoutBuilder( 10 | builder: (_, constraints) { 11 | return FittedBox( 12 | child: ConstrainedBox( 13 | constraints: constraints.copyWith( 14 | minWidth: constraints.maxWidth, 15 | maxWidth: double.infinity, 16 | //maxWidth: constraints.maxWidth 17 | ), 18 | child: child, 19 | ), 20 | ); 21 | }, 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/components/sliver_pinned_box_adapter.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/rendering.dart'; 3 | 4 | class SliverPinnedBoxAdapter extends SingleChildRenderObjectWidget { 5 | const SliverPinnedBoxAdapter({ 6 | super.key, 7 | required super.child, 8 | }); 9 | 10 | @override 11 | RenderObject createRenderObject(BuildContext context) { 12 | return _RenderSliverPinnedBoxAdapter(); 13 | } 14 | } 15 | 16 | class _RenderSliverPinnedBoxAdapter extends RenderSliverSingleBoxAdapter { 17 | _RenderSliverPinnedBoxAdapter(); 18 | @override 19 | void performLayout() { 20 | if (child == null) { 21 | geometry = SliverGeometry.zero; 22 | return; 23 | } 24 | 25 | child?.layout(constraints.asBoxConstraints(), parentUsesSize: true); 26 | double childExtent; 27 | switch (constraints.axis) { 28 | case Axis.horizontal: 29 | childExtent = child?.size.width ?? 0; 30 | break; 31 | case Axis.vertical: 32 | childExtent = child?.size.height ?? 0; 33 | break; 34 | } 35 | 36 | final double paintedChildSize = 37 | calculatePaintOffset(constraints, from: 0.0, to: childExtent); 38 | final double cacheExtent = 39 | calculateCacheOffset(constraints, from: 0.0, to: childExtent); 40 | 41 | assert(paintedChildSize.isFinite); 42 | assert(paintedChildSize >= 0.0); 43 | 44 | geometry = SliverGeometry( 45 | scrollExtent: childExtent, 46 | paintExtent: paintedChildSize, 47 | cacheExtent: cacheExtent, 48 | maxPaintExtent: childExtent, 49 | hitTestExtent: childExtent, 50 | hasVisualOverflow: childExtent > constraints.remainingPaintExtent || 51 | constraints.scrollOffset > 0.0, 52 | paintOrigin: constraints.overlap, 53 | visible: true, 54 | ); 55 | } 56 | 57 | @override 58 | double childMainAxisPosition(RenderBox child) => constraints.overlap; 59 | } 60 | -------------------------------------------------------------------------------- /lib/logic/model/app_info/app_info.dart: -------------------------------------------------------------------------------- 1 | import 'dart:typed_data'; 2 | 3 | class AppInfo { 4 | Uint8List? icon; 5 | String appName; 6 | String packageName; 7 | String versionName; 8 | String versionCode; 9 | String lastUpdateTime; 10 | 11 | AppInfo({ 12 | required this.icon, 13 | required this.appName, 14 | required this.packageName, 15 | required this.versionName, 16 | required this.versionCode, 17 | required this.lastUpdateTime, 18 | }); 19 | 20 | factory AppInfo.create(dynamic data) { 21 | return AppInfo( 22 | icon: data['icon'], 23 | appName: data['appName'] ?? '', 24 | packageName: data['packageName'] ?? '', 25 | versionName: data['versionName'] ?? '0', 26 | versionCode: data['versionCode'] ?? '0', 27 | lastUpdateTime: data['lastUpdateTime'] ?? '0', 28 | ); 29 | } 30 | 31 | static List parseList(dynamic apps) { 32 | if (apps == null || apps is! List || apps.isEmpty) return []; 33 | final List appInfoList = 34 | apps.map((app) => AppInfo.create(app)).toList(); 35 | appInfoList.sort((a, b) => a.lastUpdateTime.compareTo(b.lastUpdateTime)); 36 | return appInfoList.reversed.toList(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/logic/model/check_count/check_count.dart: -------------------------------------------------------------------------------- 1 | import 'datum.dart'; 2 | 3 | class CheckCount { 4 | String? message; 5 | Datum? data; 6 | 7 | CheckCount({ 8 | this.message, 9 | this.data, 10 | }); 11 | 12 | factory CheckCount.fromJson(Map json) { 13 | return CheckCount( 14 | message: json['message'] as String?, 15 | data: json['data'] == null 16 | ? null 17 | : Datum.fromJson(json['data'] as Map), 18 | ); 19 | } 20 | 21 | Map toJson() { 22 | return { 23 | 'message': message, 24 | 'data': data, 25 | }; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/logic/model/check_count/datum.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | class Datum { 4 | int? notification; 5 | @JsonKey(name: 'contacts_follow') 6 | int? contactsFollow; 7 | int? message; 8 | int? atme; 9 | int? atcommentme; 10 | int? commentme; 11 | int? feedlike; 12 | int? badge; 13 | 14 | Datum({ 15 | this.notification, 16 | this.contactsFollow, 17 | this.message, 18 | this.atme, 19 | this.atcommentme, 20 | this.commentme, 21 | this.feedlike, 22 | this.badge, 23 | }); 24 | 25 | factory Datum.fromJson(Map json) { 26 | return Datum( 27 | notification: (json['notification'] as num?)?.toInt(), 28 | contactsFollow: (json['contacts_follow'] as num?)?.toInt(), 29 | message: (json['message'] as num?)?.toInt(), 30 | atme: (json['atme'] as num?)?.toInt(), 31 | atcommentme: (json['atcommentme'] as num?)?.toInt(), 32 | commentme: (json['commentme'] as num?)?.toInt(), 33 | feedlike: (json['feedlike'] as num?)?.toInt(), 34 | badge: (json['badge'] as num?)?.toInt(), 35 | ); 36 | } 37 | 38 | Map toJson() { 39 | return { 40 | 'notification': notification, 41 | 'contacts_follow': contactsFollow, 42 | 'message': message, 43 | 'atme': atme, 44 | 'atcommentme': atcommentme, 45 | 'commentme': commentme, 46 | 'feedlike': feedlike, 47 | 'badge': badge, 48 | }; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/check.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | import 'data.dart'; 4 | 5 | part 'check.g.dart'; 6 | 7 | @JsonSerializable() 8 | class CheckInfo { 9 | String? message; 10 | Data? data; 11 | 12 | CheckInfo({ 13 | this.message, 14 | this.data, 15 | }); 16 | 17 | factory CheckInfo.fromJson(Map json) => 18 | _$CheckInfoFromJson(json); 19 | 20 | Map toJson() => _$CheckInfoToJson(this); 21 | } 22 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/check.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'check.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | CheckInfo _$CheckInfoFromJson(Map json) => CheckInfo( 10 | message: json['message'] as String?, 11 | data: json['data'] == null 12 | ? null 13 | : Data.fromJson(json['data'] as Map), 14 | ); 15 | 16 | Map _$CheckInfoToJson(CheckInfo instance) => { 17 | 'message': instance.message, 18 | 'data': instance.data, 19 | }; 20 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | import 'notify_count.dart'; 4 | 5 | part 'data.g.dart'; 6 | 7 | @JsonSerializable() 8 | class Data { 9 | String? uid; 10 | String? username; 11 | String? token; 12 | // String? refreshToken; 13 | // int? level; 14 | // @JsonKey(name: 'user_type') 15 | // int? userType; 16 | // int? adminType; 17 | // int? subAdmin; 18 | // String? userAvatar; 19 | NotifyCount? notifyCount; 20 | // String? pushId; 21 | // SystemConfig? systemConfig; 22 | 23 | Data({ 24 | this.uid, 25 | this.username, 26 | this.token, 27 | // this.refreshToken, 28 | // this.level, 29 | // this.userType, 30 | // this.adminType, 31 | // this.subAdmin, 32 | // this.userAvatar, 33 | this.notifyCount, 34 | // this.pushId, 35 | // this.systemConfig, 36 | }); 37 | 38 | factory Data.fromJson(Map json) => _$DataFromJson(json); 39 | 40 | Map toJson() => _$DataToJson(this); 41 | } 42 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/data.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'data.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | Data _$DataFromJson(Map json) => Data( 10 | uid: json['uid'] as String?, 11 | username: json['username'] as String?, 12 | token: json['token'] as String?, 13 | // refreshToken: json['refreshToken'] as String?, 14 | // level: (json['level'] as num?)?.toInt(), 15 | // userType: (json['user_type'] as num?)?.toInt(), 16 | // adminType: (json['adminType'] as num?)?.toInt(), 17 | // subAdmin: (json['subAdmin'] as num?)?.toInt(), 18 | // userAvatar: json['userAvatar'] as String?, 19 | notifyCount: json['notifyCount'] == null 20 | ? null 21 | : NotifyCount.fromJson(json['notifyCount'] as Map), 22 | // pushId: json['pushId'] as String?, 23 | // systemConfig: json['systemConfig'] == null 24 | // ? null 25 | // : SystemConfig.fromJson(json['systemConfig'] as Map), 26 | ); 27 | 28 | Map _$DataToJson(Data instance) => { 29 | 'uid': instance.uid, 30 | 'username': instance.username, 31 | 'token': instance.token, 32 | // 'refreshToken': instance.refreshToken, 33 | // 'level': instance.level, 34 | // 'user_type': instance.userType, 35 | // 'adminType': instance.adminType, 36 | // 'subAdmin': instance.subAdmin, 37 | // 'userAvatar': instance.userAvatar, 38 | 'notifyCount': instance.notifyCount, 39 | // 'pushId': instance.pushId, 40 | // 'systemConfig': instance.systemConfig, 41 | }; 42 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/notify_count.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'notify_count.g.dart'; 4 | 5 | @JsonSerializable() 6 | class NotifyCount { 7 | // int? cloudInstall; 8 | int? notification; 9 | @JsonKey(name: 'contacts_follow') 10 | int? contactsFollow; 11 | int? message; 12 | int? atme; 13 | int? atcommentme; 14 | int? commentme; 15 | int? feedlike; 16 | int? badge; 17 | // int? dateline; 18 | 19 | NotifyCount({ 20 | // this.cloudInstall, 21 | this.notification, 22 | this.contactsFollow, 23 | this.message, 24 | this.atme, 25 | this.atcommentme, 26 | this.commentme, 27 | this.feedlike, 28 | this.badge, 29 | // this.dateline, 30 | }); 31 | 32 | factory NotifyCount.fromJson(Map json) { 33 | return _$NotifyCountFromJson(json); 34 | } 35 | 36 | Map toJson() => _$NotifyCountToJson(this); 37 | } 38 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/notify_count.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'notify_count.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | NotifyCount _$NotifyCountFromJson(Map json) => NotifyCount( 10 | // cloudInstall: (json['cloudInstall'] as num?)?.toInt(), 11 | notification: (json['notification'] as num?)?.toInt(), 12 | contactsFollow: (json['contacts_follow'] as num?)?.toInt(), 13 | message: (json['message'] as num?)?.toInt(), 14 | atme: (json['atme'] as num?)?.toInt(), 15 | atcommentme: (json['atcommentme'] as num?)?.toInt(), 16 | commentme: (json['commentme'] as num?)?.toInt(), 17 | feedlike: (json['feedlike'] as num?)?.toInt(), 18 | badge: (json['badge'] as num?)?.toInt(), 19 | // dateline: (json['dateline'] as num?)?.toInt(), 20 | ); 21 | 22 | Map _$NotifyCountToJson(NotifyCount instance) => 23 | { 24 | // 'cloudInstall': instance.cloudInstall, 25 | 'notification': instance.notification, 26 | 'contacts_follow': instance.contactsFollow, 27 | 'message': instance.message, 28 | 'atme': instance.atme, 29 | 'atcommentme': instance.atcommentme, 30 | 'commentme': instance.commentme, 31 | 'feedlike': instance.feedlike, 32 | 'badge': instance.badge, 33 | // 'dateline': instance.dateline, 34 | }; 35 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/system_config.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'system_config.g.dart'; 4 | 5 | @JsonSerializable() 6 | class SystemConfig { 7 | @JsonKey(name: 'system_config') 8 | String? systemConfig; 9 | @JsonKey(name: 'spam_word_config') 10 | String? spamWordConfig; 11 | 12 | SystemConfig({this.systemConfig, this.spamWordConfig}); 13 | 14 | factory SystemConfig.fromJson(Map json) { 15 | return _$SystemConfigFromJson(json); 16 | } 17 | 18 | Map toJson() => _$SystemConfigToJson(this); 19 | } 20 | -------------------------------------------------------------------------------- /lib/logic/model/check_info/system_config.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'system_config.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | SystemConfig _$SystemConfigFromJson(Map json) => SystemConfig( 10 | systemConfig: json['system_config'] as String?, 11 | spamWordConfig: json['spam_word_config'] as String?, 12 | ); 13 | 14 | Map _$SystemConfigToJson(SystemConfig instance) => 15 | { 16 | 'system_config': instance.systemConfig, 17 | 'spam_word_config': instance.spamWordConfig, 18 | }; 19 | -------------------------------------------------------------------------------- /lib/logic/model/check_update/check_update.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | import 'datum.dart'; 4 | 5 | part 'check_update.g.dart'; 6 | 7 | @JsonSerializable() 8 | class CheckUpdate { 9 | String? message; 10 | List? data; 11 | 12 | CheckUpdate({ 13 | this.message, 14 | this.data, 15 | }); 16 | 17 | factory CheckUpdate.fromJson(Map json) { 18 | return _$CheckUpdateFromJson(json); 19 | } 20 | 21 | Map toJson() => _$CheckUpdateToJson(this); 22 | } 23 | -------------------------------------------------------------------------------- /lib/logic/model/check_update/check_update.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'check_update.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | CheckUpdate _$CheckUpdateFromJson(Map json) => CheckUpdate( 10 | message: json['message'] as String?, 11 | data: (json['data'] as List?) 12 | ?.map((e) => Datum.fromJson(e as Map)) 13 | .toList(), 14 | ); 15 | 16 | Map _$CheckUpdateToJson(CheckUpdate instance) => 17 | { 18 | 'message': instance.message, 19 | 'data': instance.data, 20 | }; 21 | -------------------------------------------------------------------------------- /lib/logic/model/fav_history/fav_history.dart: -------------------------------------------------------------------------------- 1 | import 'package:hive/hive.dart'; 2 | 3 | part 'fav_history.g.dart'; 4 | 5 | @HiveType(typeId: 0) 6 | class FavHistoryItem { 7 | FavHistoryItem({ 8 | this.id, 9 | this.uid, 10 | this.username, 11 | this.userAvatar, 12 | this.message, 13 | this.device, 14 | this.dateline, 15 | this.time, 16 | }); 17 | 18 | @HiveField(0) 19 | String? id; 20 | @HiveField(1) 21 | String? uid; 22 | @HiveField(2) 23 | String? username; 24 | @HiveField(3) 25 | String? userAvatar; 26 | @HiveField(4) 27 | String? message; 28 | @HiveField(5) 29 | String? device; 30 | @HiveField(6) 31 | String? dateline; 32 | @HiveField(7) 33 | int? time; 34 | 35 | FavHistoryItem.fromJson(Map json) { 36 | id = json['id']; 37 | uid = json['uid']; 38 | username = json['username']; 39 | userAvatar = json['userAvatar']; 40 | message = json['message']; 41 | device = json['device']; 42 | dateline = json['dateline']; 43 | time = json['time']; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/logic/model/fav_history/fav_history.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'fav_history.dart'; 4 | 5 | // ************************************************************************** 6 | // TypeAdapterGenerator 7 | // ************************************************************************** 8 | 9 | class FavHistoryItemAdapter extends TypeAdapter { 10 | @override 11 | final int typeId = 0; 12 | 13 | @override 14 | FavHistoryItem read(BinaryReader reader) { 15 | final numOfFields = reader.readByte(); 16 | final fields = { 17 | for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), 18 | }; 19 | return FavHistoryItem( 20 | id: fields[0] as String?, 21 | uid: fields[1] as String?, 22 | username: fields[2] as String?, 23 | userAvatar: fields[3] as String?, 24 | message: fields[4] as String?, 25 | device: fields[5] as String?, 26 | dateline: fields[6] as String?, 27 | time: (fields[7] as num?)?.toInt(), 28 | ); 29 | } 30 | 31 | @override 32 | void write(BinaryWriter writer, FavHistoryItem obj) { 33 | writer 34 | ..writeByte(8) 35 | ..writeByte(0) 36 | ..write(obj.id) 37 | ..writeByte(1) 38 | ..write(obj.uid) 39 | ..writeByte(2) 40 | ..write(obj.username) 41 | ..writeByte(3) 42 | ..write(obj.userAvatar) 43 | ..writeByte(4) 44 | ..write(obj.message) 45 | ..writeByte(5) 46 | ..write(obj.device) 47 | ..writeByte(6) 48 | ..write(obj.dateline) 49 | ..writeByte(7) 50 | ..write(obj.time); 51 | } 52 | 53 | @override 54 | int get hashCode => typeId.hashCode; 55 | 56 | @override 57 | bool operator ==(Object other) => 58 | identical(this, other) || 59 | other is FavHistoryItemAdapter && 60 | runtimeType == other.runtimeType && 61 | typeId == other.typeId; 62 | } 63 | -------------------------------------------------------------------------------- /lib/logic/model/feed/data_list_model.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | import 'datum.dart'; 4 | 5 | part 'data_list_model.g.dart'; 6 | 7 | @JsonSerializable() 8 | class DataListModel { 9 | String? message; 10 | List? data; 11 | 12 | DataListModel({ 13 | this.message, 14 | this.data, 15 | }); 16 | 17 | factory DataListModel.fromJson(Map json) => 18 | _$DataListModelFromJson(json); 19 | 20 | Map toJson() => _$DataListModelToJson(this); 21 | } 22 | -------------------------------------------------------------------------------- /lib/logic/model/feed/data_list_model.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'data_list_model.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | DataListModel _$DataListModelFromJson(Map json) => 10 | DataListModel( 11 | message: json['message'] as String?, 12 | data: (json['data'] as List?) 13 | ?.map((e) => Datum.fromJson(e as Map)) 14 | .toList(), 15 | ); 16 | 17 | Map _$DataListModelToJson(DataListModel instance) => 18 | { 19 | 'message': instance.message, 20 | 'data': instance.data, 21 | }; 22 | -------------------------------------------------------------------------------- /lib/logic/model/feed/data_model.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | import 'datum.dart'; 4 | 5 | part 'data_model.g.dart'; 6 | 7 | @JsonSerializable() 8 | class DataModel { 9 | String? message; 10 | dynamic messageStatus; 11 | Datum? data; 12 | 13 | DataModel({ 14 | this.message, 15 | this.messageStatus, 16 | this.data, 17 | }); 18 | 19 | factory DataModel.fromJson(Map json) => 20 | _$DataModelFromJson(json); 21 | 22 | Map toJson() => _$DataModelToJson(this); 23 | } 24 | -------------------------------------------------------------------------------- /lib/logic/model/feed/data_model.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'data_model.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | DataModel _$DataModelFromJson(Map json) => DataModel( 10 | message: json['message'] as String?, 11 | messageStatus: json['messageStatus'], 12 | data: json['data'] == null 13 | ? null 14 | : Datum.fromJson(json['data'] as Map), 15 | ); 16 | 17 | Map _$DataModelToJson(DataModel instance) => { 18 | 'message': instance.message, 19 | 'messageStatus': instance.messageStatus, 20 | 'data': instance.data, 21 | }; 22 | -------------------------------------------------------------------------------- /lib/logic/model/feed/entity.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'entity.g.dart'; 4 | 5 | @JsonSerializable() 6 | class Entity { 7 | String? entityType; 8 | String? title; 9 | String? url; 10 | String? pic; 11 | String? logo; 12 | String? userAvatar; 13 | String? username; 14 | 15 | Entity({ 16 | this.entityType, 17 | this.title, 18 | this.url, 19 | this.pic, 20 | this.logo, 21 | this.userAvatar, 22 | this.username, 23 | }); 24 | 25 | factory Entity.fromJson(Map json) { 26 | return _$EntityFromJson(json); 27 | } 28 | 29 | Map toJson() => _$EntityToJson(this); 30 | } 31 | -------------------------------------------------------------------------------- /lib/logic/model/feed/entity.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'entity.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | Entity _$EntityFromJson(Map json) => Entity( 10 | entityType: json['entityType'] as String?, 11 | title: json['title']?.toString(), 12 | url: json['url'] as String?, 13 | pic: json['pic'] as String?, 14 | logo: json['logo'] as String?, 15 | userAvatar: json['userAvatar'] as String?, 16 | username: json['username'] as String?, 17 | ); 18 | 19 | Map _$EntityToJson(Entity instance) => { 20 | 'entityType': instance.entityType, 21 | 'title': instance.title, 22 | 'url': instance.url, 23 | 'pic': instance.pic, 24 | 'logo': instance.logo, 25 | 'userAvatar': instance.userAvatar, 26 | 'username': instance.username, 27 | }; 28 | -------------------------------------------------------------------------------- /lib/logic/model/feed/extra_data_arr.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'extra_data_arr.g.dart'; 4 | 5 | @JsonSerializable() 6 | class ExtraDataArr { 7 | // @JsonKey(name: 'cardDividerTopVX') 8 | // String? cardDividerTopVx; 9 | // @JsonKey(name: 'cardDividerBottomVX') 10 | // String? cardDividerBottomVx; 11 | // String? viewBackgroundStyle; 12 | // String? info; 13 | // int? cardId; 14 | String? pageTitle; 15 | String? cardPageName; 16 | // int? cardDividerBottom; 17 | 18 | ExtraDataArr({ 19 | // this.cardDividerTopVx, 20 | // this.cardDividerBottomVx, 21 | // this.viewBackgroundStyle, 22 | // this.info, 23 | // this.cardId, 24 | this.pageTitle, 25 | this.cardPageName, 26 | // this.cardDividerBottom, 27 | }); 28 | 29 | factory ExtraDataArr.fromJson(Map json) { 30 | return _$ExtraDataArrFromJson(json); 31 | } 32 | 33 | Map toJson() => _$ExtraDataArrToJson(this); 34 | } 35 | -------------------------------------------------------------------------------- /lib/logic/model/feed/extra_data_arr.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'extra_data_arr.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | ExtraDataArr _$ExtraDataArrFromJson(Map json) => ExtraDataArr( 10 | // cardDividerTopVx: json['cardDividerTopVX'] as String?, 11 | // cardDividerBottomVx: json['cardDividerBottomVX'] as String?, 12 | // viewBackgroundStyle: json['viewBackgroundStyle'] as String?, 13 | // info: json['info'] as String?, 14 | // cardId: (json['cardId'] as num?)?.toInt(), 15 | pageTitle: json['pageTitle'] as String?, 16 | cardPageName: json['cardPageName'] as String?, 17 | // cardDividerBottom: (json['cardDividerBottom'] as num?)?.toInt(), 18 | ); 19 | 20 | Map _$ExtraDataArrToJson(ExtraDataArr instance) => 21 | { 22 | // 'cardDividerTopVX': instance.cardDividerTopVx, 23 | // 'cardDividerBottomVX': instance.cardDividerBottomVx, 24 | // 'viewBackgroundStyle': instance.viewBackgroundStyle, 25 | // 'info': instance.info, 26 | // 'cardId': instance.cardId, 27 | 'pageTitle': instance.pageTitle, 28 | 'cardPageName': instance.cardPageName, 29 | // 'cardDividerBottom': instance.cardDividerBottom, 30 | }; 31 | -------------------------------------------------------------------------------- /lib/logic/model/feed/relation_row.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'relation_row.g.dart'; 4 | 5 | @JsonSerializable() 6 | class RelationRow { 7 | dynamic id; 8 | String? logo; 9 | String? title; 10 | String? url; 11 | String? entityType; 12 | // @JsonKey(name: 'relation_addition_logo') 13 | // String? relationAdditionLogo; 14 | // @JsonKey(name: 'relation_addition_title') 15 | // String? relationAdditionTitle; 16 | 17 | RelationRow({ 18 | this.id, 19 | this.logo, 20 | this.title, 21 | this.url, 22 | this.entityType, 23 | // this.relationAdditionLogo, 24 | // this.relationAdditionTitle, 25 | }); 26 | 27 | factory RelationRow.fromJson(Map json) { 28 | return _$RelationRowFromJson(json); 29 | } 30 | 31 | Map toJson() => _$RelationRowToJson(this); 32 | } 33 | -------------------------------------------------------------------------------- /lib/logic/model/feed/relation_row.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'relation_row.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | RelationRow _$RelationRowFromJson(Map json) => RelationRow( 10 | id: json['id'], 11 | logo: json['logo'] as String?, 12 | title: json['title'] as String?, 13 | url: json['url'] as String?, 14 | entityType: json['entityType'] as String?, 15 | ); 16 | 17 | Map _$RelationRowToJson(RelationRow instance) => 18 | { 19 | 'id': instance.id, 20 | 'logo': instance.logo, 21 | 'title': instance.title, 22 | 'url': instance.url, 23 | 'entityType': instance.entityType, 24 | }; 25 | -------------------------------------------------------------------------------- /lib/logic/model/feed/tab_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'tab_list.g.dart'; 4 | 5 | @JsonSerializable() 6 | class TabList { 7 | String? title; 8 | String? url; 9 | @JsonKey(name: 'page_name') 10 | String? pageName; 11 | 12 | TabList({ 13 | this.title, 14 | this.url, 15 | this.pageName, 16 | }); 17 | 18 | factory TabList.fromJson(Map json) { 19 | return _$TabListFromJson(json); 20 | } 21 | 22 | Map toJson() => _$TabListToJson(this); 23 | } 24 | -------------------------------------------------------------------------------- /lib/logic/model/feed/tab_list.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'tab_list.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | TabList _$TabListFromJson(Map json) => TabList( 10 | title: json['title'] as String?, 11 | url: json['url'] as String?, 12 | pageName: json['page_name'] as String?, 13 | ); 14 | 15 | Map _$TabListToJson(TabList instance) => { 16 | 'title': instance.title, 17 | 'url': instance.url, 18 | 'page_name': instance.pageName, 19 | }; 20 | -------------------------------------------------------------------------------- /lib/logic/model/feed/target_row.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'target_row.g.dart'; 4 | 5 | @JsonSerializable() 6 | class TargetRow { 7 | dynamic id; 8 | String? logo; 9 | String? title; 10 | String? url; 11 | String? entityType; 12 | // @JsonKey(name: 'star_total_count') 13 | // int? starTotalCount; 14 | // @JsonKey(name: 'star_average_score') 15 | // int? starAverageScore; 16 | // int? isFollow; 17 | String? targetType; 18 | // @JsonKey(name: 'relation_addition_logo') 19 | // String? relationAdditionLogo; 20 | // @JsonKey(name: 'relation_addition_title') 21 | // String? relationAdditionTitle; 22 | // String? subTitle; 23 | 24 | TargetRow({ 25 | this.id, 26 | this.logo, 27 | this.title, 28 | this.url, 29 | this.entityType, 30 | // this.starTotalCount, 31 | // this.starAverageScore, 32 | // this.isFollow, 33 | this.targetType, 34 | // this.relationAdditionLogo, 35 | // this.relationAdditionTitle, 36 | // this.subTitle, 37 | }); 38 | 39 | factory TargetRow.fromJson(Map json) { 40 | return _$TargetRowFromJson(json); 41 | } 42 | 43 | Map toJson() => _$TargetRowToJson(this); 44 | } 45 | -------------------------------------------------------------------------------- /lib/logic/model/feed/target_row.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'target_row.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | TargetRow _$TargetRowFromJson(Map json) => TargetRow( 10 | id: json['id'], 11 | logo: json['logo'] as String?, 12 | title: json['title'] as String?, 13 | url: json['url'] as String?, 14 | entityType: json['entityType'] as String?, 15 | targetType: json['targetType'] as String?, 16 | ); 17 | 18 | Map _$TargetRowToJson(TargetRow instance) => { 19 | 'id': instance.id, 20 | 'logo': instance.logo, 21 | 'title': instance.title, 22 | 'url': instance.url, 23 | 'entityType': instance.entityType, 24 | 'targetType': instance.targetType, 25 | }; 26 | -------------------------------------------------------------------------------- /lib/logic/model/feed/user_action.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'user_action.g.dart'; 4 | 5 | @JsonSerializable() 6 | class UserAction { 7 | int? like; 8 | int? follow; 9 | 10 | UserAction({ 11 | this.like, 12 | this.follow, 13 | }); 14 | 15 | factory UserAction.fromJson(Map json) { 16 | return _$UserActionFromJson(json); 17 | } 18 | 19 | Map toJson() => _$UserActionToJson(this); 20 | } 21 | -------------------------------------------------------------------------------- /lib/logic/model/feed/user_action.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'user_action.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | UserAction _$UserActionFromJson(Map json) => UserAction( 10 | like: (json['like'] as num?)?.toInt(), 11 | follow: (json['follow'] as num?)?.toInt(), 12 | ); 13 | 14 | Map _$UserActionToJson(UserAction instance) => 15 | { 16 | 'like': instance.like, 17 | 'follow': instance.follow, 18 | }; 19 | -------------------------------------------------------------------------------- /lib/logic/model/feed_article/feed_article.dart: -------------------------------------------------------------------------------- 1 | class FeedArticle { 2 | String? type; 3 | String? message; 4 | String? url; 5 | String? description; 6 | String? title; 7 | String? subTitle; 8 | String? logo; 9 | 10 | FeedArticle({ 11 | this.type, 12 | this.message, 13 | this.url, 14 | this.description, 15 | this.title, 16 | this.subTitle, 17 | this.logo, 18 | }); 19 | 20 | factory FeedArticle.fromJson(Map json) { 21 | return FeedArticle( 22 | type: json['type'] as String?, 23 | message: json['message'] as String?, 24 | url: json['url'] as String?, 25 | description: json['description'] as String?, 26 | title: json['title'] as String?, 27 | subTitle: json['subTitle'] as String?, 28 | logo: json['logo'] as String?, 29 | ); 30 | } 31 | 32 | Map toJson() { 33 | return { 34 | 'type': type, 35 | 'message': message, 36 | 'url': url, 37 | 'description': description, 38 | 'title': title, 39 | 'subTitle': subTitle, 40 | 'logo': logo, 41 | }; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/logic/model/login/login_response.dart: -------------------------------------------------------------------------------- 1 | class LoginResponse { 2 | int? status; 3 | String? message; 4 | dynamic messageStatus; 5 | int? uid; 6 | String? username; 7 | String? token; 8 | dynamic data; 9 | 10 | LoginResponse({ 11 | this.status, 12 | this.message, 13 | this.messageStatus, 14 | this.uid, 15 | this.username, 16 | this.token, 17 | this.data, 18 | }); 19 | 20 | factory LoginResponse.fromJson(Map json) { 21 | return LoginResponse( 22 | status: (json['status'] as num?)?.toInt(), 23 | message: json['message'] as String?, 24 | messageStatus: json['messageStatus'], 25 | uid: (json['uid'] as num?)?.toInt(), 26 | username: json['username'] as String?, 27 | token: json['token'] as String?, 28 | data: json['data'], 29 | ); 30 | } 31 | 32 | Map toJson() { 33 | return { 34 | 'status': status, 35 | 'message': message, 36 | 'messageStatus': messageStatus, 37 | 'uid': uid, 38 | 'username': username, 39 | 'token': token, 40 | 'data': data, 41 | }; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/logic/model/oss_upload/datum.dart: -------------------------------------------------------------------------------- 1 | import 'file_info.dart'; 2 | import 'upload_prepare_info.dart'; 3 | 4 | class OssDatum { 5 | List? fileInfo; 6 | UploadPrepareInfo? uploadPrepareInfo; 7 | 8 | OssDatum({ 9 | this.fileInfo, 10 | this.uploadPrepareInfo, 11 | }); 12 | 13 | factory OssDatum.fromJson(Map json) { 14 | return OssDatum( 15 | fileInfo: (json['fileInfo'] as List?) 16 | ?.map((e) => FileInfo.fromJson(e as Map)) 17 | .toList(), 18 | uploadPrepareInfo: json['uploadPrepareInfo'] == null 19 | ? null 20 | : UploadPrepareInfo.fromJson( 21 | json['uploadPrepareInfo'] as Map), 22 | ); 23 | } 24 | 25 | Map toJson() { 26 | return { 27 | 'fileInfo': fileInfo, 28 | 'uploadPrepareInfo': uploadPrepareInfo, 29 | }; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/logic/model/oss_upload/file_info.dart: -------------------------------------------------------------------------------- 1 | class FileInfo { 2 | String? name; 3 | String? resolution; 4 | String? md5; 5 | String? url; 6 | String? uploadFileName; 7 | 8 | FileInfo({ 9 | this.name, 10 | this.resolution, 11 | this.md5, 12 | this.url, 13 | this.uploadFileName, 14 | }); 15 | 16 | factory FileInfo.fromJson(Map json) { 17 | return FileInfo( 18 | name: json['name'] as String?, 19 | resolution: json['resolution'] as String?, 20 | md5: json['md5'] as String?, 21 | url: json['url'] as String?, 22 | uploadFileName: json['uploadFileName'] as String?, 23 | ); 24 | } 25 | 26 | Map toJson() { 27 | return { 28 | 'name': name, 29 | 'resolution': resolution, 30 | 'md5': md5, 31 | 'url': url, 32 | 'uploadFileName': uploadFileName, 33 | }; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/logic/model/oss_upload/oss_upload_model.dart: -------------------------------------------------------------------------------- 1 | class OssUploadModel { 2 | String name; 3 | String resolution; 4 | String md5; 5 | 6 | OssUploadModel({ 7 | required this.name, 8 | required this.resolution, 9 | required this.md5, 10 | }); 11 | 12 | factory OssUploadModel.fromJson(Map json) { 13 | return OssUploadModel( 14 | name: json['name'] as String, 15 | resolution: json['resolution'] as String, 16 | md5: json['md5'] as String, 17 | ); 18 | } 19 | 20 | Map toJson() { 21 | return { 22 | 'name': name, 23 | 'resolution': resolution, 24 | 'md5': md5, 25 | }; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/logic/model/oss_upload/oss_upload_response.dart: -------------------------------------------------------------------------------- 1 | import 'datum.dart'; 2 | 3 | class OssUploadResponse { 4 | String? message; 5 | OssDatum? data; 6 | 7 | OssUploadResponse({ 8 | this.message, 9 | this.data, 10 | }); 11 | 12 | factory OssUploadResponse.fromJson(Map json) { 13 | return OssUploadResponse( 14 | message: json['message'] as String?, 15 | data: json['data'] == null 16 | ? null 17 | : OssDatum.fromJson(json['data'] as Map), 18 | ); 19 | } 20 | 21 | Map toJson() { 22 | return { 23 | 'message': message, 24 | 'data': data, 25 | }; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/logic/model/oss_upload/upload_prepare_info.dart: -------------------------------------------------------------------------------- 1 | class UploadPrepareInfo { 2 | String? accessKeySecret; 3 | String? accessKeyId; 4 | String? securityToken; 5 | String? expiration; 6 | String? uploadImagePrefix; 7 | String? endPoint; 8 | String? bucket; 9 | String? callbackUrl; 10 | 11 | UploadPrepareInfo({ 12 | this.accessKeySecret, 13 | this.accessKeyId, 14 | this.securityToken, 15 | this.expiration, 16 | this.uploadImagePrefix, 17 | this.endPoint, 18 | this.bucket, 19 | this.callbackUrl, 20 | }); 21 | 22 | factory UploadPrepareInfo.fromJson(Map json) { 23 | return UploadPrepareInfo( 24 | accessKeySecret: json['accessKeySecret'] as String?, 25 | accessKeyId: json['accessKeyId'] as String?, 26 | securityToken: json['securityToken'] as String?, 27 | expiration: json['expiration'] as String?, 28 | uploadImagePrefix: json['uploadImagePrefix'] as String?, 29 | endPoint: json['endPoint'] as String?, 30 | bucket: json['bucket'] as String?, 31 | callbackUrl: json['callbackUrl'] as String?, 32 | ); 33 | } 34 | 35 | Map toJson() { 36 | return { 37 | 'accessKeySecret': accessKeySecret, 38 | 'accessKeyId': accessKeyId, 39 | 'securityToken': securityToken, 40 | 'expiration': expiration, 41 | 'uploadImagePrefix': uploadImagePrefix, 42 | 'endPoint': endPoint, 43 | 'bucket': bucket, 44 | 'callbackUrl': callbackUrl, 45 | }; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/logic/network/request.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:dio/dio.dart'; 3 | 4 | import '../../logic/network/interceptor.dart'; 5 | 6 | class Request { 7 | static final Request _instance = Request._internal(); 8 | static late final Dio dio; 9 | factory Request() => _instance; 10 | 11 | Request._internal() { 12 | dio = Dio() 13 | ..options.connectTimeout = const Duration(milliseconds: 5000) 14 | ..options.receiveTimeout = const Duration(milliseconds: 5000) 15 | ..interceptors.add(ApiInterceptor()); 16 | } 17 | 18 | Future> get( 19 | url, { 20 | Map? queryParameters, 21 | Options? options, 22 | CancelToken? cancelToken, 23 | extra, 24 | }) async { 25 | return await dio.get( 26 | url, 27 | queryParameters: queryParameters, 28 | options: options, 29 | cancelToken: cancelToken, 30 | ); 31 | } 32 | 33 | Future> post( 34 | url, { 35 | Object? data, 36 | Map? queryParameters, 37 | Options? options, 38 | CancelToken? cancelToken, 39 | extra, 40 | }) async { 41 | return await dio.post( 42 | url, 43 | data: data, 44 | queryParameters: queryParameters, 45 | options: options, 46 | cancelToken: cancelToken, 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/logic/state/loading_state.dart: -------------------------------------------------------------------------------- 1 | abstract class LoadingState { 2 | const LoadingState(); 3 | 4 | factory LoadingState.loading() = Loading; 5 | factory LoadingState.empty() = Empty; 6 | factory LoadingState.success(T response) = Success; 7 | factory LoadingState.error(String errMsg) = Error; 8 | } 9 | 10 | class Loading extends LoadingState { 11 | const Loading(); 12 | } 13 | 14 | class Empty extends LoadingState { 15 | const Empty(); 16 | } 17 | 18 | class Success extends LoadingState { 19 | final T response; 20 | const Success(this.response); 21 | } 22 | 23 | class Error extends LoadingState { 24 | final String errMsg; 25 | const Error(this.errMsg); 26 | } 27 | -------------------------------------------------------------------------------- /lib/pages/app/app_content_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../logic/network/network_repo.dart'; 2 | import '../../logic/state/loading_state.dart'; 3 | import '../../pages/app/app_page.dart' show AppType; 4 | import '../../pages/common/common_controller.dart'; 5 | 6 | class AppContentController extends CommonController { 7 | AppContentController({ 8 | required this.appType, 9 | required this.packageName, 10 | required this.url, 11 | required this.title, 12 | }); 13 | 14 | final AppType appType; 15 | final String packageName; 16 | final String url; 17 | final String title; 18 | 19 | @override 20 | Future customGetData() { 21 | return NetworkRepo.getDataList( 22 | url: url, 23 | title: title, 24 | subTitle: '', 25 | firstItem: firstItem, 26 | lastItem: lastItem, 27 | page: page, 28 | ); 29 | } 30 | 31 | @override 32 | void onInit() { 33 | super.onInit(); 34 | onGetData(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/pages/blacklist/black_list_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; 2 | import 'package:get/get.dart'; 3 | import 'package:hive/hive.dart'; 4 | 5 | import '../../pages/blacklist/black_list_page.dart' show BlackListType; 6 | import '../../utils/extensions.dart'; 7 | import '../../utils/storage_util.dart'; 8 | 9 | class BlackListController extends GetxController { 10 | BlackListController({required this.type}); 11 | final BlackListType type; 12 | 13 | late final String key = type == BlackListType.user 14 | ? BlackListBoxKey.userBlackList 15 | : BlackListBoxKey.topicBlackList; 16 | late final Box blackList = GStorage.blackList; 17 | RxList dataList = [].obs; 18 | 19 | @override 20 | void onInit() { 21 | super.onInit(); 22 | _getData(); 23 | } 24 | 25 | Future _getData() async { 26 | dataList.value = blackList.get(key, defaultValue: []); 27 | } 28 | 29 | void handleData(String value, [bool isDelete = false]) { 30 | if (!isDelete && dataList.contains(value)) { 31 | SmartDialog.showToast('已存在'); 32 | return; 33 | } 34 | if (isDelete) { 35 | dataList.value = dataList.where((data) => data != value).toList(); 36 | } else { 37 | dataList.value = [value] + dataList; 38 | } 39 | blackList.put(key, dataList); 40 | } 41 | 42 | void clearAll() { 43 | dataList.value = []; 44 | blackList.put(key, []); 45 | } 46 | 47 | Future onImport(List dataList) async { 48 | List filterList = (dataList + this.dataList).unique(); 49 | this.dataList.value = filterList; 50 | await blackList.put(key, filterList); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/pages/carousel/carousel_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:get/get.dart'; 2 | 3 | import '../../logic/model/feed/datum.dart'; 4 | import '../../logic/network/network_repo.dart'; 5 | import '../../logic/state/loading_state.dart'; 6 | import '../../pages/common/common_controller.dart'; 7 | 8 | class CarouselController extends CommonController { 9 | CarouselController({ 10 | required this.isInit, 11 | required this.url, 12 | required this.title, 13 | }); 14 | final bool isInit; 15 | final String url; 16 | final String title; 17 | 18 | RxInt tabSize = 0.obs; 19 | Datum? iconTabLinkGridCard; 20 | String? pageTitle; 21 | bool _isChecked = false; 22 | 23 | @override 24 | List? handleResponse(List dataList) { 25 | if (isInit && !_isChecked) { 26 | _isChecked = true; 27 | iconTabLinkGridCard = dataList.firstWhereOrNull( 28 | (item) => item.entityTemplate == 'iconTabLinkGridCard'); 29 | if (iconTabLinkGridCard != null) { 30 | tabSize.value = iconTabLinkGridCard!.entities!.length; 31 | } 32 | pageTitle = dataList.lastOrNull?.extraDataArr?.pageTitle; 33 | } 34 | return null; 35 | } 36 | 37 | @override 38 | Future customGetData() { 39 | return NetworkRepo.getDataList( 40 | url: url, 41 | title: title, 42 | subTitle: '', 43 | firstItem: firstItem, 44 | lastItem: lastItem, 45 | page: page, 46 | inCluldeConfigCard: isInit, 47 | ); 48 | } 49 | 50 | @override 51 | void onInit() { 52 | super.onInit(); 53 | onGetData(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/pages/coolpic/coolpic_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../logic/network/network_repo.dart'; 2 | import '../../logic/state/loading_state.dart'; 3 | import '../../pages/common/common_controller.dart'; 4 | 5 | class CoolpicController extends CommonController { 6 | CoolpicController({ 7 | required this.type, 8 | required this.title, 9 | }); 10 | 11 | final String type; 12 | final String title; 13 | 14 | @override 15 | Future customGetData() { 16 | return NetworkRepo.getCoolPic( 17 | tag: title, 18 | type: type, 19 | page: page, 20 | firstItem: firstItem, 21 | lastItem: lastItem, 22 | ); 23 | } 24 | 25 | @override 26 | void onInit() { 27 | super.onInit(); 28 | onGetData(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/pages/dyh/dyh_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../logic/network/network_repo.dart'; 2 | import '../../logic/state/loading_state.dart'; 3 | import '../../pages/common/common_controller.dart'; 4 | 5 | class DyhController extends CommonController { 6 | DyhController({ 7 | required this.type, 8 | required this.id, 9 | }); 10 | 11 | final String type; 12 | final String id; 13 | 14 | @override 15 | Future customGetData() { 16 | return NetworkRepo.getDyhDetail( 17 | dyhId: id, 18 | type: type, 19 | page: page, 20 | firstItem: firstItem, 21 | lastItem: lastItem, 22 | ); 23 | } 24 | 25 | @override 26 | void onInit() { 27 | super.onInit(); 28 | onGetData(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/pages/feed/reply/emoji_panel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../utils/emoji_util.dart'; 4 | 5 | class EmotePanel extends StatelessWidget { 6 | const EmotePanel({ 7 | super.key, 8 | required this.index, 9 | required this.onClick, 10 | }); 11 | final int index; 12 | final Function(String emoji) onClick; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return GridView.count( 17 | padding: const EdgeInsets.only(left: 10, right: 10), 18 | mainAxisSpacing: 10, 19 | crossAxisSpacing: 10, 20 | crossAxisCount: 7, 21 | childAspectRatio: 1.0, 22 | children: (EmojiUtil.emojiMap.keys.toList()..removeRange(0, 4)) 23 | .map( 24 | (emoji) => Material( 25 | color: Colors.transparent, 26 | child: InkWell( 27 | onTap: () => onClick(emoji), 28 | borderRadius: BorderRadius.circular(8), 29 | child: Padding( 30 | padding: const EdgeInsets.all(8), 31 | child: 32 | Image.asset('assets/emojis/${EmojiUtil.emojiMap[emoji]}'), 33 | ), 34 | ), 35 | ), 36 | ) 37 | .toList(), 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/pages/feed/reply/toolbar_icon_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ToolbarIconButton extends StatelessWidget { 4 | final VoidCallback onPressed; 5 | final Icon icon; 6 | final bool selected; 7 | 8 | const ToolbarIconButton({ 9 | super.key, 10 | required this.onPressed, 11 | required this.icon, 12 | required this.selected, 13 | }); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return SizedBox( 18 | width: 36, 19 | height: 36, 20 | child: IconButton( 21 | onPressed: onPressed, 22 | icon: icon, 23 | highlightColor: Theme.of(context).colorScheme.secondaryContainer, 24 | color: selected 25 | ? Theme.of(context).colorScheme.onSecondaryContainer 26 | : Theme.of(context).colorScheme.outline, 27 | style: ButtonStyle( 28 | padding: WidgetStateProperty.all(EdgeInsets.zero), 29 | backgroundColor: WidgetStateProperty.resolveWith((states) { 30 | return selected 31 | ? Theme.of(context).colorScheme.secondaryContainer 32 | : null; 33 | }), 34 | ), 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/pages/feed/reply2reply/reply_2_reply_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../../logic/model/feed/datum.dart'; 2 | import '../../../logic/network/network_repo.dart'; 3 | import '../../../logic/state/loading_state.dart'; 4 | import '../../../pages/common/common_controller.dart'; 5 | 6 | class Reply2ReplyController extends CommonController { 7 | Reply2ReplyController({ 8 | required this.originReply, 9 | required this.id, 10 | }); 11 | 12 | final Datum originReply; 13 | final String id; 14 | 15 | @override 16 | LoadingState? handleExtraResponse() { 17 | if (page == 1) { 18 | footerState.value = LoadingState.empty(); 19 | return LoadingState.success([originReply]); 20 | } 21 | return null; 22 | } 23 | 24 | @override 25 | List? handleResponse(List dataList) { 26 | return page == 1 ? [originReply] + dataList : null; 27 | } 28 | 29 | @override 30 | Future customGetData() { 31 | return NetworkRepo.getReply2Reply( 32 | id: id, 33 | page: page, 34 | firstItem: firstItem, 35 | lastItem: lastItem, 36 | ); 37 | } 38 | 39 | @override 40 | void onInit() { 41 | super.onInit(); 42 | onGetData(); 43 | } 44 | 45 | void updateReply(Datum data, dynamic id) { 46 | List replyList = loadingState.value is Success 47 | ? (loadingState.value as Success).response 48 | : []; 49 | int index = replyList.indexWhere((reply) => reply.id == id); 50 | replyList.insert(index + 1, data); 51 | loadingState.value = LoadingState.success(replyList); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/pages/ffflist/ffflist_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../logic/model/feed/datum.dart'; 2 | import '../../logic/network/network_repo.dart'; 3 | import '../../logic/state/loading_state.dart'; 4 | import '../../pages/common/common_controller.dart'; 5 | import '../../pages/ffflist/ffflist_page.dart' show FFFListType; 6 | 7 | class FFFListController extends CommonController { 8 | FFFListController({ 9 | required this.type, 10 | required this.url, 11 | this.uid, 12 | this.id, 13 | this.showDefault, 14 | }); 15 | 16 | final FFFListType type; 17 | final String url; 18 | final String? uid; 19 | final String? id; 20 | final int? showDefault; 21 | 22 | @override 23 | Future customGetData() { 24 | return NetworkRepo.getDataListFromUrl( 25 | url: url, 26 | data: { 27 | if (uid != null) 'uid': uid, 28 | if (id != null) 'id': id, 29 | if (showDefault != null) 'showDefault': showDefault, 30 | 'page': page, 31 | if (firstItem != null) 'firstItem': firstItem, 32 | if (lastItem != null) 'lastItem': lastItem, 33 | }, 34 | ); 35 | } 36 | 37 | @override 38 | void onInit() { 39 | super.onInit(); 40 | onGetData(); 41 | } 42 | 43 | @override 44 | List? handleUnique(List dataList) { 45 | return [FFFListType.FOLLOW, FFFListType.FAN, FFFListType.USER_FOLLOW] 46 | .contains(type) 47 | ? null 48 | : super.handleUnique(dataList); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/pages/home/app/app_list_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | import 'package:get/get.dart'; 3 | 4 | import '../../../logic/model/app_info/app_info.dart'; 5 | 6 | class AppListController extends GetxController with StateMixin> { 7 | static const platform = MethodChannel('samples.flutter.dev/channel'); 8 | 9 | Future onReload([bool isRefresh = false]) async { 10 | if (!isRefresh) { 11 | change(null, status: RxStatus.loading()); 12 | } 13 | await _getInstalledApps(); 14 | } 15 | 16 | Future _getInstalledApps() async { 17 | try { 18 | List installedApps = 19 | await platform.invokeMethod('getInstalledApps'); 20 | List parseList = AppInfo.parseList(installedApps); 21 | if (parseList.isNotEmpty) { 22 | change(parseList, status: RxStatus.success()); 23 | } else { 24 | change(null, status: RxStatus.empty()); 25 | } 26 | } on PlatformException catch (e) { 27 | change(null, status: RxStatus.error(e.message)); 28 | return; 29 | } 30 | } 31 | 32 | @override 33 | void onInit() async { 34 | super.onInit(); 35 | await Future.delayed(const Duration(milliseconds: 500)); 36 | _getInstalledApps(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/pages/home/feed/home_feed_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../../logic/network/network_repo.dart'; 2 | import '../../../logic/state/loading_state.dart'; 3 | import '../../../pages/common/common_controller.dart'; 4 | import '../../../pages/home/home_page.dart' show TabType; 5 | import '../../../utils/storage_util.dart'; 6 | import '../../../utils/utils.dart'; 7 | 8 | class HomeFeedController extends CommonController { 9 | HomeFeedController({ 10 | required this.tabType, 11 | required this.installTime, 12 | this.url, 13 | this.title, 14 | this.followType, 15 | }); 16 | 17 | final TabType tabType; 18 | final String installTime; 19 | int firstLaunch = 1; 20 | String? url; 21 | String? title; 22 | int? followType; 23 | 24 | @override 25 | void onReset() { 26 | super.onReset(); 27 | if (tabType == TabType.FOLLOW) { 28 | int followType = GStorage.followType; 29 | if (this.followType != followType) { 30 | this.followType = followType; 31 | url = Utils.getFollowUrl(followType); 32 | title = Utils.getFollowTitle(followType); 33 | } 34 | } 35 | } 36 | 37 | @override 38 | Future customGetData() { 39 | return tabType == TabType.FEED 40 | ? NetworkRepo.getHomeFeed( 41 | page: page, 42 | firstLaunch: firstLaunch, 43 | installTime: installTime, 44 | firstItem: firstItem, 45 | lastItem: lastItem, 46 | ) 47 | : NetworkRepo.getDataList( 48 | url: url!, 49 | title: title!, 50 | subTitle: '', 51 | firstItem: firstItem, 52 | lastItem: lastItem, 53 | page: page, 54 | ); 55 | } 56 | 57 | @override 58 | void onInit() { 59 | super.onInit(); 60 | onGetData(); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /lib/pages/home/return_top_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:get/get.dart'; 2 | 3 | class ReturnTopController extends GetxController { 4 | RxInt index = 999.obs; 5 | 6 | void setIndex(int index) { 7 | this.index.value = index; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/pages/home/topic/controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:get/get.dart'; 2 | 3 | import '../../../logic/network/network_repo.dart'; 4 | import '../../../logic/model/feed/datum.dart'; 5 | import '../../../logic/state/loading_state.dart'; 6 | import '../../../pages/home/home_page.dart' show TabType; 7 | 8 | class HomeTopicController extends GetxController with StateMixin> { 9 | HomeTopicController({ 10 | required this.tabType, 11 | }); 12 | final TabType tabType; 13 | 14 | late RxInt currentIndex = (tabType == TabType.TOPIC ? 1 : 0).obs; 15 | 16 | void onReload() { 17 | change(null, status: RxStatus.loading()); 18 | getData(); 19 | } 20 | 21 | Future getData() async { 22 | LoadingState response = await NetworkRepo.getDataListFromUrl( 23 | url: tabType == TabType.TOPIC 24 | ? '/v6/page/dataList?url=V11_VERTICAL_TOPIC&title=话题&page=1' 25 | : '/v6/product/categoryList'); 26 | switch (response) { 27 | case Empty(): 28 | change(null, status: RxStatus.empty()); 29 | case Error(): 30 | change(null, status: RxStatus.error(response.errMsg)); 31 | case Success(): 32 | change(response.response, status: RxStatus.success()); 33 | } 34 | } 35 | 36 | @override 37 | void onInit() { 38 | super.onInit(); 39 | getData(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/pages/noitfication/notification_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../logic/model/feed/datum.dart'; 2 | import '../../logic/network/network_repo.dart'; 3 | import '../../logic/state/loading_state.dart'; 4 | import '../../pages/common/common_controller.dart'; 5 | 6 | class NotificationController extends CommonController { 7 | NotificationController({ 8 | required this.url, 9 | }); 10 | 11 | final String url; 12 | 13 | @override 14 | List? handleUnique(List dataList) { 15 | return null; 16 | } 17 | 18 | @override 19 | Future customGetData() { 20 | return NetworkRepo.getDataListFromUrl( 21 | url: url, 22 | data: { 23 | 'page': page, 24 | if (firstItem != null) 'firstItem': firstItem, 25 | if (lastItem != null) 'lastItem': lastItem, 26 | }, 27 | ); 28 | } 29 | 30 | @override 31 | void onInit() { 32 | super.onInit(); 33 | onGetData(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/pages/others/copy_page.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:get/get.dart'; 5 | 6 | import '../../utils/extensions.dart'; 7 | import '../../utils/utils.dart'; 8 | 9 | extension StringExtensions on String { 10 | String get getAllLinkAndText { 11 | if (isEmpty) return ''; 12 | final regExp = 13 | RegExp(r']*>'); 14 | return replaceAllMapped(regExp, (match) => ' ${match.group(1)} '); 15 | } 16 | } 17 | 18 | class CopyPage extends StatelessWidget { 19 | const CopyPage({super.key}); 20 | 21 | @override 22 | Widget build(BuildContext context) { 23 | final String text = Get.parameters['text'].orEmpty; 24 | return Container( 25 | color: Theme.of(context).colorScheme.surface, 26 | child: SafeArea( 27 | child: Stack( 28 | children: [ 29 | if (!Platform.isAndroid && !Platform.isIOS) const BackButton(), 30 | Container( 31 | alignment: Alignment.center, 32 | padding: const EdgeInsets.symmetric(horizontal: 20), 33 | child: SelectableText( 34 | scrollPhysics: const BouncingScrollPhysics(), 35 | Utils.parseHtmlString( 36 | '\n$text\n'.getAllLinkAndText.replaceAll("\n", "
")), 37 | style: const TextStyle( 38 | fontSize: 22, 39 | height: 1.5, 40 | ), 41 | ), 42 | ), 43 | ], 44 | ), 45 | ), 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/pages/search/search_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../logic/network/network_repo.dart'; 2 | import '../../logic/state/loading_state.dart'; 3 | import '../../pages/common/common_controller.dart'; 4 | 5 | class SearchController extends CommonController { 6 | SearchController({ 7 | required this.type, 8 | required this.keyword, 9 | required this.pageType, 10 | required this.pageParam, 11 | }); 12 | 13 | final String type; 14 | String feedType = 'all'; 15 | String sort = 'default'; 16 | final String keyword; 17 | int isStrict = 0; 18 | final String? pageType; 19 | final String? pageParam; 20 | 21 | @override 22 | Future customGetData() { 23 | return NetworkRepo.getSearch( 24 | type: type, 25 | feedType: feedType, 26 | sort: sort, 27 | searchValue: keyword, 28 | isStrict: isStrict, 29 | pageType: pageType, 30 | pageParam: pageParam, 31 | page: page, 32 | firstItem: firstItem, 33 | lastItem: lastItem, 34 | ); 35 | } 36 | 37 | @override 38 | void onInit() { 39 | super.onInit(); 40 | onGetData(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/pages/search/search_order_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:get/get.dart'; 2 | 3 | import '../../pages/search/search_result_page.dart' 4 | show SearchType, SearchSortType; 5 | 6 | class SearchOrderController extends GetxController { 7 | Rx searchType = SearchType.ALL.obs; 8 | Rx searchSortType = SearchSortType.DATELINE.obs; 9 | 10 | void setSearchType(SearchType searchType) { 11 | this.searchType.value = searchType; 12 | } 13 | 14 | void setSearchSortType(SearchSortType searchSortType) { 15 | this.searchSortType.value = searchSortType; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/pages/search/search_page_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:get/get.dart'; 2 | import 'package:hive/hive.dart'; 3 | 4 | import '../../utils/storage_util.dart'; 5 | 6 | class SearchPageController extends GetxController { 7 | Box searchHistory = GStorage.searchHistory; 8 | RxList historyList = [].obs; 9 | 10 | @override 11 | void onInit() { 12 | super.onInit(); 13 | _getData(); 14 | } 15 | 16 | Future _getData() async { 17 | historyList.value = searchHistory.get('searchHistory') ?? []; 18 | } 19 | 20 | void handleSearch(String value, [bool isDelete = false]) { 21 | List list = historyList.where((data) => data != value).toList(); 22 | if (!isDelete) { 23 | list.insert(0, value); 24 | } 25 | historyList.value = list; 26 | searchHistory.put('searchHistory', list); 27 | } 28 | 29 | void clearAll() { 30 | historyList.value = []; 31 | searchHistory.put('searchHistory', []); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/pages/topic/topic_content_controller.dart: -------------------------------------------------------------------------------- 1 | import '../../logic/network/network_repo.dart'; 2 | import '../../logic/state/loading_state.dart'; 3 | import '../../pages/common/common_controller.dart'; 4 | 5 | class TopicContentController extends CommonController { 6 | TopicContentController({ 7 | required this.url, 8 | required this.title, 9 | }); 10 | 11 | late String url; 12 | late String title; 13 | 14 | @override 15 | Future customGetData() { 16 | return NetworkRepo.getDataList( 17 | url: url, 18 | title: title, 19 | subTitle: '', 20 | firstItem: firstItem, 21 | lastItem: lastItem, 22 | page: page, 23 | ); 24 | } 25 | 26 | @override 27 | void onInit() { 28 | super.onInit(); 29 | onGetData(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/pages/topic/topic_order_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:get/get.dart'; 2 | 3 | import '../../pages/topic/topic_page.dart' show TopicSortType; 4 | 5 | class TopicOrderController extends GetxController { 6 | Rx topicSortType = TopicSortType.DEFAULT.obs; 7 | 8 | void setTopicSortType(TopicSortType topicSortType) { 9 | this.topicSortType.value = topicSortType; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/utils/date_util.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: constant_identifier_names 2 | 3 | import 'package:intl/intl.dart'; 4 | 5 | class DateUtil { 6 | static const int ONE_MINUTE = 60; 7 | static const int ONE_HOUR = 3600; 8 | static const int ONE_DAY = 86400; 9 | static const int ONE_MONTH = 2592000; 10 | static const int ONE_YEAR = 31104000; 11 | 12 | static String fromToday(dynamic rawTime) { 13 | if (rawTime == null) { 14 | return ''; 15 | } 16 | 17 | int time = rawTime is int ? rawTime : int.parse(rawTime); 18 | 19 | final int now = DateTime.now().millisecondsSinceEpoch ~/ 1000; 20 | final int ago = now - time; 21 | 22 | if (ago == 0) { 23 | return "刚刚"; 24 | } else if (ago < 60) { 25 | return "$ago秒前"; 26 | } else if (ago <= ONE_HOUR) { 27 | return "${ago ~/ ONE_MINUTE}分钟前"; 28 | } else if (ago <= ONE_DAY) { 29 | return "${ago ~/ ONE_HOUR}小时前"; 30 | } else if (ago <= ONE_DAY * 2) { 31 | return "1天前"; 32 | } else if (ago <= ONE_DAY * 3) { 33 | return "2天前"; 34 | } else if (ago <= ONE_MONTH) { 35 | final int day = ago ~/ ONE_DAY; 36 | return "$day天前"; 37 | } else { 38 | final date = DateTime.fromMillisecondsSinceEpoch(time * 1000); 39 | final DateFormat sdf = date.year == DateTime.now().year 40 | ? DateFormat('MM月dd日') 41 | : DateFormat('yyyy年MM月dd日'); 42 | return sdf.format(date); 43 | } 44 | } 45 | 46 | static String format(int time, {String pattern = 'yyyy-MM-dd_HH.mm.ss'}) { 47 | final date = DateTime.fromMillisecondsSinceEpoch(time); 48 | final DateFormat sdf = DateFormat(pattern); 49 | return sdf.format(date); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /lib/utils/global_data.dart: -------------------------------------------------------------------------------- 1 | class GlobalData { 2 | // 私有构造函数 3 | GlobalData._(); 4 | 5 | // 单例实例 6 | static final GlobalData _instance = GlobalData._(); 7 | 8 | // 获取全局实例 9 | factory GlobalData() => _instance; 10 | 11 | // ignore: non_constant_identifier_names 12 | String SESSID = ''; 13 | bool isLogin = false; 14 | String uid = ''; 15 | String username = ''; 16 | String token = ''; 17 | } 18 | -------------------------------------------------------------------------------- /lib/utils/oss/aliyunoss_config.dart: -------------------------------------------------------------------------------- 1 | /// 上传配置信息AliyunOssInfo 2 | /// 3 | /// bucket: 阿里云Bucket,鉴权后获取相应的值 4 | /// endpoint: 阿里云Endpoint,鉴权后获取相应的值 5 | /// accessKeyId: 阿里云AccessKeyId,鉴权后获取相应的值 6 | /// accessKeySecret 阿里云AccessKeySecret,鉴权后获取相应的值 7 | /// securityToken 阿里云SecurityToken,鉴权后获取相应的值 8 | /// domain: 访问文件时的域名。如果不填写默认为 https://$bucket.$endpoint 9 | /// directory: 上传文件的目录,如果不填写默认为根目录 10 | /// objectPath: 阿里云服务器文件路径 domain(https://$bucket.$endpoint) + directory + ossFileName 11 | /// contentType: 文件类型. 常见的有: image/png image/jpeg audio/mp3 video/mp4 阿里云支持的上传文件类型 https://help.aliyun.com/document_detail/39522.html 12 | class AliyunOssConfig { 13 | late String bucket; 14 | late String endpoint; 15 | late String directory; 16 | String? domain; 17 | 18 | AliyunOssConfig({ 19 | required String? endpoint, 20 | required String? bucket, 21 | required String? directory, 22 | String? domain, 23 | }) { 24 | assert(endpoint != null && bucket != null && directory != null); 25 | 26 | String ossEndpoint = endpoint?.replaceFirst("https://", "") ?? ""; 27 | ossEndpoint = ossEndpoint.replaceFirst("http://", ""); 28 | this.endpoint = ossEndpoint; 29 | this.bucket = bucket ?? ""; 30 | this.domain = domain ?? "https://$bucket.$ossEndpoint"; 31 | this.directory = directory ?? ""; 32 | } 33 | } 34 | 35 | enum AliyunOssResultState { none, success, fail, uploading } 36 | 37 | class AliyunOssResult { 38 | String id; 39 | AliyunOssResultState state; 40 | String? url; 41 | String? msg; 42 | int? count; 43 | int? total; 44 | AliyunOssResult({ 45 | required this.id, 46 | this.state = AliyunOssResultState.none, 47 | this.url, 48 | this.msg, 49 | this.count, 50 | this.total, 51 | }); 52 | @override 53 | String toString() { 54 | return 'AliyunOssResult{id: $id, state: $state, url: $url, msg: $msg, count: $count, total: $total}'; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /lib/utils/oss/aliyunoss_http.dart: -------------------------------------------------------------------------------- 1 | 2 | class AliyunOssHttp { 3 | static int connectTimeout = 5000; 4 | static int receiveTimeout = 1000 * 60 ; 5 | static int sendTimeout = 1000 * 60 * 5; 6 | } -------------------------------------------------------------------------------- /lib/utils/oss_util.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; 5 | 6 | import '../logic/model/oss_upload/datum.dart'; 7 | import '../logic/model/oss_upload/oss_upload_model.dart'; 8 | import '../logic/model/oss_upload/oss_upload_response.dart'; 9 | import '../logic/network/network_repo.dart'; 10 | import '../utils/extensions.dart'; 11 | 12 | class OssUtil { 13 | static Future onPostOSSUploadPrepare( 14 | String uploadBucket, 15 | String uploadDir, 16 | List dataList, { 17 | String? uid, 18 | }) async { 19 | try { 20 | SmartDialog.showLoading(msg: '准备上传图片'); 21 | Response response = await NetworkRepo.postOSSUploadPrepare( 22 | data: FormData.fromMap( 23 | { 24 | 'uploadBucket': uploadBucket, 25 | 'uploadDir': uploadDir, 26 | 'is_anonymous': '0', 27 | 'uploadFileList': dataList 28 | .map((data) => jsonEncode(data.toJson())) 29 | .toList() 30 | .toString(), 31 | 'toUid': uid, 32 | }, 33 | ), 34 | ); 35 | OssUploadResponse data = OssUploadResponse.fromJson(response.data); 36 | if (!data.message.isNullOrEmpty) { 37 | SmartDialog.dismiss(); 38 | SmartDialog.showToast(data.message!); 39 | return null; 40 | } else if (data.data != null) { 41 | // SmartDialog.dismiss(); 42 | return data.data!; 43 | } 44 | return null; 45 | } catch (e) { 46 | SmartDialog.dismiss(); 47 | SmartDialog.showToast(e.toString()); 48 | return null; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | void fl_register_plugins(FlPluginRegistry* registry) { 16 | g_autoptr(FlPluginRegistrar) dynamic_color_registrar = 17 | fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin"); 18 | dynamic_color_plugin_register_with_registrar(dynamic_color_registrar); 19 | g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = 20 | fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); 21 | file_selector_plugin_register_with_registrar(file_selector_linux_registrar); 22 | g_autoptr(FlPluginRegistrar) screen_retriever_registrar = 23 | fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin"); 24 | screen_retriever_plugin_register_with_registrar(screen_retriever_registrar); 25 | g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = 26 | fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); 27 | url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); 28 | g_autoptr(FlPluginRegistrar) window_manager_registrar = 29 | fl_plugin_registry_get_registrar_for_plugin(registry, "WindowManagerPlugin"); 30 | window_manager_plugin_register_with_registrar(window_manager_registrar); 31 | } 32 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | dynamic_color 7 | file_selector_linux 8 | screen_retriever 9 | url_launcher_linux 10 | window_manager 11 | ) 12 | 13 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 14 | ) 15 | 16 | set(PLUGIN_BUNDLED_LIBRARIES) 17 | 18 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 19 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 20 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 21 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 22 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 23 | endforeach(plugin) 24 | 25 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 26 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 27 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 28 | endforeach(ffi_plugin) 29 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import connectivity_plus 9 | import device_info_plus 10 | import dynamic_color 11 | import file_selector_macos 12 | import flutter_inappwebview_macos 13 | import package_info_plus 14 | import path_provider_foundation 15 | import screen_retriever 16 | import share_plus 17 | import shared_preferences_foundation 18 | import sqflite 19 | import url_launcher_macos 20 | import window_manager 21 | 22 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 23 | ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) 24 | DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) 25 | DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) 26 | FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) 27 | InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin")) 28 | FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) 29 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 30 | ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) 31 | SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) 32 | SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) 33 | SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) 34 | UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) 35 | WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin")) 36 | } 37 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @main 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info": { 3 | "version": 1, 4 | "author": "xcode" 5 | }, 6 | "images": [ 7 | { 8 | "size": "16x16", 9 | "idiom": "mac", 10 | "filename": "app_icon_16.png", 11 | "scale": "1x" 12 | }, 13 | { 14 | "size": "16x16", 15 | "idiom": "mac", 16 | "filename": "app_icon_32.png", 17 | "scale": "2x" 18 | }, 19 | { 20 | "size": "32x32", 21 | "idiom": "mac", 22 | "filename": "app_icon_32.png", 23 | "scale": "1x" 24 | }, 25 | { 26 | "size": "32x32", 27 | "idiom": "mac", 28 | "filename": "app_icon_64.png", 29 | "scale": "2x" 30 | }, 31 | { 32 | "size": "128x128", 33 | "idiom": "mac", 34 | "filename": "app_icon_128.png", 35 | "scale": "1x" 36 | }, 37 | { 38 | "size": "128x128", 39 | "idiom": "mac", 40 | "filename": "app_icon_256.png", 41 | "scale": "2x" 42 | }, 43 | { 44 | "size": "256x256", 45 | "idiom": "mac", 46 | "filename": "app_icon_256.png", 47 | "scale": "1x" 48 | }, 49 | { 50 | "size": "256x256", 51 | "idiom": "mac", 52 | "filename": "app_icon_512.png", 53 | "scale": "2x" 54 | }, 55 | { 56 | "size": "512x512", 57 | "idiom": "mac", 58 | "filename": "app_icon_512.png", 59 | "scale": "1x" 60 | }, 61 | { 62 | "size": "512x512", 63 | "idiom": "mac", 64 | "filename": "app_icon_1024.png", 65 | "scale": "2x" 66 | } 67 | ] 68 | } -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /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 = c001apk-flutter 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.c001apk.flutter 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2024 bggRGjQaUbCoE All rights reserved. 15 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 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 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "c001apk-flutter", 3 | "short_name": "c001apk-flutter", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /web/splash/img/dark-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/dark-1x.png -------------------------------------------------------------------------------- /web/splash/img/dark-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/dark-2x.png -------------------------------------------------------------------------------- /web/splash/img/dark-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/dark-3x.png -------------------------------------------------------------------------------- /web/splash/img/dark-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/dark-4x.png -------------------------------------------------------------------------------- /web/splash/img/light-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/light-1x.png -------------------------------------------------------------------------------- /web/splash/img/light-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/light-2x.png -------------------------------------------------------------------------------- /web/splash/img/light-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/light-3x.png -------------------------------------------------------------------------------- /web/splash/img/light-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/web/splash/img/light-4x.png -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /windows/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | void RegisterPlugins(flutter::PluginRegistry* registry) { 19 | ConnectivityPlusWindowsPluginRegisterWithRegistrar( 20 | registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); 21 | DynamicColorPluginCApiRegisterWithRegistrar( 22 | registry->GetRegistrarForPlugin("DynamicColorPluginCApi")); 23 | FileSelectorWindowsRegisterWithRegistrar( 24 | registry->GetRegistrarForPlugin("FileSelectorWindows")); 25 | PermissionHandlerWindowsPluginRegisterWithRegistrar( 26 | registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); 27 | ScreenRetrieverPluginRegisterWithRegistrar( 28 | registry->GetRegistrarForPlugin("ScreenRetrieverPlugin")); 29 | SharePlusWindowsPluginCApiRegisterWithRegistrar( 30 | registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); 31 | UrlLauncherWindowsRegisterWithRegistrar( 32 | registry->GetRegistrarForPlugin("UrlLauncherWindows")); 33 | WindowManagerPluginRegisterWithRegistrar( 34 | registry->GetRegistrarForPlugin("WindowManagerPlugin")); 35 | } 36 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | connectivity_plus 7 | dynamic_color 8 | file_selector_windows 9 | permission_handler_windows 10 | screen_retriever 11 | share_plus 12 | url_launcher_windows 13 | window_manager 14 | ) 15 | 16 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 17 | ) 18 | 19 | set(PLUGIN_BUNDLED_LIBRARIES) 20 | 21 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 22 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 23 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 24 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 25 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 26 | endforeach(plugin) 27 | 28 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 29 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 30 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 31 | endforeach(ffi_plugin) 32 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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"c001apk-flutter", 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bggRGjQaUbCoE/c001apk-flutter/72f4cf2494db6c8834c4136de70109bc95ed9374/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------