├── .firebaserc ├── .github └── workflows │ ├── dart.yml │ └── main.yml ├── .gitignore ├── .metadata ├── .vscode ├── launch.json └── settings.json ├── CONTRIBUTING.md ├── README.md ├── SUMMARY.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ ├── google-services.json │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── tlsa │ │ │ │ └── dtok │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── ic_launcher-web.png │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-ldpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── playstore-icon.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── ic_launcher_background.xml │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── 3191632562495_.pic_hd.jpg ├── Dtok.ai ├── app.gif ├── appbackground.png ├── applogo.png ├── bg.jpg ├── bg.png ├── dance │ ├── dance_1.jpg │ ├── dance_2.jpg │ ├── dance_3.jpg │ ├── dance_4.jpg │ ├── dance_5.jpg │ └── dance_6.jpg ├── dtok-assets │ └── dtok.png ├── dtok.png ├── dtok.psd ├── dtok.svg ├── dtok_1.jpg ├── dtok_1.png ├── dtok_2.svg ├── dtok_3.svg ├── dtok_bg.svg ├── dtok_ios.png ├── facebook.png ├── fonts │ ├── Poppins │ │ ├── Poppins-Bold.ttf │ │ ├── Poppins-Medium.ttf │ │ └── Poppins-Regular.ttf │ └── TikTokIcons.ttf ├── food │ ├── food_1.png │ ├── food_2.png │ ├── food_3.png │ ├── food_4.png │ ├── food_5.png │ └── food_6.png ├── google.png ├── hive.png ├── icon.png ├── icons │ ├── Drcorona.svg │ ├── Intersection.svg │ ├── apple.svg │ ├── at.svg │ ├── chat.svg │ ├── close.png │ ├── copylink.svg │ ├── coronadr.svg │ ├── dropdown.svg │ ├── email.svg │ ├── emoji.svg │ ├── facebook.png │ ├── facebook.svg │ ├── forward.svg │ ├── google-plus.svg │ ├── google.png │ ├── help.svg │ ├── instagram.png │ ├── kakaotalk_circle.svg │ ├── liked.svg │ ├── line.png │ ├── line.svg │ ├── live.svg │ ├── login.svg │ ├── map.svg │ ├── maps-and-flags.svg │ ├── menu.svg │ ├── pause.webp │ ├── person.png │ ├── person_holder.png │ ├── qq_circle.webp │ ├── report.svg │ ├── search.webp │ ├── send.svg │ ├── service.png │ ├── setting.png │ ├── setting_about.png │ ├── setting_common.png │ ├── setting_delete.png │ ├── setting_exchange.png │ ├── setting_feedback.png │ ├── setting_logout.png │ ├── shape_small.svg │ ├── share_action_bizhi.webp │ ├── share_action_code.webp │ ├── share_action_copy_url.webp │ ├── share_action_dislike.webp │ ├── share_action_download.webp │ ├── share_action_fav.webp │ ├── share_action_hepai.webp │ ├── share_action_jubao.webp │ ├── share_action_tohot.webp │ ├── share_app_duoshan.webp │ ├── share_app_qq.webp │ ├── share_app_qq_zone.webp │ ├── share_app_sixin.webp │ ├── share_app_toutiao.webp │ ├── share_app_weibo.webp │ ├── share_app_wx.webp │ ├── share_app_wx_zone.webp │ ├── share_app_zhuanfa.webp │ ├── share_button.webp │ ├── shoot_daojishi.webp │ ├── shoot_fanzhuan.webp │ ├── shoot_filter.webp │ ├── shoot_flash.webp │ ├── shoot_meihua.webp │ ├── shoot_v_off.webp │ ├── shoot_v_on.webp │ ├── shop.png │ ├── signup.svg │ ├── tiktok_code.webp │ ├── twitter.png │ ├── twitter.svg │ ├── unlike.svg │ ├── user.png │ ├── user_service.png │ ├── wallet.png │ ├── weibo_circle.webp │ ├── whatsapp.svg │ ├── wx_circle.webp │ └── zhifubao_circle.webp ├── images │ ├── int_1581491273221.png │ ├── login_bottom.png │ ├── main_bottom.png │ ├── main_top.png │ └── signup_top.png ├── insta.png ├── laugh │ ├── laugh_1.jpg │ ├── laugh_2.jpg │ ├── laugh_3.jpg │ ├── laugh_4.jpg │ ├── laugh_5.jpg │ └── laugh_6.jpg ├── oboy.jpg ├── ronaldo.png ├── slider │ ├── slider_1.jpg │ ├── slider_2.jpg │ └── slider_3.jpg ├── spook.png ├── user.json └── user_profile │ ├── user_1.jpg │ ├── user_2.jpg │ ├── user_3.jpg │ ├── user_4.jpg │ ├── user_5.jpg │ ├── user_6.jpg │ ├── user_7.jpg │ └── user_8.jpg ├── build.yaml ├── database.rules.json ├── firebase.json ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── 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 │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── GoogleService-Info.plist │ ├── Info.plist │ └── Runner-Bridging-Header.h └── firebase_app_id_file.json ├── l10n.yaml ├── lib ├── Routes │ └── route_generator.dart ├── Screens │ ├── comment │ │ ├── comment_tree.dart │ │ ├── data │ │ │ └── comment.dart │ │ └── widgets │ │ │ ├── comment_child_widget.dart │ │ │ ├── comment_tree_widget.dart │ │ │ ├── root_comment_widget.dart │ │ │ └── tree_theme_data.dart │ ├── common │ │ ├── custom_dialog_box.dart │ │ └── custom_tip_dialog_box.dart │ ├── downloads.dart │ ├── feed.dart │ ├── home copy.dart │ ├── home │ │ ├── home.dart │ │ ├── home_bottom_navigation_footer.dart │ │ ├── home_bottom_video_comment.dart │ │ ├── home_bottom_video_share.dart │ │ ├── home_suggested_accounts.dart │ │ ├── home_video_slider.dart │ │ └── videoplayer.dart │ ├── loading │ │ └── loading.dart │ ├── login │ │ ├── auth.dart │ │ ├── hiveaccount.dart │ │ ├── login.dart │ │ ├── opt.dart │ │ └── phone_or_email.dart │ ├── login_copy.dart │ ├── news.dart │ ├── notifications_messages │ │ ├── chat.dart │ │ ├── messages.dart │ │ ├── notification_list.dart │ │ └── notifications.dart │ ├── onboarding │ │ ├── categories.dart │ │ ├── hivedetails.dart │ │ └── languageselection.dart │ ├── profile.dart │ ├── profile │ │ ├── creator_profile.dart │ │ ├── edit_profile.dart │ │ ├── profile.dart │ │ ├── profile_setting.dart │ │ ├── profile_tab_item.dart │ │ └── term_of_use.dart │ ├── record_video │ │ ├── post.dart │ │ └── record_video.dart │ ├── search.dart │ ├── search │ │ ├── challenge_item.dart │ │ ├── dance_item.dart │ │ ├── food_item.dart │ │ ├── laugh_item.dart │ │ ├── music_item.dart │ │ ├── search.dart │ │ └── user_item.dart │ ├── searchProvider.dart │ ├── settings │ │ ├── security │ │ │ └── theme.dart │ │ └── settings.dart │ ├── signup │ │ ├── otp.dart │ │ ├── register.dart │ │ └── signup.dart │ ├── sortFilterPreference.dart │ ├── splashScreen.dart │ ├── subscription.dart │ ├── trending.dart │ ├── video.dart │ ├── videolist.dart │ └── wallet │ │ └── wallet.dart ├── accounts │ ├── exceptions.dart │ ├── openid.dart │ ├── player.dart │ ├── steam_login.dart │ └── steam_login_example.dart ├── api │ ├── api.dart │ ├── category.dart │ ├── http_manager.dart │ ├── http_method.dart │ ├── impl │ │ ├── category.dart │ │ ├── post.dart │ │ ├── relationship.dart │ │ ├── reply.dart │ │ ├── steem.dart │ │ ├── tag.dart │ │ ├── user.dart │ │ └── vote.dart │ ├── post.dart │ ├── relationship.dart │ ├── reply.dart │ ├── steem.dart │ ├── tag.dart │ ├── user.dart │ └── vote.dart ├── appBehaviour │ └── my_behaviour.dart ├── blocs │ ├── ipfs │ │ ├── ipfs_bloc.dart │ │ ├── ipfs_event.dart │ │ └── ipfs_state.dart │ └── theme │ │ ├── theme_bloc.dart │ │ ├── theme_event.dart │ │ └── theme_state.dart ├── common │ ├── icons.dart │ ├── sizeconfig.dart │ └── utils.dart ├── components │ └── core.dart ├── config │ └── api.dart ├── constants.dart ├── firebase_options.dart ├── http │ ├── base │ │ ├── base_controller.dart │ │ ├── base_domain.dart │ │ └── http_error.dart │ ├── http_constant.dart │ ├── interceptors │ │ ├── header_interceptor.dart │ │ └── log_interceptor.dart │ ├── request │ │ └── request_method.dart │ ├── response │ │ ├── result.dart │ │ └── result_code.dart │ └── util.dart ├── ipfs │ └── ipfs.dart ├── l10n │ ├── app_de.arb │ ├── app_en.arb │ ├── app_es.arb │ ├── app_fr.arb │ ├── app_it.arb │ ├── app_lo.arb │ ├── app_uk.arb │ └── app_zh.arb ├── lib │ ├── Routes │ │ └── route_generator.dart │ ├── Screens │ │ ├── comment │ │ │ ├── comment_tree.dart │ │ │ ├── data │ │ │ │ └── comment.dart │ │ │ └── widgets │ │ │ │ ├── comment_child_widget.dart │ │ │ │ ├── comment_tree_widget.dart │ │ │ │ ├── root_comment_widget.dart │ │ │ │ └── tree_theme_data.dart │ │ ├── common │ │ │ ├── custom_dialog_box.dart │ │ │ └── custom_tip_dialog_box.dart │ │ ├── downloads.dart │ │ ├── feed.dart │ │ ├── home copy.dart │ │ ├── home │ │ │ ├── home.dart │ │ │ ├── home_bottom_navigation_footer.dart │ │ │ ├── home_bottom_video_comment.dart │ │ │ ├── home_bottom_video_share.dart │ │ │ ├── home_suggested_accounts.dart │ │ │ ├── home_video_slider.dart │ │ │ └── videoplayer.dart │ │ ├── loading │ │ │ └── loading.dart │ │ ├── login │ │ │ ├── auth.dart │ │ │ ├── hiveaccount.dart │ │ │ ├── login.dart │ │ │ ├── opt.dart │ │ │ └── phone_or_email.dart │ │ ├── login_copy.dart │ │ ├── news.dart │ │ ├── notifications_messages │ │ │ ├── chat.dart │ │ │ ├── messages.dart │ │ │ ├── notification_list.dart │ │ │ └── notifications.dart │ │ ├── onboarding │ │ │ ├── categories.dart │ │ │ ├── hivedetails.dart │ │ │ └── languageselection.dart │ │ ├── profile.dart │ │ ├── profile │ │ │ ├── creator_profile.dart │ │ │ ├── edit_profile.dart │ │ │ ├── profile.dart │ │ │ ├── profile_setting.dart │ │ │ ├── profile_tab_item.dart │ │ │ └── term_of_use.dart │ │ ├── record_video │ │ │ ├── post.dart │ │ │ └── record_video.dart │ │ ├── search.dart │ │ ├── search │ │ │ ├── challenge_item.dart │ │ │ ├── dance_item.dart │ │ │ ├── food_item.dart │ │ │ ├── laugh_item.dart │ │ │ ├── music_item.dart │ │ │ ├── search.dart │ │ │ └── user_item.dart │ │ ├── searchProvider.dart │ │ ├── settings │ │ │ ├── security │ │ │ │ └── theme.dart │ │ │ └── settings.dart │ │ ├── signup │ │ │ ├── otp.dart │ │ │ ├── register.dart │ │ │ └── signup.dart │ │ ├── sortFilterPreference.dart │ │ ├── splashScreen.dart │ │ ├── subscription.dart │ │ ├── trending.dart │ │ ├── video.dart │ │ ├── videolist.dart │ │ └── wallet │ │ │ └── wallet.dart │ ├── accounts │ │ ├── exceptions.dart │ │ ├── openid.dart │ │ ├── player.dart │ │ ├── steam_login.dart │ │ └── steam_login_example.dart │ ├── api │ │ ├── api.dart │ │ ├── category.dart │ │ ├── http_manager.dart │ │ ├── http_method.dart │ │ ├── impl │ │ │ ├── category.dart │ │ │ ├── post.dart │ │ │ ├── relationship.dart │ │ │ ├── reply.dart │ │ │ ├── steem.dart │ │ │ ├── tag.dart │ │ │ ├── user.dart │ │ │ └── vote.dart │ │ ├── post.dart │ │ ├── relationship.dart │ │ ├── reply.dart │ │ ├── steem.dart │ │ ├── tag.dart │ │ ├── user.dart │ │ └── vote.dart │ ├── appBehaviour │ │ └── my_behaviour.dart │ ├── blocs │ │ ├── ipfs │ │ │ ├── ipfs_bloc.dart │ │ │ ├── ipfs_event.dart │ │ │ └── ipfs_state.dart │ │ └── theme │ │ │ ├── theme_bloc.dart │ │ │ ├── theme_event.dart │ │ │ └── theme_state.dart │ ├── common │ │ ├── icons.dart │ │ ├── sizeconfig.dart │ │ └── utils.dart │ ├── components │ │ └── core.dart │ ├── config │ │ └── api.dart │ ├── constants.dart │ ├── http │ │ ├── base │ │ │ ├── base_controller.dart │ │ │ ├── base_domain.dart │ │ │ └── http_error.dart │ │ ├── http_constant.dart │ │ ├── interceptors │ │ │ ├── header_interceptor.dart │ │ │ └── log_interceptor.dart │ │ ├── request │ │ │ └── request_method.dart │ │ ├── response │ │ │ ├── result.dart │ │ │ └── result_code.dart │ │ └── util.dart │ ├── ipfs │ │ └── ipfs.dart │ ├── l10n │ │ ├── app_de.arb │ │ ├── app_en.arb │ │ ├── app_es.arb │ │ ├── app_fr.arb │ │ ├── app_it.arb │ │ ├── app_lo.arb │ │ ├── app_uk.arb │ │ └── app_zh.arb │ ├── main.dart │ ├── models │ │ ├── Episode.dart │ │ ├── HiveData.dart │ │ ├── Tiktok.dart │ │ ├── category.dart │ │ ├── dto │ │ │ ├── comment │ │ │ │ ├── comment_item_digg_dto.dart │ │ │ │ ├── comment_item_list_dto.dart │ │ │ │ └── comment_list_reply_dto.dart │ │ │ ├── core │ │ │ │ └── base_dto.dart │ │ │ ├── discover │ │ │ │ ├── banner_dto.dart │ │ │ │ ├── discover_challenge_dto.dart │ │ │ │ ├── discover_music_dto.dart │ │ │ │ └── discover_user_dto.dart │ │ │ ├── forgetpwd │ │ │ │ └── forgetpwd_dto.dart │ │ │ ├── message │ │ │ │ ├── notification_dto.dart │ │ │ │ └── notification_make_read_dto.dart │ │ │ ├── recommend │ │ │ │ └── itemlist_dto.dart │ │ │ ├── signin │ │ │ │ └── signin_dto.dart │ │ │ └── signup │ │ │ │ └── signup_dto.dart │ │ ├── impl_models.dart │ │ ├── impl_models.g.dart │ │ ├── message.dart │ │ ├── user.dart │ │ ├── user.g.dart │ │ ├── videolist.dart │ │ └── vo │ │ │ ├── comment │ │ │ ├── comment_item_digg_vo.dart │ │ │ ├── comment_item_list_vo.dart │ │ │ ├── comment_list_reply_vo.dart │ │ │ └── json.dart │ │ │ ├── discover │ │ │ ├── banner_vo.dart │ │ │ ├── discover_challenage_vo.dart │ │ │ ├── discover_music_vo.dart │ │ │ └── discover_user_vo.dart │ │ │ ├── message │ │ │ ├── notification_make_read_vo.dart │ │ │ └── notification_vo.dart │ │ │ ├── recommend │ │ │ └── itemlist_vo.dart │ │ │ ├── signin │ │ │ └── signin_vo.dart │ │ │ ├── signup │ │ │ └── signup.dart │ │ │ ├── user │ │ │ └── user_login.dart │ │ │ └── video │ │ │ └── DTok.dart │ ├── services │ │ ├── endpoints.dart │ │ ├── firestore_service.dart │ │ ├── fluttersteem.dart │ │ ├── interceptor.dart │ │ ├── launchurl.dart │ │ ├── requestor.dart │ │ └── scopes.dart │ ├── tabs │ │ ├── addTab.dart │ │ ├── chatTab.dart │ │ ├── homeTab.dart │ │ ├── profileTab.dart │ │ └── searchTab.dart │ ├── utils │ │ └── ipfs.dart │ └── widgets │ │ ├── Marquee.dart │ │ ├── actions_toolbar copy.dart │ │ ├── actions_toolbar.dart │ │ ├── bottom_toolbar.dart │ │ ├── player copy.txt │ │ ├── player.dart │ │ ├── rate.dart │ │ └── video_description.dart ├── main.dart ├── models │ ├── Episode.dart │ ├── HiveData.dart │ ├── Tiktok.dart │ ├── category.dart │ ├── dto │ │ ├── comment │ │ │ ├── comment_item_digg_dto.dart │ │ │ ├── comment_item_list_dto.dart │ │ │ └── comment_list_reply_dto.dart │ │ ├── core │ │ │ └── base_dto.dart │ │ ├── discover │ │ │ ├── banner_dto.dart │ │ │ ├── discover_challenge_dto.dart │ │ │ ├── discover_music_dto.dart │ │ │ └── discover_user_dto.dart │ │ ├── forgetpwd │ │ │ └── forgetpwd_dto.dart │ │ ├── message │ │ │ ├── notification_dto.dart │ │ │ └── notification_make_read_dto.dart │ │ ├── recommend │ │ │ └── itemlist_dto.dart │ │ ├── signin │ │ │ ├── captcha_image_dto.dart │ │ │ └── signin_dto.dart │ │ └── signup │ │ │ └── signup_dto.dart │ ├── impl_models.dart │ ├── impl_models.g.dart │ ├── message.dart │ ├── user.dart │ ├── user.g.dart │ ├── videolist.dart │ └── vo │ │ ├── comment │ │ ├── comment_item_digg_vo.dart │ │ ├── comment_item_list_vo.dart │ │ ├── comment_list_reply_vo.dart │ │ └── json.dart │ │ ├── discover │ │ ├── banner_vo.dart │ │ ├── discover_challenage_vo.dart │ │ ├── discover_music_vo.dart │ │ └── discover_user_vo.dart │ │ ├── message │ │ ├── notification_make_read_vo.dart │ │ └── notification_vo.dart │ │ ├── recommend │ │ └── itemlist_vo.dart │ │ ├── signin │ │ ├── captcha_image_vo.dart │ │ └── signin_vo.dart │ │ ├── signup │ │ └── signup.dart │ │ ├── user │ │ └── user_login.dart │ │ └── video │ │ └── DTok.dart ├── services │ ├── endpoints.dart │ ├── firestore_service.dart │ ├── fluttersteem.dart │ ├── interceptor.dart │ ├── launchurl.dart │ ├── requestor.dart │ └── scopes.dart ├── tabs │ ├── addTab.dart │ ├── chatTab.dart │ ├── homeTab.dart │ ├── profileTab.dart │ └── searchTab.dart ├── utils │ └── ipfs.dart └── widgets │ ├── Marquee.dart │ ├── actions_toolbar copy.dart │ ├── actions_toolbar.dart │ ├── bottom_toolbar.dart │ ├── player copy.txt │ ├── player.dart │ ├── rate.dart │ └── video_description.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 ├── Podfile ├── 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 │ ├── GoogleService-Info.plist │ ├── Info.plist │ ├── MainFlutterWindow.swift │ └── Release.entitlements └── firebase_app_id_file.json ├── pubspec.yaml ├── readme_cn.md ├── storage.rules ├── test └── widget_test.dart ├── web ├── favicon.png ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── index.html └── manifest.json └── 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 /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "dtok-438fb" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/workflows/dart.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. 2 | # They are provided by a third-party and are governed by 3 | # separate terms of service, privacy policy, and support 4 | # documentation. 5 | 6 | name: Dart 7 | 8 | on: 9 | push: 10 | branches: [ "master" ] 11 | pull_request: 12 | branches: [ "master" ] 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | 21 | # Note: This workflow uses the latest stable version of the Dart SDK. 22 | # You can specify other versions if desired, see documentation here: 23 | # https://github.com/dart-lang/setup-dart/blob/main/README.md 24 | # - uses: dart-lang/setup-dart@v1 25 | - uses: dart-lang/setup-dart@9a04e6d73cca37bd455e0608d7e5092f881fd603 26 | 27 | - name: Install dependencies 28 | run: dart pub get 29 | 30 | # Uncomment this step to verify the use of 'dart format' on each commit. 31 | # - name: Verify formatting 32 | # run: dart format --output=none --set-exit-if-changed . 33 | 34 | # Consider passing '--fatal-infos' for slightly stricter analysis. 35 | - name: Analyze project source 36 | run: dart analyze 37 | 38 | # Your project will need to have tests in test/ and a dependency on 39 | # package:test for this step to succeed. Note that Flutter projects will 40 | # want to change this to 'flutter test'. 41 | - name: Run tests 42 | run: dart test 43 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Dart Mobile App", 9 | "request": "launch", 10 | "type": "dart", 11 | "flutterMode": "debug", 12 | }] 13 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "java.configuration.updateBuildConfiguration": "interactive" 3 | } -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | 3 | * [Telsa Video](README.md) 4 | 5 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/tlsa/dtok/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.tlsa.dtok 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/ic_launcher-web.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/playstore-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/android/app/src/main/res/playstore-icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.1' 10 | // START: FlutterFire Configuration 11 | classpath 'com.google.gms:google-services:4.3.10' 12 | // END: FlutterFire Configuration 13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | google() 20 | mavenCentral() 21 | } 22 | } 23 | 24 | rootProject.buildDir = '../build' 25 | subprojects { 26 | project.buildDir = "${rootProject.buildDir}/${project.name}" 27 | } 28 | subprojects { 29 | project.evaluationDependsOn(':app') 30 | } 31 | 32 | tasks.register("clean", Delete) { 33 | delete rootProject.buildDir 34 | } 35 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | org.gradle.java.home=/Users/cw/.sdkman/candidates/java/11.0.21-amzn 5 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /assets/3191632562495_.pic_hd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/3191632562495_.pic_hd.jpg -------------------------------------------------------------------------------- /assets/Dtok.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/Dtok.ai -------------------------------------------------------------------------------- /assets/app.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/app.gif -------------------------------------------------------------------------------- /assets/appbackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/appbackground.png -------------------------------------------------------------------------------- /assets/applogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/applogo.png -------------------------------------------------------------------------------- /assets/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/bg.jpg -------------------------------------------------------------------------------- /assets/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/bg.png -------------------------------------------------------------------------------- /assets/dance/dance_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dance/dance_1.jpg -------------------------------------------------------------------------------- /assets/dance/dance_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dance/dance_2.jpg -------------------------------------------------------------------------------- /assets/dance/dance_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dance/dance_3.jpg -------------------------------------------------------------------------------- /assets/dance/dance_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dance/dance_4.jpg -------------------------------------------------------------------------------- /assets/dance/dance_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dance/dance_5.jpg -------------------------------------------------------------------------------- /assets/dance/dance_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dance/dance_6.jpg -------------------------------------------------------------------------------- /assets/dtok-assets/dtok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dtok-assets/dtok.png -------------------------------------------------------------------------------- /assets/dtok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dtok.png -------------------------------------------------------------------------------- /assets/dtok.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dtok.psd -------------------------------------------------------------------------------- /assets/dtok_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dtok_1.jpg -------------------------------------------------------------------------------- /assets/dtok_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dtok_1.png -------------------------------------------------------------------------------- /assets/dtok_ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/dtok_ios.png -------------------------------------------------------------------------------- /assets/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/facebook.png -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/fonts/Poppins/Poppins-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/fonts/Poppins/Poppins-Medium.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/fonts/Poppins/Poppins-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/TikTokIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/fonts/TikTokIcons.ttf -------------------------------------------------------------------------------- /assets/food/food_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/food/food_1.png -------------------------------------------------------------------------------- /assets/food/food_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/food/food_2.png -------------------------------------------------------------------------------- /assets/food/food_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/food/food_3.png -------------------------------------------------------------------------------- /assets/food/food_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/food/food_4.png -------------------------------------------------------------------------------- /assets/food/food_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/food/food_5.png -------------------------------------------------------------------------------- /assets/food/food_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/food/food_6.png -------------------------------------------------------------------------------- /assets/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/google.png -------------------------------------------------------------------------------- /assets/hive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/hive.png -------------------------------------------------------------------------------- /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icon.png -------------------------------------------------------------------------------- /assets/icons/Intersection.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/apple.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/at.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/close.png -------------------------------------------------------------------------------- /assets/icons/dropdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/emoji.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/facebook.png -------------------------------------------------------------------------------- /assets/icons/facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/google-plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /assets/icons/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/google.png -------------------------------------------------------------------------------- /assets/icons/help.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /assets/icons/instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/instagram.png -------------------------------------------------------------------------------- /assets/icons/liked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/line.png -------------------------------------------------------------------------------- /assets/icons/live.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/pause.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/pause.webp -------------------------------------------------------------------------------- /assets/icons/person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/person.png -------------------------------------------------------------------------------- /assets/icons/person_holder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/person_holder.png -------------------------------------------------------------------------------- /assets/icons/qq_circle.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/qq_circle.webp -------------------------------------------------------------------------------- /assets/icons/report.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/search.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/search.webp -------------------------------------------------------------------------------- /assets/icons/send.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/service.png -------------------------------------------------------------------------------- /assets/icons/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/setting.png -------------------------------------------------------------------------------- /assets/icons/setting_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/setting_about.png -------------------------------------------------------------------------------- /assets/icons/setting_common.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/setting_common.png -------------------------------------------------------------------------------- /assets/icons/setting_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/setting_delete.png -------------------------------------------------------------------------------- /assets/icons/setting_exchange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/setting_exchange.png -------------------------------------------------------------------------------- /assets/icons/setting_feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/setting_feedback.png -------------------------------------------------------------------------------- /assets/icons/setting_logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/setting_logout.png -------------------------------------------------------------------------------- /assets/icons/shape_small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/share_action_bizhi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_bizhi.webp -------------------------------------------------------------------------------- /assets/icons/share_action_code.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_code.webp -------------------------------------------------------------------------------- /assets/icons/share_action_copy_url.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_copy_url.webp -------------------------------------------------------------------------------- /assets/icons/share_action_dislike.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_dislike.webp -------------------------------------------------------------------------------- /assets/icons/share_action_download.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_download.webp -------------------------------------------------------------------------------- /assets/icons/share_action_fav.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_fav.webp -------------------------------------------------------------------------------- /assets/icons/share_action_hepai.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_hepai.webp -------------------------------------------------------------------------------- /assets/icons/share_action_jubao.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_jubao.webp -------------------------------------------------------------------------------- /assets/icons/share_action_tohot.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_action_tohot.webp -------------------------------------------------------------------------------- /assets/icons/share_app_duoshan.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_duoshan.webp -------------------------------------------------------------------------------- /assets/icons/share_app_qq.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_qq.webp -------------------------------------------------------------------------------- /assets/icons/share_app_qq_zone.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_qq_zone.webp -------------------------------------------------------------------------------- /assets/icons/share_app_sixin.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_sixin.webp -------------------------------------------------------------------------------- /assets/icons/share_app_toutiao.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_toutiao.webp -------------------------------------------------------------------------------- /assets/icons/share_app_weibo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_weibo.webp -------------------------------------------------------------------------------- /assets/icons/share_app_wx.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_wx.webp -------------------------------------------------------------------------------- /assets/icons/share_app_wx_zone.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_wx_zone.webp -------------------------------------------------------------------------------- /assets/icons/share_app_zhuanfa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_app_zhuanfa.webp -------------------------------------------------------------------------------- /assets/icons/share_button.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/share_button.webp -------------------------------------------------------------------------------- /assets/icons/shoot_daojishi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shoot_daojishi.webp -------------------------------------------------------------------------------- /assets/icons/shoot_fanzhuan.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shoot_fanzhuan.webp -------------------------------------------------------------------------------- /assets/icons/shoot_filter.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shoot_filter.webp -------------------------------------------------------------------------------- /assets/icons/shoot_flash.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shoot_flash.webp -------------------------------------------------------------------------------- /assets/icons/shoot_meihua.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shoot_meihua.webp -------------------------------------------------------------------------------- /assets/icons/shoot_v_off.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shoot_v_off.webp -------------------------------------------------------------------------------- /assets/icons/shoot_v_on.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shoot_v_on.webp -------------------------------------------------------------------------------- /assets/icons/shop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/shop.png -------------------------------------------------------------------------------- /assets/icons/tiktok_code.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/tiktok_code.webp -------------------------------------------------------------------------------- /assets/icons/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/twitter.png -------------------------------------------------------------------------------- /assets/icons/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icons/unlike.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/user.png -------------------------------------------------------------------------------- /assets/icons/user_service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/user_service.png -------------------------------------------------------------------------------- /assets/icons/wallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/wallet.png -------------------------------------------------------------------------------- /assets/icons/weibo_circle.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/weibo_circle.webp -------------------------------------------------------------------------------- /assets/icons/wx_circle.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/wx_circle.webp -------------------------------------------------------------------------------- /assets/icons/zhifubao_circle.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/icons/zhifubao_circle.webp -------------------------------------------------------------------------------- /assets/images/int_1581491273221.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/images/int_1581491273221.png -------------------------------------------------------------------------------- /assets/images/login_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/images/login_bottom.png -------------------------------------------------------------------------------- /assets/images/main_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/images/main_bottom.png -------------------------------------------------------------------------------- /assets/images/main_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/images/main_top.png -------------------------------------------------------------------------------- /assets/images/signup_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/images/signup_top.png -------------------------------------------------------------------------------- /assets/insta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/insta.png -------------------------------------------------------------------------------- /assets/laugh/laugh_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/laugh/laugh_1.jpg -------------------------------------------------------------------------------- /assets/laugh/laugh_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/laugh/laugh_2.jpg -------------------------------------------------------------------------------- /assets/laugh/laugh_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/laugh/laugh_3.jpg -------------------------------------------------------------------------------- /assets/laugh/laugh_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/laugh/laugh_4.jpg -------------------------------------------------------------------------------- /assets/laugh/laugh_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/laugh/laugh_5.jpg -------------------------------------------------------------------------------- /assets/laugh/laugh_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/laugh/laugh_6.jpg -------------------------------------------------------------------------------- /assets/oboy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/oboy.jpg -------------------------------------------------------------------------------- /assets/ronaldo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/ronaldo.png -------------------------------------------------------------------------------- /assets/slider/slider_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/slider/slider_1.jpg -------------------------------------------------------------------------------- /assets/slider/slider_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/slider/slider_2.jpg -------------------------------------------------------------------------------- /assets/slider/slider_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/slider/slider_3.jpg -------------------------------------------------------------------------------- /assets/spook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/spook.png -------------------------------------------------------------------------------- /assets/user_profile/user_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_1.jpg -------------------------------------------------------------------------------- /assets/user_profile/user_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_2.jpg -------------------------------------------------------------------------------- /assets/user_profile/user_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_3.jpg -------------------------------------------------------------------------------- /assets/user_profile/user_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_4.jpg -------------------------------------------------------------------------------- /assets/user_profile/user_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_5.jpg -------------------------------------------------------------------------------- /assets/user_profile/user_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_6.jpg -------------------------------------------------------------------------------- /assets/user_profile/user_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_7.jpg -------------------------------------------------------------------------------- /assets/user_profile/user_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/assets/user_profile/user_8.jpg -------------------------------------------------------------------------------- /build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | builders: 4 | json_serializable: 5 | options: 6 | # Options configure how source code is generated for every 7 | # `@JsonSerializable`-annotated class in the package. 8 | # 9 | # The default value for each is listed. 10 | any_map: false 11 | checked: false 12 | create_factory: true 13 | create_to_json: true 14 | disallow_unrecognized_keys: false 15 | explicit_to_json: false 16 | field_rename: none 17 | generic_argument_factories: false 18 | ignore_unannotated: false 19 | include_if_null: true -------------------------------------------------------------------------------- /database.rules.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | ".read": "now < 1628006400000", // 2021-8-4 4 | ".write": "now < 1628006400000", // 2021-8-4 5 | } 6 | } -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "rules": "database.rules.json" 4 | }, 5 | "storage": { 6 | "rules": "storage.rules" 7 | }, 8 | "emulators": { 9 | "singleProjectMode": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /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 UIKit 2 | import Flutter 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 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CLIENT_ID 6 | 165025931859-bedkdidcimqn8lbtgpt8nqfl6v6alv5i.apps.googleusercontent.com 7 | REVERSED_CLIENT_ID 8 | com.googleusercontent.apps.165025931859-bedkdidcimqn8lbtgpt8nqfl6v6alv5i 9 | ANDROID_CLIENT_ID 10 | 165025931859-l8npthdrgheseevn8furv4igl25patc3.apps.googleusercontent.com 11 | API_KEY 12 | AIzaSyAwQ2kWYjWYN0WYcyE_kECTawz6fFwuDG8 13 | GCM_SENDER_ID 14 | 165025931859 15 | PLIST_VERSION 16 | 1 17 | BUNDLE_ID 18 | com.tlsa.dtok 19 | PROJECT_ID 20 | dtok-438fb 21 | STORAGE_BUCKET 22 | dtok-438fb.appspot.com 23 | IS_ADS_ENABLED 24 | 25 | IS_ANALYTICS_ENABLED 26 | 27 | IS_APPINVITE_ENABLED 28 | 29 | IS_GCM_ENABLED 30 | 31 | IS_SIGNIN_ENABLED 32 | 33 | GOOGLE_APP_ID 34 | 1:165025931859:ios:d58af5d1f3be01de885ca6 35 | DATABASE_URL 36 | https://dtok-438fb-default-rtdb.firebaseio.com 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /ios/firebase_app_id_file.json: -------------------------------------------------------------------------------- 1 | { 2 | "file_generated_by": "FlutterFire CLI", 3 | "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", 4 | "GOOGLE_APP_ID": "1:165025931859:ios:d58af5d1f3be01de885ca6", 5 | "FIREBASE_PROJECT_ID": "dtok-438fb", 6 | "GCM_SENDER_ID": "165025931859" 7 | } -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | #add intil 2 | arb-dir: lib/l10n 3 | template-arb-file: app_en.arb 4 | output-localization-file: app_localizations.dart 5 | -------------------------------------------------------------------------------- /lib/Routes/route_generator.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:telsavideo/screens/login/hiveaccount.dart'; 3 | import 'package:telsavideo/screens/home/home.dart'; 4 | import 'package:telsavideo/screens/login/login.dart'; 5 | import 'package:telsavideo/screens/profile/profile.dart'; 6 | 7 | class RouteGenerator { 8 | static Route generateRoute(RouteSettings settings) { 9 | final args = settings.arguments; 10 | switch (settings.name) { 11 | case '/': 12 | return MaterialPageRoute(builder: (_) => Home()); 13 | case '/login': 14 | if (args is String) {} 15 | return MaterialPageRoute(builder: (_) => Login()); 16 | case '/search': 17 | return MaterialPageRoute(builder: (_) => Profile()); 18 | case '/live': 19 | return MaterialPageRoute(builder: (_) => Container()); 20 | case '/profile': 21 | return MaterialPageRoute(builder: (_) => Profile()); 22 | case '/hive': 23 | return MaterialPageRoute(builder: (_) => HiveAccount()); 24 | default: 25 | return _errorRoute(); 26 | } 27 | } 28 | 29 | static Route _errorRoute() { 30 | return MaterialPageRoute(builder: (_) { 31 | return Scaffold( 32 | appBar: AppBar( 33 | title: Text('Oops! something went wrong!'), 34 | ), 35 | body: Center( 36 | child: Text('App Error'), 37 | ), 38 | ); 39 | }); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/Screens/comment/comment_tree.dart: -------------------------------------------------------------------------------- 1 | library comment_tree; 2 | 3 | export './data/comment.dart'; 4 | export './widgets/comment_child_widget.dart'; 5 | export './widgets/comment_tree_widget.dart'; 6 | export './widgets/root_comment_widget.dart'; 7 | export './widgets/tree_theme_data.dart'; 8 | 9 | /// A Calculator. 10 | class Calculator { 11 | /// Returns [value] plus 1. 12 | int addOne(int value) => value + 1; 13 | } 14 | -------------------------------------------------------------------------------- /lib/Screens/comment/data/comment.dart: -------------------------------------------------------------------------------- 1 | class Comment { 2 | // ignore: constant_identifier_names 3 | static const TAG = 'Comment'; 4 | 5 | String? avatar; 6 | String? userName; 7 | String? content; 8 | int? createTime; 9 | int? diggCount; 10 | bool? hasChild = false; 11 | 12 | Comment( 13 | {required this.avatar, 14 | required this.userName, 15 | required this.content, 16 | this.createTime, 17 | this.diggCount, 18 | this.hasChild}); 19 | } 20 | -------------------------------------------------------------------------------- /lib/Screens/comment/widgets/tree_theme_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TreeThemeData { 4 | // ignore: constant_identifier_names 5 | static const TAG = 'TreeThemeData'; 6 | 7 | final Color lineColor; 8 | final double lineWidth; 9 | 10 | const TreeThemeData({this.lineColor = Colors.grey, this.lineWidth = 2}); 11 | } 12 | -------------------------------------------------------------------------------- /lib/Screens/common/custom_tip_dialog_box.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_local_notifications/flutter_local_notifications.dart'; 5 | 6 | class CustomTipDialogBox extends StatefulWidget { 7 | @override 8 | State createState() { 9 | // TODO: implement createState 10 | throw UnimplementedError(); 11 | } 12 | } 13 | 14 | class _CustomTipDialogBoxState extends State { 15 | TimeOfDay? time; 16 | 17 | @override 18 | void initState() { 19 | // TODO: implement initState 20 | super.initState(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | // TODO: implement build 26 | return Container(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/Screens/loading/loading.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:getwidget/components/loader/gf_loader.dart'; 3 | import 'package:getwidget/types/gf_loader_type.dart'; 4 | 5 | // the loading widget 6 | //common widget 7 | Widget get loading => Container( 8 | color: Colors.black, 9 | child: Center( 10 | child: GFLoader( 11 | type: GFLoaderType.circle, 12 | loaderColorOne: Colors.blueAccent, 13 | loaderColorTwo: Colors.white, 14 | loaderColorThree: Colors.pink, 15 | ), 16 | ), 17 | ); 18 | 19 | // the small loading 20 | Widget get sloading => Container( 21 | width: 48, 22 | height: 48, 23 | color: Colors.black, 24 | child: Center( 25 | child: GFLoader( 26 | type: GFLoaderType.circle, 27 | loaderColorOne: Colors.blueAccent, 28 | //loaderColorTwo: Colors.white, 29 | loaderColorThree: Colors.pink, 30 | ), 31 | ), 32 | ); 33 | 34 | // the error widget 35 | Widget get empty => Container( 36 | width: 48, 37 | height: 48, 38 | color: Colors.black, 39 | child: Center(child: Text('Error,Please restart your app again.')), 40 | ); 41 | -------------------------------------------------------------------------------- /lib/Screens/login/opt.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import 'package:telsavideo/appBehaviour/my_behaviour.dart'; 4 | import 'package:telsavideo/screens/splashScreen.dart'; 5 | 6 | void main() { 7 | WidgetsFlutterBinding.ensureInitialized(); 8 | SystemChrome.setPreferredOrientations( 9 | [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]).then((_) { 10 | runApp(MyApp()); 11 | }); 12 | } 13 | 14 | class MyApp extends StatelessWidget { 15 | @override 16 | Widget build(BuildContext context) { 17 | return MaterialApp( 18 | debugShowCheckedModeBanner: false, 19 | home: SplashScreen(), 20 | theme: ThemeData( 21 | textSelectionTheme: TextSelectionThemeData( 22 | cursorColor: Colors.white, 23 | ), 24 | splashColor: Colors.transparent, 25 | highlightColor: Colors.transparent, 26 | primarySwatch: Colors.red, 27 | primaryColor: Colors.black, 28 | indicatorColor: Colors.white, 29 | tabBarTheme: TabBarTheme(), 30 | ), 31 | builder: (context, child) { 32 | return ScrollConfiguration( 33 | behavior: MyBehavior(), 34 | child: child!, 35 | ); 36 | }, 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/Screens/settings/settings.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/Screens/settings/settings.dart -------------------------------------------------------------------------------- /lib/Screens/sortFilterPreference.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SortFilterPreferences extends ChangeNotifier { 4 | String? _sort; 5 | 6 | String? get sort => _sort; 7 | 8 | set sort(var value) { 9 | _sort = value; 10 | notifyListeners(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/Screens/video.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | // import 'package:telsavideo/models/Douyin.dart'; 3 | // import 'package:telsavideo/widgets/video_description.dart'; 4 | // import 'package:telsavideo/widgets/actions_toolbar.dart'; 5 | // import 'package:telsavideo/widgets/player.dart'; 6 | 7 | class VideoItem extends StatefulWidget { 8 | final Object data; 9 | final String videourl; 10 | const VideoItem({Key? key, required this.data, required this.videourl}) 11 | : super(key: key); 12 | @override 13 | State createState() => _VideoItemState(); 14 | } 15 | 16 | class _VideoItemState extends State { 17 | @override 18 | Widget build(BuildContext context) { 19 | return Scaffold( 20 | body: Stack( 21 | children: [ 22 | /* DouyinVideoPlayer( 23 | url: widget.videourl, 24 | ), */ 25 | //title(), 26 | /* VideoDescription( 27 | description: widget.data.itemList[0].desc, 28 | musicName: widget.data.itemList[0].music.title, 29 | authorName: widget.data.itemList[0].music.author, 30 | userName: widget.data.itemList[0].author.nickname, 31 | ), 32 | ActionsToolbar( 33 | comments: 34 | widget.data.itemList[0].statistics.commentCount.toString(), 35 | userImg: widget.data.itemList[0].author.avatarMedium.urlList[0], 36 | favorite: widget.data.itemList[0].statistics.diggCount, 37 | coverImg: widget.data.itemList[0].music.covermedium.urlList[0], 38 | ), */ 39 | ], 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/Screens/wallet/wallet.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/Screens/wallet/wallet.dart -------------------------------------------------------------------------------- /lib/accounts/exceptions.dart: -------------------------------------------------------------------------------- 1 | library steam_login.exceptions; 2 | 3 | enum OpenIdFailReason { param, params, body, noBody, pattern, invalid } 4 | 5 | class OpenIdException implements Exception { 6 | final String? message; 7 | final String? param; 8 | final OpenIdFailReason? reason; 9 | 10 | OpenIdException(this.reason, [this.message = '', this.param]); 11 | 12 | @override 13 | String toString() { 14 | if (param == null) { 15 | return 'OpenIdException: $message (Reason: ${reason.toString()}'; 16 | } else { 17 | return 'OpenIdException: Param: $param $message ' 18 | '(Reason ${reason.toString()}'; 19 | } 20 | } 21 | } 22 | 23 | class ApiKeyException implements Exception { 24 | final String key; 25 | 26 | ApiKeyException(this.key); 27 | 28 | @override 29 | String toString() => 'Invalid Steam API Key: $key'; 30 | } 31 | -------------------------------------------------------------------------------- /lib/accounts/player.dart: -------------------------------------------------------------------------------- 1 | library steam_login.player; 2 | 3 | import 'dart:convert'; 4 | import 'package:http/http.dart' as http; 5 | import 'exceptions.dart'; 6 | 7 | /// Calls the [GetPlayerSummaries] SteamAPI, and returns a Map containing the data 8 | /// Listed on https://developer.valvesoftware.com/wiki/Steam_Web_API#GetPlayerSummaries_.28v0002.29 9 | /// Throws a Generic 10 | Future> GetPlayerSummaries( 11 | String steamid, String apikey) async { 12 | final url = 13 | 'https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$apikey&steamids=$steamid'; 14 | var resp = await http.get(Uri.parse(url)); 15 | if (resp.statusCode == 403) { 16 | throw ApiKeyException(apikey); 17 | } 18 | 19 | return jsonDecode(resp.body)['response']['players'][0]; 20 | } 21 | -------------------------------------------------------------------------------- /lib/accounts/steam_login.dart: -------------------------------------------------------------------------------- 1 | /// Support for steam login OpenID. 2 | library steam_login; 3 | 4 | export 'exceptions.dart'; 5 | export 'openid.dart'; 6 | export 'player.dart'; 7 | -------------------------------------------------------------------------------- /lib/api/http_method.dart: -------------------------------------------------------------------------------- 1 | class HttpMethod { 2 | static const String GET = "GET"; 3 | 4 | static const String POST = "POST"; 5 | 6 | static const String PUT = "PUT"; 7 | 8 | static const String PATCH = "PATCH"; 9 | 10 | static const String DELETE = "DELETE"; 11 | } 12 | -------------------------------------------------------------------------------- /lib/api/impl/post.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/api/post.dart'; 4 | import 'package:telsavideo/models/user.dart'; 5 | import 'package:telsavideo/services/requestor.dart'; 6 | 7 | class SteemPostsApiImpl implements SteemPostsApi { 8 | static const String _root = '/get_content'; 9 | 10 | final Requestor requestor; 11 | 12 | SteemPostsApiImpl(this.requestor); 13 | 14 | @override 15 | Future getPost(String author, String permlink) { 16 | return requestor 17 | .request('sjs', '$_root?author=$author&permlink=$permlink') 18 | .then((r) => new Post.fromJson(r.data)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/api/impl/tag.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | import 'package:telsavideo/api/tag.dart'; 6 | import 'package:telsavideo/services/requestor.dart'; 7 | 8 | class SteemTagsApiImpl implements SteemTagsApi { 9 | static const String _trendingRoot = '/get_trending_tags'; 10 | static const String _authorTagsRoot = '/get_tags_used_by_author'; 11 | // ignore: unused_field 12 | static const int _limit = 10; 13 | final Requestor requestor; 14 | 15 | SteemTagsApiImpl(this.requestor); 16 | 17 | @override 18 | Future> getTrendingTags({int? limit}) { 19 | var req = '$_trendingRoot?'; 20 | 21 | if (limit != null) req += '&limit=$limit'; 22 | if (limit == null) req += '&limit=10'; 23 | 24 | return requestor.request('sjs', '$req').then((r) { 25 | return r.data.map((m) => new Tag.fromJson(m)).toList(); 26 | }); 27 | } 28 | 29 | @override 30 | Future> getTagsUsedByAuthor(String author) { 31 | return requestor 32 | .request('sjs', '$_authorTagsRoot?&author=$author') 33 | .then((r) { 34 | return r.data.map((m) => new Tag.fromJson(m)).toList(); 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/api/post.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract post information from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemPostsApi { 8 | /// Get information about a post object 9 | /// https://api.steemjs.com/get_content?author=AUTHOR&permlink=PERMLINK 10 | Future getPost(String author, String permlink); 11 | } 12 | -------------------------------------------------------------------------------- /lib/api/reply.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract reply information from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemCommentsApi { 8 | /// An abstraction to extract reply information from a single Steem post 9 | /// https://api.steemjs.com/get_content_replies?author=AUTHOR&permlink=PERMLINK 10 | SteemCommentsApiPost forPost(String author, String permlink); 11 | } 12 | 13 | /// An abstraction to extract reply information from a single Steem post 14 | abstract class SteemCommentsApiPost { 15 | /// Get a list of recent comments on a post object 16 | Future> getReplies(); 17 | 18 | /// Create a comment 19 | /// https://steemconnect.com/sign/comment?parent_author=AUTHOR&parent_permlink=PARENT_PERMLINK&author=AUTHOR&permlink=REPLY_PERMLINK&title=TITLE&body=BODY&json_metadata=VALUE 20 | Future createComment(String parentAuthor, String parentPermlink, 21 | String author, String permlink, String title, String body, 22 | {String jsonMetadata}); 23 | 24 | /// Remove a comment either on the authenticated user's post object or authored by the authenticated user 25 | /// https://steemconnect.com/sign/delete_comment?author=value&permlink=value 26 | Future deleteComment(String author, String permlink); 27 | } 28 | -------------------------------------------------------------------------------- /lib/api/steem.dart: -------------------------------------------------------------------------------- 1 | import 'package:telsavideo/models/user.dart'; 2 | import 'post.dart'; 3 | import 'relationship.dart'; 4 | import 'reply.dart'; 5 | import 'tag.dart'; 6 | import 'user.dart'; 7 | import 'vote.dart'; 8 | 9 | /// An abstraction to extract information from Steem 10 | /// https://v2.steemconnect.com/docs/steemjs#api/ 11 | abstract class SteemApi { 12 | /// This is the client's access token 13 | String get accessToken; 14 | 15 | /// The user who is logged in for this session 16 | User get user; 17 | 18 | /// An abstraction to extract post data from Steem 19 | SteemPostsApi get posts; 20 | 21 | /// An abstraction to extract relationship data from Steem 22 | SteemRelationshipsApi get relationships; 23 | 24 | /// An abstraction to extract comment data from Steem 25 | SteemCommentsApi get replies; 26 | 27 | /// An abstraction to extract tag data Steem 28 | SteemTagsApi get tags; 29 | 30 | /// An abstraction to extract user data from Steem 31 | SteemUsersApi get users; 32 | 33 | /// An abstraction to extract upvote data from Steem 34 | SteemVotesApi get votes; 35 | } 36 | -------------------------------------------------------------------------------- /lib/api/tag.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract tag data from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemTagsApi { 8 | /// Get information about trending categories 9 | /// https://api.steemjs.com/get_trending_tags?&limit=5 10 | Future> getTrendingTags({int? limit}); 11 | 12 | /// Get tags used by an author 13 | /// https://api.steemjs.com/get_tags_used_by_author?author=AUTHOR 14 | Future> getTagsUsedByAuthor(String author); 15 | } 16 | -------------------------------------------------------------------------------- /lib/api/vote.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract vote information from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemVotesApi { 8 | /// An abstraction to extract vote information from a single Steem post 9 | /// https://api.steemjs.com/get_active_votes?author=VALUE&permlink=VALUE 10 | SteemVotesApiPost forPost(String author, String permlink); 11 | } 12 | 13 | /// An abstraction to extract vote information from a single Steem post 14 | abstract class SteemVotesApiPost { 15 | /// Get a list of users who have liked a post 16 | /// https://api.steemjs.com/get_active_votes?author=USER&permlink=PERM 17 | Future> getVoters(String author, String permlink); 18 | 19 | /// Upvote the post as the currently authenticated user 20 | Future upvote(String voter, String author, String permlink, 21 | {int? weight}); 22 | 23 | /// Remove an upvote on the post by the currently authenticated user 24 | Future unvote(String voter, String author, String permlink); 25 | } 26 | -------------------------------------------------------------------------------- /lib/appBehaviour/my_behaviour.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class MyBehavior extends ScrollBehavior { 4 | @override 5 | Widget buildViewportChrome( 6 | BuildContext context, Widget child, AxisDirection axisDirection) { 7 | return child; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/blocs/ipfs/ipfs_event.dart: -------------------------------------------------------------------------------- 1 | part of 'ipfs_bloc.dart'; 2 | 3 | @immutable 4 | abstract class IpfsEvent extends Equatable { 5 | List get props => []; 6 | } 7 | 8 | class AppLaunched extends IpfsEvent { 9 | @override 10 | String toString() => 'AppLaunched'; 11 | } 12 | 13 | class StartPeer extends IpfsEvent { 14 | StartPeer(); 15 | } 16 | 17 | class StopPeer extends IpfsEvent { 18 | StopPeer(); 19 | } 20 | 21 | class FetchData extends IpfsEvent { 22 | final String networkCid; 23 | 24 | FetchData(this.networkCid); 25 | } 26 | 27 | class FetchFromGateway extends IpfsEvent { 28 | final String networkCid; 29 | 30 | FetchFromGateway(this.networkCid); 31 | } 32 | 33 | class RetrieveData extends IpfsEvent { 34 | 35 | RetrieveData(); 36 | } -------------------------------------------------------------------------------- /lib/blocs/ipfs/ipfs_state.dart: -------------------------------------------------------------------------------- 1 | part of 'ipfs_bloc.dart'; 2 | 3 | @immutable 4 | abstract class IpfsState extends Equatable { 5 | @override 6 | List get props => []; 7 | } 8 | 9 | class InitialIpfsState extends IpfsState { 10 | @override 11 | String toString() => 'InitialIpfsState'; 12 | } 13 | 14 | class PeerStarted extends IpfsState { 15 | @override 16 | String toString() => 'PeerStartedIpfsState'; 17 | } 18 | 19 | class PeerNotStarted extends IpfsState { 20 | @override 21 | String toString() => 'PeerNotStartedIpfsState'; 22 | } 23 | 24 | class FetchInProgress extends IpfsState { 25 | @override 26 | String toString() => 'FetchInProgressState'; 27 | } 28 | 29 | class RetrievingData extends IpfsState { 30 | @override 31 | String toString() => 'RetrievingDataState'; 32 | } 33 | 34 | class FetchFailed extends IpfsState { 35 | @override 36 | String toString() => 'FetchFailedState'; 37 | } 38 | 39 | class Fetched extends IpfsState { 40 | final String data; 41 | Fetched(this.data); 42 | 43 | @override 44 | String toString() => 'FetchedState'; 45 | } 46 | 47 | class FirstLaunch extends IpfsState { 48 | @override 49 | String toString() => 'FirstLaunchState'; 50 | } -------------------------------------------------------------------------------- /lib/blocs/theme/theme_event.dart: -------------------------------------------------------------------------------- 1 | /* part of 'theme_bloc.dart'; 2 | 3 | 4 | abstract class ThemeEvent extends Equatable { 5 | const ThemeEvent(); 6 | 7 | @override 8 | List get props => []; 9 | } 10 | 11 | class ThemeChanged extends ThemeEvent { 12 | final bool value; 13 | 14 | ThemeChanged(this.value) : assert(value != null); 15 | 16 | @override 17 | List get props => [value]; 18 | } 19 | 20 | class FirstLaunchChanged extends ThemeEvent { 21 | final bool value; 22 | 23 | FirstLaunchChanged(this.value) : assert(value != null); 24 | 25 | @override 26 | List get props => [value]; 27 | } 28 | 29 | class ThemeLoadStarted extends ThemeEvent {} */ -------------------------------------------------------------------------------- /lib/blocs/theme/theme_state.dart: -------------------------------------------------------------------------------- 1 | /* part of 'theme_bloc.dart'; 2 | 3 | class ThemeState extends Equatable { 4 | final ThemeMode themeMode; 5 | 6 | ThemeState(this.themeMode) : assert(themeMode != null); 7 | 8 | @override 9 | List get props => [themeMode]; 10 | } */ -------------------------------------------------------------------------------- /lib/common/icons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | 3 | class DouyinIcons { 4 | DouyinIcons._(); 5 | 6 | static const _kFontFam = 'DouyinIcons'; 7 | static const IconData chat_bubble = 8 | const IconData(0xe808, fontFamily: _kFontFam); 9 | static const IconData create = const IconData(0xe809, fontFamily: _kFontFam); 10 | static const IconData heart = const IconData(0xe80a, fontFamily: _kFontFam); 11 | static const IconData home = const IconData(0xe80b, fontFamily: _kFontFam); 12 | static const IconData messages = 13 | const IconData(0xe80c, fontFamily: _kFontFam); 14 | static const IconData profile = const IconData(0xe80d, fontFamily: _kFontFam); 15 | static const IconData reply = const IconData(0xe80e, fontFamily: _kFontFam); 16 | static const IconData search = const IconData(0xe80f, fontFamily: _kFontFam); 17 | } 18 | -------------------------------------------------------------------------------- /lib/common/sizeconfig.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SizeConfig { 4 | static MediaQueryData? _mediaQueryData; 5 | static double? screenWidth; 6 | static double? screenHeight; 7 | static double? blockSizeHorizontal; 8 | static double? blockSizeVertical; 9 | 10 | static double? _safeAreaHorizontal; 11 | static double? _safeAreaVertical; 12 | static double? safeBlockHorizontal; 13 | static double? safeBlockVertical; 14 | 15 | void init(BuildContext context) { 16 | _mediaQueryData = MediaQuery.of(context); 17 | screenWidth = _mediaQueryData!.size.width; 18 | screenHeight = _mediaQueryData!.size.height; 19 | blockSizeHorizontal = screenWidth! / 100; 20 | blockSizeVertical = screenHeight! / 100; 21 | 22 | _safeAreaHorizontal = 23 | _mediaQueryData!.padding.left + _mediaQueryData!.padding.right; 24 | _safeAreaVertical = 25 | _mediaQueryData!.padding.top + _mediaQueryData!.padding.bottom; 26 | safeBlockHorizontal = (screenWidth! - _safeAreaHorizontal!) / 100; 27 | safeBlockVertical = (screenHeight! - _safeAreaVertical!) / 100; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/common/utils.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:intl/intl.dart'; 4 | 5 | // Convert a number to Human readable format (e.g. 1.5k, 5m, 1b) 6 | String formattedNumber(dynamic numberToFormat) { 7 | if (double.parse(numberToFormat.toString()) < 1000) { 8 | return numberToFormat.toString(); 9 | } 10 | var _formattedNumber = NumberFormat.compactCurrency( 11 | decimalDigits: 2, 12 | symbol: 13 | '', // if you want to add currency symbol then pass that in this else leave it empty. 14 | ).format(numberToFormat); 15 | return _formattedNumber; 16 | } 17 | 18 | Color hexToColor(String code) { 19 | return new Color(int.parse(code.substring(1, 7), radix: 16) + 0xFF000000); 20 | } 21 | 22 | extension MapExtension on Map? { 23 | bool get isNullOrEmpty => (this == null || this!.isEmpty); 24 | } 25 | 26 | extension IterableExtension on Iterable? { 27 | bool get isNullOrEmpty => (this == null || this!.isEmpty); 28 | } 29 | 30 | extension StringExtension on String? { 31 | bool get isNullOrEmpty => (this == null || this!.isEmpty); 32 | } 33 | 34 | extension OptionsExtension on Options? { 35 | bool get isNullOrEmpty => (this == null); 36 | } 37 | -------------------------------------------------------------------------------- /lib/constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const Color kActiveColor = Color.fromARGB(255, 32, 211, 234); 4 | const Color kSecondaryColor = Color.fromARGB(255, 250, 45, 108); 5 | // const Color kPrimaryColor = kSecondaryColor; 6 | 7 | const Color kPrimaryColor = Color(0xff161616); 8 | 9 | const Color kFontColor = Color(0xffe0e0e0); 10 | 11 | const Color kBgColorTop = Color(0xff6e00ff); 12 | const Color kBgColorBottom = Color(0xffa307dd); 13 | const Color kButtomColor = Color.fromRGBO(252, 1, 86, 1); 14 | 15 | const String apiUrl = "https://api.telsacoin.io/api"; 16 | 17 | //const String apiDevUrl = "http://10.0.2.2:8181/api"; 18 | const String apiDevUrl = "http://47.95.209.198:8181/api"; 19 | 20 | const String apiPortail = "http://47.95.209.198:8181"; 21 | -------------------------------------------------------------------------------- /lib/http/base/base_controller.dart: -------------------------------------------------------------------------------- 1 | class BaseController {} 2 | -------------------------------------------------------------------------------- /lib/http/base/base_domain.dart: -------------------------------------------------------------------------------- 1 | class BaseDomain { 2 | static final String xUSERTOKEN = "x-user-token"; 3 | 4 | static final String xUserTICKET = "x-user-ticket"; 5 | 6 | static final String xPERMITSIGN = "x-permit-sign"; 7 | 8 | static final String xPERMITTOKEN = "x-permit-token"; 9 | 10 | static final String xSYSTEMCODE = "x-system-code"; 11 | 12 | static final String xRESOURCECODE = "x-resource-code"; 13 | 14 | static final String xUSERREFRESHTOKEN = "x-user-refresh-token"; 15 | 16 | static final String xTENANTREQUIRED = "x-tenant-required"; 17 | 18 | static final String xMENUCODE = "x-menu-code"; 19 | 20 | static final String xDATAACCESSKIND = "x-data-access-kind"; 21 | 22 | static final String xREQUESTGLOBALID = "x-request-globalId"; 23 | 24 | static final String xREQUESTID = "x-request-id"; 25 | 26 | static final String xMENUREFCODE = "x-menu-ref-code"; 27 | 28 | static final String xMENUREFSCOPE = "x-menu-ref-scope"; 29 | 30 | static final String xBUSINESSCODE = "x-business-code"; 31 | } 32 | -------------------------------------------------------------------------------- /lib/http/interceptors/header_interceptor.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:telsavideo/http/base/base_domain.dart'; 3 | import 'package:telsavideo/http/util.dart'; 4 | 5 | class HeaderInterceptor implements Interceptor { 6 | @override 7 | void onError(DioError err, ErrorInterceptorHandler handler) async { 8 | handler.next(err); 9 | } 10 | 11 | @override 12 | void onRequest( 13 | RequestOptions options, RequestInterceptorHandler handler) async { 14 | try { 15 | String token = ''; 16 | await Util.getString(BaseDomain.xUSERTOKEN).then((text) { 17 | token = text != null ? text : ""; 18 | }); 19 | 20 | options.headers.putIfAbsent( 21 | 'user-agent', 22 | () => 23 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1'); 24 | 25 | if (token.length > 0) { 26 | options.headers[BaseDomain.xUSERTOKEN] = token; 27 | } 28 | } catch (e) { 29 | print(e); 30 | } 31 | handler.next(options); 32 | } 33 | 34 | @override 35 | void onResponse(Response response, ResponseInterceptorHandler handler) async { 36 | handler.next(response); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/http/request/request_method.dart: -------------------------------------------------------------------------------- 1 | class RequestMethod { 2 | static const String GET = "GET"; 3 | 4 | static const String POST = "POST"; 5 | 6 | static const String PUT = "PUT"; 7 | 8 | static const String PATCH = "PATCH"; 9 | 10 | static const String DELETE = "DELETE"; 11 | } 12 | -------------------------------------------------------------------------------- /lib/http/response/result.dart: -------------------------------------------------------------------------------- 1 | class Result { 2 | int? code; 3 | String? msg; 4 | bool? status; 5 | T? data; 6 | 7 | Result(this.code, this.msg, this.status, this.data); 8 | 9 | static Result success(int code, String msg, T data) { 10 | Result result = new Result(code, msg, true, data); 11 | result.code = code; 12 | result.msg = msg; 13 | result.data = data; 14 | result.status = true; 15 | return result; 16 | } 17 | 18 | Result.fromJson(Map? json) { 19 | code = json!['code']; 20 | msg = json['msg']; 21 | data = json['data']; 22 | status = json['success']; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/http/response/result_code.dart: -------------------------------------------------------------------------------- 1 | enum ResultCode { 2 | SUCCESS, 3 | FAILURE, 4 | } 5 | 6 | extension ResultCodeExtension on ResultCode { 7 | static const labels = [200, 500]; 8 | static const values = ["SUCCESS", "FAILURE"]; 9 | 10 | int get label => labels[this.index]; 11 | String get value => values[this.index]; 12 | 13 | static ResultCode parse(int i) { 14 | return ResultCode.values[i]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/l10n/app_de.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/l10n/app_en.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/l10n/app_es.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/l10n/app_fr.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/l10n/app_it.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/l10n/app_lo.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/l10n/app_uk.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/l10n/app_zh.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"推荐", 3 | "home_top_following":"关注", 4 | "home_share":"分享", 5 | "home_buttom_title":"首页", 6 | "home_buttom_discover":"发现", 7 | "home_buttom_notification":"通知", 8 | "home_buttom_persion":"我" 9 | } -------------------------------------------------------------------------------- /lib/lib/Routes/route_generator.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:telsavideo/screens/login/hiveaccount.dart'; 3 | import 'package:telsavideo/screens/home/home.dart'; 4 | import 'package:telsavideo/screens/login/login.dart'; 5 | import 'package:telsavideo/screens/profile/profile.dart'; 6 | 7 | class RouteGenerator { 8 | static Route generateRoute(RouteSettings settings) { 9 | final args = settings.arguments; 10 | switch (settings.name) { 11 | case '/': 12 | return MaterialPageRoute(builder: (_) => Home()); 13 | case '/login': 14 | if (args is String) {} 15 | return MaterialPageRoute(builder: (_) => Login()); 16 | case '/search': 17 | return MaterialPageRoute(builder: (_) => Profile()); 18 | case '/live': 19 | return MaterialPageRoute(builder: (_) => Container()); 20 | case '/profile': 21 | return MaterialPageRoute(builder: (_) => Profile()); 22 | case '/hive': 23 | return MaterialPageRoute(builder: (_) => HiveAccount()); 24 | default: 25 | return _errorRoute(); 26 | } 27 | } 28 | 29 | static Route _errorRoute() { 30 | return MaterialPageRoute(builder: (_) { 31 | return Scaffold( 32 | appBar: AppBar( 33 | title: Text('Oops! something went wrong!'), 34 | ), 35 | body: Center( 36 | child: Text('App Error'), 37 | ), 38 | ); 39 | }); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/lib/Screens/comment/comment_tree.dart: -------------------------------------------------------------------------------- 1 | library comment_tree; 2 | 3 | export './data/comment.dart'; 4 | export './widgets/comment_child_widget.dart'; 5 | export './widgets/comment_tree_widget.dart'; 6 | export './widgets/root_comment_widget.dart'; 7 | export './widgets/tree_theme_data.dart'; 8 | 9 | /// A Calculator. 10 | class Calculator { 11 | /// Returns [value] plus 1. 12 | int addOne(int value) => value + 1; 13 | } 14 | -------------------------------------------------------------------------------- /lib/lib/Screens/comment/data/comment.dart: -------------------------------------------------------------------------------- 1 | class Comment { 2 | // ignore: constant_identifier_names 3 | static const TAG = 'Comment'; 4 | 5 | String? avatar; 6 | String? userName; 7 | String? content; 8 | int? createTime; 9 | int? diggCount; 10 | bool? hasChild = false; 11 | 12 | Comment( 13 | {required this.avatar, 14 | required this.userName, 15 | required this.content, 16 | this.createTime, 17 | this.diggCount, 18 | this.hasChild}); 19 | } 20 | -------------------------------------------------------------------------------- /lib/lib/Screens/comment/widgets/tree_theme_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class TreeThemeData { 4 | // ignore: constant_identifier_names 5 | static const TAG = 'TreeThemeData'; 6 | 7 | final Color lineColor; 8 | final double lineWidth; 9 | 10 | const TreeThemeData({this.lineColor = Colors.grey, this.lineWidth = 2}); 11 | } 12 | -------------------------------------------------------------------------------- /lib/lib/Screens/common/custom_tip_dialog_box.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_local_notifications/flutter_local_notifications.dart'; 5 | 6 | class CustomTipDialogBox extends StatefulWidget { 7 | @override 8 | State createState() { 9 | // TODO: implement createState 10 | throw UnimplementedError(); 11 | } 12 | } 13 | 14 | class _CustomTipDialogBoxState extends State { 15 | TimeOfDay? time; 16 | 17 | @override 18 | void initState() { 19 | // TODO: implement initState 20 | super.initState(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | // TODO: implement build 26 | return Container(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/lib/Screens/loading/loading.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:getwidget/components/loader/gf_loader.dart'; 3 | import 'package:getwidget/types/gf_loader_type.dart'; 4 | 5 | // the loading widget 6 | //common widget 7 | Widget get loading => Container( 8 | color: Colors.black, 9 | child: Center( 10 | child: GFLoader( 11 | type: GFLoaderType.circle, 12 | loaderColorOne: Colors.blueAccent, 13 | loaderColorTwo: Colors.white, 14 | loaderColorThree: Colors.pink, 15 | ), 16 | ), 17 | ); 18 | 19 | // the small loading 20 | Widget get sloading => Container( 21 | width: 48, 22 | height: 48, 23 | color: Colors.black, 24 | child: Center( 25 | child: GFLoader( 26 | type: GFLoaderType.circle, 27 | loaderColorOne: Colors.blueAccent, 28 | //loaderColorTwo: Colors.white, 29 | loaderColorThree: Colors.pink, 30 | ), 31 | ), 32 | ); 33 | 34 | // the error widget 35 | Widget get empty => Container( 36 | width: 48, 37 | height: 48, 38 | color: Colors.black, 39 | child: Center(child: Text('Error,Please restart your app again.')), 40 | ); 41 | -------------------------------------------------------------------------------- /lib/lib/Screens/login/opt.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | import 'package:telsavideo/appBehaviour/my_behaviour.dart'; 4 | import 'package:telsavideo/screens/splashScreen.dart'; 5 | 6 | void main() { 7 | WidgetsFlutterBinding.ensureInitialized(); 8 | SystemChrome.setPreferredOrientations( 9 | [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]).then((_) { 10 | runApp(MyApp()); 11 | }); 12 | } 13 | 14 | class MyApp extends StatelessWidget { 15 | @override 16 | Widget build(BuildContext context) { 17 | return MaterialApp( 18 | debugShowCheckedModeBanner: false, 19 | home: SplashScreen(), 20 | theme: ThemeData( 21 | textSelectionTheme: TextSelectionThemeData( 22 | cursorColor: Colors.white, 23 | ), 24 | splashColor: Colors.transparent, 25 | highlightColor: Colors.transparent, 26 | primarySwatch: Colors.red, 27 | primaryColor: Colors.black, 28 | indicatorColor: Colors.white, 29 | tabBarTheme: TabBarTheme(), 30 | ), 31 | builder: (context, child) { 32 | return ScrollConfiguration( 33 | behavior: MyBehavior(), 34 | child: child!, 35 | ); 36 | }, 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/lib/Screens/settings/settings.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/lib/Screens/settings/settings.dart -------------------------------------------------------------------------------- /lib/lib/Screens/sortFilterPreference.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SortFilterPreferences extends ChangeNotifier { 4 | String? _sort; 5 | 6 | String? get sort => _sort; 7 | 8 | set sort(var value) { 9 | _sort = value; 10 | notifyListeners(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/lib/Screens/wallet/wallet.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/lib/Screens/wallet/wallet.dart -------------------------------------------------------------------------------- /lib/lib/accounts/exceptions.dart: -------------------------------------------------------------------------------- 1 | library steam_login.exceptions; 2 | 3 | enum OpenIdFailReason { param, params, body, noBody, pattern, invalid } 4 | 5 | class OpenIdException implements Exception { 6 | final String? message; 7 | final String? param; 8 | final OpenIdFailReason? reason; 9 | 10 | OpenIdException(this.reason, [this.message = '', this.param]); 11 | 12 | @override 13 | String toString() { 14 | if (param == null) { 15 | return 'OpenIdException: $message (Reason: ${reason.toString()}'; 16 | } else { 17 | return 'OpenIdException: Param: $param $message ' 18 | '(Reason ${reason.toString()}'; 19 | } 20 | } 21 | } 22 | 23 | class ApiKeyException implements Exception { 24 | final String key; 25 | 26 | ApiKeyException(this.key); 27 | 28 | @override 29 | String toString() => 'Invalid Steam API Key: $key'; 30 | } 31 | -------------------------------------------------------------------------------- /lib/lib/accounts/player.dart: -------------------------------------------------------------------------------- 1 | library steam_login.player; 2 | 3 | import 'dart:convert'; 4 | import 'package:http/http.dart' as http; 5 | import 'exceptions.dart'; 6 | 7 | /// Calls the [GetPlayerSummaries] SteamAPI, and returns a Map containing the data 8 | /// Listed on https://developer.valvesoftware.com/wiki/Steam_Web_API#GetPlayerSummaries_.28v0002.29 9 | /// Throws a Generic 10 | Future> GetPlayerSummaries( 11 | String steamid, String apikey) async { 12 | final url = 13 | 'https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$apikey&steamids=$steamid'; 14 | var resp = await http.get(Uri.parse(url)); 15 | if (resp.statusCode == 403) { 16 | throw ApiKeyException(apikey); 17 | } 18 | 19 | return jsonDecode(resp.body)['response']['players'][0]; 20 | } 21 | -------------------------------------------------------------------------------- /lib/lib/accounts/steam_login.dart: -------------------------------------------------------------------------------- 1 | /// Support for steam login OpenID. 2 | library steam_login; 3 | 4 | export 'exceptions.dart'; 5 | export 'openid.dart'; 6 | export 'player.dart'; 7 | -------------------------------------------------------------------------------- /lib/lib/api/category.dart: -------------------------------------------------------------------------------- 1 | 2 | 3 | // TODO: Finish implementation 4 | 5 | /// An abstraction to extract category data from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemCategoriesApi { 8 | 9 | /// Get information about trending categories 10 | /// https://api.steemjs.com/get_trending_categories?after=value&limit=value 11 | //Future getTrendingCategories({String after, int limit}); 12 | 13 | /// Get information about best categories 14 | /// https://api.steemjs.com/get_best_categories?after=value&limit=value 15 | //Future getBestCategories({String after, int limit}); 16 | 17 | /// Get information about active categories 18 | /// https://api.steemjs.com/get_active_categories?after=value&limit=value 19 | //Future getActiveCategories({String after, int limit}); 20 | 21 | /// Get information about recent categories 22 | /// https://api.steemjs.com/get_recent_categories?after=value&limit=value 23 | //Future getRecentCategories({String after, int limit}); 24 | 25 | /// Search for categories by name 26 | //Future> search(String query); 27 | } -------------------------------------------------------------------------------- /lib/lib/api/http_method.dart: -------------------------------------------------------------------------------- 1 | class HttpMethod { 2 | static const String GET = "GET"; 3 | 4 | static const String POST = "POST"; 5 | 6 | static const String PUT = "PUT"; 7 | 8 | static const String PATCH = "PATCH"; 9 | 10 | static const String DELETE = "DELETE"; 11 | } 12 | -------------------------------------------------------------------------------- /lib/lib/api/impl/post.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/api/post.dart'; 4 | import 'package:telsavideo/models/user.dart'; 5 | import 'package:telsavideo/services/requestor.dart'; 6 | 7 | class SteemPostsApiImpl implements SteemPostsApi { 8 | static const String _root = '/get_content'; 9 | 10 | final Requestor requestor; 11 | 12 | SteemPostsApiImpl(this.requestor); 13 | 14 | @override 15 | Future getPost(String author, String permlink) { 16 | return requestor 17 | .request('sjs', '$_root?author=$author&permlink=$permlink') 18 | .then((r) => new Post.fromJson(r.data)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/lib/api/impl/tag.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | import 'package:telsavideo/api/tag.dart'; 6 | import 'package:telsavideo/services/requestor.dart'; 7 | 8 | class SteemTagsApiImpl implements SteemTagsApi { 9 | static const String _trendingRoot = '/get_trending_tags'; 10 | static const String _authorTagsRoot = '/get_tags_used_by_author'; 11 | // ignore: unused_field 12 | static const int _limit = 10; 13 | final Requestor requestor; 14 | 15 | SteemTagsApiImpl(this.requestor); 16 | 17 | @override 18 | Future> getTrendingTags({int? limit}) { 19 | var req = '$_trendingRoot?'; 20 | 21 | if (limit != null) req += '&limit=$limit'; 22 | if (limit == null) req += '&limit=10'; 23 | 24 | return requestor.request('sjs', '$req').then((r) { 25 | return r.data.map((m) => new Tag.fromJson(m)).toList(); 26 | }); 27 | } 28 | 29 | @override 30 | Future> getTagsUsedByAuthor(String author) { 31 | return requestor 32 | .request('sjs', '$_authorTagsRoot?&author=$author') 33 | .then((r) { 34 | return r.data.map((m) => new Tag.fromJson(m)).toList(); 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/lib/api/post.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract post information from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemPostsApi { 8 | /// Get information about a post object 9 | /// https://api.steemjs.com/get_content?author=AUTHOR&permlink=PERMLINK 10 | Future getPost(String author, String permlink); 11 | } 12 | -------------------------------------------------------------------------------- /lib/lib/api/reply.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract reply information from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemCommentsApi { 8 | /// An abstraction to extract reply information from a single Steem post 9 | /// https://api.steemjs.com/get_content_replies?author=AUTHOR&permlink=PERMLINK 10 | SteemCommentsApiPost forPost(String author, String permlink); 11 | } 12 | 13 | /// An abstraction to extract reply information from a single Steem post 14 | abstract class SteemCommentsApiPost { 15 | /// Get a list of recent comments on a post object 16 | Future> getReplies(); 17 | 18 | /// Create a comment 19 | /// https://steemconnect.com/sign/comment?parent_author=AUTHOR&parent_permlink=PARENT_PERMLINK&author=AUTHOR&permlink=REPLY_PERMLINK&title=TITLE&body=BODY&json_metadata=VALUE 20 | Future createComment(String parentAuthor, String parentPermlink, 21 | String author, String permlink, String title, String body, 22 | {String? jsonMetadata}); 23 | 24 | /// Remove a comment either on the authenticated user's post object or authored by the authenticated user 25 | /// https://steemconnect.com/sign/delete_comment?author=value&permlink=value 26 | Future deleteComment(String author, String permlink); 27 | } 28 | -------------------------------------------------------------------------------- /lib/lib/api/steem.dart: -------------------------------------------------------------------------------- 1 | import 'package:telsavideo/models/user.dart'; 2 | import 'post.dart'; 3 | import 'relationship.dart'; 4 | import 'reply.dart'; 5 | import 'tag.dart'; 6 | import 'user.dart'; 7 | import 'vote.dart'; 8 | 9 | /// An abstraction to extract information from Steem 10 | /// https://v2.steemconnect.com/docs/steemjs#api/ 11 | abstract class SteemApi { 12 | /// This is the client's access token 13 | String get accessToken; 14 | 15 | /// The user who is logged in for this session 16 | User get user; 17 | 18 | /// An abstraction to extract post data from Steem 19 | SteemPostsApi get posts; 20 | 21 | /// An abstraction to extract relationship data from Steem 22 | SteemRelationshipsApi get relationships; 23 | 24 | /// An abstraction to extract comment data from Steem 25 | SteemCommentsApi get replies; 26 | 27 | /// An abstraction to extract tag data Steem 28 | SteemTagsApi get tags; 29 | 30 | /// An abstraction to extract user data from Steem 31 | SteemUsersApi get users; 32 | 33 | /// An abstraction to extract upvote data from Steem 34 | SteemVotesApi get votes; 35 | } 36 | -------------------------------------------------------------------------------- /lib/lib/api/tag.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract tag data from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemTagsApi { 8 | /// Get information about trending categories 9 | /// https://api.steemjs.com/get_trending_tags?&limit=5 10 | Future> getTrendingTags({int limit}); 11 | 12 | /// Get tags used by an author 13 | /// https://api.steemjs.com/get_tags_used_by_author?author=AUTHOR 14 | Future> getTagsUsedByAuthor(String author); 15 | } 16 | -------------------------------------------------------------------------------- /lib/lib/api/vote.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:telsavideo/models/user.dart'; 4 | 5 | /// An abstraction to extract vote information from Steem 6 | /// https://v2.steemconnect.com/docs/steemjs#api/ 7 | abstract class SteemVotesApi { 8 | /// An abstraction to extract vote information from a single Steem post 9 | /// https://api.steemjs.com/get_active_votes?author=VALUE&permlink=VALUE 10 | SteemVotesApiPost forPost(String author, String permlink); 11 | } 12 | 13 | /// An abstraction to extract vote information from a single Steem post 14 | abstract class SteemVotesApiPost { 15 | /// Get a list of users who have liked a post 16 | /// https://api.steemjs.com/get_active_votes?author=USER&permlink=PERM 17 | Future> getVoters(String author, String permlink); 18 | 19 | /// Upvote the post as the currently authenticated user 20 | Future upvote(String voter, String author, String permlink, 21 | {int weight}); 22 | 23 | /// Remove an upvote on the post by the currently authenticated user 24 | Future unvote(String voter, String author, String permlink); 25 | } 26 | -------------------------------------------------------------------------------- /lib/lib/appBehaviour/my_behaviour.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class MyBehavior extends ScrollBehavior { 4 | @override 5 | Widget buildViewportChrome( 6 | BuildContext context, Widget child, AxisDirection axisDirection) { 7 | return child; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/lib/blocs/ipfs/ipfs_event.dart: -------------------------------------------------------------------------------- 1 | part of 'ipfs_bloc.dart'; 2 | 3 | @immutable 4 | abstract class IpfsEvent extends Equatable { 5 | List get props => []; 6 | } 7 | 8 | class AppLaunched extends IpfsEvent { 9 | @override 10 | String toString() => 'AppLaunched'; 11 | } 12 | 13 | class StartPeer extends IpfsEvent { 14 | StartPeer(); 15 | } 16 | 17 | class StopPeer extends IpfsEvent { 18 | StopPeer(); 19 | } 20 | 21 | class FetchData extends IpfsEvent { 22 | final String networkCid; 23 | 24 | FetchData(this.networkCid); 25 | } 26 | 27 | class FetchFromGateway extends IpfsEvent { 28 | final String networkCid; 29 | 30 | FetchFromGateway(this.networkCid); 31 | } 32 | 33 | class RetrieveData extends IpfsEvent { 34 | 35 | RetrieveData(); 36 | } -------------------------------------------------------------------------------- /lib/lib/blocs/ipfs/ipfs_state.dart: -------------------------------------------------------------------------------- 1 | part of 'ipfs_bloc.dart'; 2 | 3 | @immutable 4 | abstract class IpfsState extends Equatable { 5 | @override 6 | List get props => []; 7 | } 8 | 9 | class InitialIpfsState extends IpfsState { 10 | @override 11 | String toString() => 'InitialIpfsState'; 12 | } 13 | 14 | class PeerStarted extends IpfsState { 15 | @override 16 | String toString() => 'PeerStartedIpfsState'; 17 | } 18 | 19 | class PeerNotStarted extends IpfsState { 20 | @override 21 | String toString() => 'PeerNotStartedIpfsState'; 22 | } 23 | 24 | class FetchInProgress extends IpfsState { 25 | @override 26 | String toString() => 'FetchInProgressState'; 27 | } 28 | 29 | class RetrievingData extends IpfsState { 30 | @override 31 | String toString() => 'RetrievingDataState'; 32 | } 33 | 34 | class FetchFailed extends IpfsState { 35 | @override 36 | String toString() => 'FetchFailedState'; 37 | } 38 | 39 | class Fetched extends IpfsState { 40 | final String data; 41 | Fetched(this.data); 42 | 43 | @override 44 | String toString() => 'FetchedState'; 45 | } 46 | 47 | class FirstLaunch extends IpfsState { 48 | @override 49 | String toString() => 'FirstLaunchState'; 50 | } -------------------------------------------------------------------------------- /lib/lib/blocs/theme/theme_event.dart: -------------------------------------------------------------------------------- 1 | /* part of 'theme_bloc.dart'; 2 | 3 | 4 | abstract class ThemeEvent extends Equatable { 5 | const ThemeEvent(); 6 | 7 | @override 8 | List get props => []; 9 | } 10 | 11 | class ThemeChanged extends ThemeEvent { 12 | final bool value; 13 | 14 | ThemeChanged(this.value) : assert(value != null); 15 | 16 | @override 17 | List get props => [value]; 18 | } 19 | 20 | class FirstLaunchChanged extends ThemeEvent { 21 | final bool value; 22 | 23 | FirstLaunchChanged(this.value) : assert(value != null); 24 | 25 | @override 26 | List get props => [value]; 27 | } 28 | 29 | class ThemeLoadStarted extends ThemeEvent {} */ -------------------------------------------------------------------------------- /lib/lib/blocs/theme/theme_state.dart: -------------------------------------------------------------------------------- 1 | /* part of 'theme_bloc.dart'; 2 | 3 | class ThemeState extends Equatable { 4 | final ThemeMode themeMode; 5 | 6 | ThemeState(this.themeMode) : assert(themeMode != null); 7 | 8 | @override 9 | List get props => [themeMode]; 10 | } */ -------------------------------------------------------------------------------- /lib/lib/common/icons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | 3 | class DouyinIcons { 4 | DouyinIcons._(); 5 | 6 | static const _kFontFam = 'DouyinIcons'; 7 | static const IconData chat_bubble = 8 | const IconData(0xe808, fontFamily: _kFontFam); 9 | static const IconData create = const IconData(0xe809, fontFamily: _kFontFam); 10 | static const IconData heart = const IconData(0xe80a, fontFamily: _kFontFam); 11 | static const IconData home = const IconData(0xe80b, fontFamily: _kFontFam); 12 | static const IconData messages = 13 | const IconData(0xe80c, fontFamily: _kFontFam); 14 | static const IconData profile = const IconData(0xe80d, fontFamily: _kFontFam); 15 | static const IconData reply = const IconData(0xe80e, fontFamily: _kFontFam); 16 | static const IconData search = const IconData(0xe80f, fontFamily: _kFontFam); 17 | } 18 | -------------------------------------------------------------------------------- /lib/lib/common/sizeconfig.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SizeConfig { 4 | static MediaQueryData? _mediaQueryData; 5 | static double? screenWidth; 6 | static double? screenHeight; 7 | static double? blockSizeHorizontal; 8 | static double? blockSizeVertical; 9 | 10 | static double? _safeAreaHorizontal; 11 | static double? _safeAreaVertical; 12 | static double? safeBlockHorizontal; 13 | static double? safeBlockVertical; 14 | 15 | void init(BuildContext context) { 16 | _mediaQueryData = MediaQuery.of(context); 17 | screenWidth = _mediaQueryData!.size.width; 18 | screenHeight = _mediaQueryData!.size.height; 19 | blockSizeHorizontal = screenWidth! / 100; 20 | blockSizeVertical = screenHeight! / 100; 21 | 22 | _safeAreaHorizontal = 23 | _mediaQueryData!.padding.left + _mediaQueryData!.padding.right; 24 | _safeAreaVertical = 25 | _mediaQueryData!.padding.top + _mediaQueryData!.padding.bottom; 26 | safeBlockHorizontal = (screenWidth! - _safeAreaHorizontal!) / 100; 27 | safeBlockVertical = (screenHeight! - _safeAreaVertical!) / 100; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/lib/common/utils.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:intl/intl.dart'; 4 | 5 | // Convert a number to Human readable format (e.g. 1.5k, 5m, 1b) 6 | String formattedNumber(dynamic numberToFormat) { 7 | if (double.parse(numberToFormat.toString()) < 1000) { 8 | return numberToFormat.toString(); 9 | } 10 | var _formattedNumber = NumberFormat.compactCurrency( 11 | decimalDigits: 2, 12 | symbol: 13 | '', // if you want to add currency symbol then pass that in this else leave it empty. 14 | ).format(numberToFormat); 15 | return _formattedNumber; 16 | } 17 | 18 | Color hexToColor(String code) { 19 | return new Color(int.parse(code.substring(1, 7), radix: 16) + 0xFF000000); 20 | } 21 | 22 | extension MapExtension on Map? { 23 | bool get isNullOrEmpty => (this == null || this!.isEmpty); 24 | } 25 | 26 | extension IterableExtension on Iterable? { 27 | bool get isNullOrEmpty => (this == null || this!.isEmpty); 28 | } 29 | 30 | extension StringExtension on String? { 31 | bool get isNullOrEmpty => (this == null || this!.isEmpty); 32 | } 33 | 34 | extension OptionsExtension on Options? { 35 | bool get isNullOrEmpty => (this == null); 36 | } 37 | -------------------------------------------------------------------------------- /lib/lib/constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const Color kActiveColor = Color.fromARGB(255, 32, 211, 234); 4 | const Color kSecondaryColor = Color.fromARGB(255, 250, 45, 108); 5 | // const Color kPrimaryColor = kSecondaryColor; 6 | 7 | const Color kPrimaryColor = Color(0xff161616); 8 | 9 | const Color kFontColor = Color(0xffe0e0e0); 10 | 11 | const Color kBgColorTop = Color(0xff6e00ff); 12 | const Color kBgColorBottom = Color(0xffa307dd); 13 | const Color kButtomColor = Color.fromRGBO(252, 1, 86, 1); 14 | 15 | const String apiUrl = "https://api.telsacoin.io/api"; 16 | 17 | //const String apiDevUrl = "http://10.0.2.2:8181/api"; 18 | const String apiDevUrl = "http://47.95.209.198:8181/api"; 19 | 20 | const String apiPortail = "http://47.95.209.198:8181"; 21 | -------------------------------------------------------------------------------- /lib/lib/http/base/base_controller.dart: -------------------------------------------------------------------------------- 1 | class BaseController {} 2 | -------------------------------------------------------------------------------- /lib/lib/http/base/base_domain.dart: -------------------------------------------------------------------------------- 1 | class BaseDomain { 2 | static final String xUSERTOKEN = "x-user-token"; 3 | 4 | static final String xUserTICKET = "x-user-ticket"; 5 | 6 | static final String xPERMITSIGN = "x-permit-sign"; 7 | 8 | static final String xPERMITTOKEN = "x-permit-token"; 9 | 10 | static final String xSYSTEMCODE = "x-system-code"; 11 | 12 | static final String xRESOURCECODE = "x-resource-code"; 13 | 14 | static final String xUSERREFRESHTOKEN = "x-user-refresh-token"; 15 | 16 | static final String xTENANTREQUIRED = "x-tenant-required"; 17 | 18 | static final String xMENUCODE = "x-menu-code"; 19 | 20 | static final String xDATAACCESSKIND = "x-data-access-kind"; 21 | 22 | static final String xREQUESTGLOBALID = "x-request-globalId"; 23 | 24 | static final String xREQUESTID = "x-request-id"; 25 | 26 | static final String xMENUREFCODE = "x-menu-ref-code"; 27 | 28 | static final String xMENUREFSCOPE = "x-menu-ref-scope"; 29 | 30 | static final String xBUSINESSCODE = "x-business-code"; 31 | } 32 | -------------------------------------------------------------------------------- /lib/lib/http/interceptors/header_interceptor.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:telsavideo/http/base/base_domain.dart'; 3 | import 'package:telsavideo/http/util.dart'; 4 | 5 | class HeaderInterceptor implements Interceptor { 6 | @override 7 | void onError(DioError err, ErrorInterceptorHandler handler) async { 8 | handler.next(err); 9 | } 10 | 11 | @override 12 | void onRequest( 13 | RequestOptions options, RequestInterceptorHandler handler) async { 14 | try { 15 | String token = ''; 16 | await Util.getString(BaseDomain.xUSERTOKEN).then((text) { 17 | token = text != null ? text : ""; 18 | }); 19 | 20 | options.headers.putIfAbsent( 21 | 'user-agent', 22 | () => 23 | 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1'); 24 | 25 | if (token.length > 0) { 26 | options.headers[BaseDomain.xUSERTOKEN] = token; 27 | } 28 | } catch (e) { 29 | print(e); 30 | } 31 | handler.next(options); 32 | } 33 | 34 | @override 35 | void onResponse(Response response, ResponseInterceptorHandler handler) async { 36 | handler.next(response); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/lib/http/request/request_method.dart: -------------------------------------------------------------------------------- 1 | class RequestMethod { 2 | static const String GET = "GET"; 3 | 4 | static const String POST = "POST"; 5 | 6 | static const String PUT = "PUT"; 7 | 8 | static const String PATCH = "PATCH"; 9 | 10 | static const String DELETE = "DELETE"; 11 | } 12 | -------------------------------------------------------------------------------- /lib/lib/http/response/result.dart: -------------------------------------------------------------------------------- 1 | class Result { 2 | int? code; 3 | String? msg; 4 | bool? status; 5 | T? data; 6 | 7 | Result(this.code, this.msg, this.status, this.data); 8 | 9 | static Result success(int code, String msg, T data) { 10 | Result result = new Result(code, msg, true, data); 11 | result.code = code; 12 | result.msg = msg; 13 | result.data = data; 14 | result.status = true; 15 | return result; 16 | } 17 | 18 | Result.fromJson(Map? json) { 19 | code = json!['code']; 20 | msg = json['msg']; 21 | data = json['data']; 22 | status = json['success']; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/lib/http/response/result_code.dart: -------------------------------------------------------------------------------- 1 | enum ResultCode { 2 | SUCCESS, 3 | FAILURE, 4 | } 5 | 6 | extension ResultCodeExtension on ResultCode { 7 | static const labels = [200, 500]; 8 | static const values = ["SUCCESS", "FAILURE"]; 9 | 10 | int get label => labels[this.index]; 11 | String get value => values[this.index]; 12 | 13 | static ResultCode parse(int i) { 14 | return ResultCode.values[i]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/lib/l10n/app_de.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/lib/l10n/app_en.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/lib/l10n/app_es.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/lib/l10n/app_fr.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/lib/l10n/app_it.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/lib/l10n/app_lo.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/lib/l10n/app_uk.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"For You", 3 | "home_top_following":"Following", 4 | "home_share":"share", 5 | "home_buttom_title":"Home", 6 | "home_buttom_discover":"Discover", 7 | "home_buttom_notification":"Notifications", 8 | "home_buttom_persion":"Me" 9 | } -------------------------------------------------------------------------------- /lib/lib/l10n/app_zh.arb: -------------------------------------------------------------------------------- 1 | { 2 | "home_top_foryou":"推荐", 3 | "home_top_following":"关注", 4 | "home_share":"分享", 5 | "home_buttom_title":"首页", 6 | "home_buttom_discover":"发现", 7 | "home_buttom_notification":"通知", 8 | "home_buttom_persion":"我" 9 | } -------------------------------------------------------------------------------- /lib/lib/models/Episode.dart: -------------------------------------------------------------------------------- 1 | /// The Episode model. 2 | /// Represents a Episode. 3 | class Episode { 4 | int? id; 5 | int? episodeId; 6 | String? taskId; 7 | String? name; 8 | String? podcastName; 9 | String? summary; 10 | String? image; 11 | 12 | /// Default constructor. 13 | Episode({ 14 | this.id, 15 | this.episodeId, 16 | this.taskId, 17 | this.name, 18 | this.podcastName, 19 | this.summary, 20 | this.image, 21 | }); 22 | 23 | /// Constructs this object from a json object. 24 | Episode.fromJson(Map data) { 25 | id = data['id']; 26 | episodeId = data['episodeId']; 27 | taskId = data['taskId']; 28 | name = data['name']; 29 | podcastName = data['podcastName']; 30 | summary = data['summary']; 31 | image = data['image']; 32 | } 33 | 34 | /// Gets the json representation of this object. 35 | Map toJson() { 36 | return { 37 | 'id': id, 38 | 'episodeId': episodeId, 39 | 'taskId': taskId, 40 | 'name': name, 41 | 'podcastName': podcastName, 42 | 'summary': summary, 43 | 'image': image, 44 | }; 45 | } 46 | 47 | /// Gets the object at specified key. 48 | /// This doesn't return the object reference. Instead it returns a clone. 49 | dynamic operator [](String key) => toJson()[key]; 50 | } 51 | -------------------------------------------------------------------------------- /lib/lib/models/category.dart: -------------------------------------------------------------------------------- 1 | class Category { 2 | final String id; 3 | final String name; 4 | final String? description; 5 | 6 | Category({ 7 | required this.id, 8 | required this.name, 9 | this.description, 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /lib/lib/models/dto/comment/comment_item_digg_dto.dart: -------------------------------------------------------------------------------- 1 | class CommentItemDiggDto { 2 | String? videoId; 3 | 4 | CommentItemDiggDto({this.videoId}); 5 | } 6 | -------------------------------------------------------------------------------- /lib/lib/models/dto/comment/comment_item_list_dto.dart: -------------------------------------------------------------------------------- 1 | class CommentItemListDto { 2 | CommentItemListDto(); 3 | } 4 | -------------------------------------------------------------------------------- /lib/lib/models/dto/comment/comment_list_reply_dto.dart: -------------------------------------------------------------------------------- 1 | class CommentListReplyDto {} 2 | -------------------------------------------------------------------------------- /lib/lib/models/dto/core/base_dto.dart: -------------------------------------------------------------------------------- 1 | import 'package:platform/platform.dart'; 2 | 3 | class BaseDto { 4 | int? aid; 5 | String? app_name; 6 | String? device_platform; 7 | int? device_id; 8 | String? region; 9 | String? priority_region; 10 | String? os; 11 | String? referer; 12 | String? root_referer; 13 | bool? cookie_enabled; 14 | String? screen_width; 15 | String? screen_height; 16 | String? browser_language; 17 | String? browser_platform; 18 | 19 | BaseDto() { 20 | BaseDto.getInstance(); 21 | } 22 | 23 | ///singleton instance 24 | static BaseDto? _instance; 25 | 26 | static _getInstance() { 27 | if (null == _instance) { 28 | _instance = BaseDto._internal(); 29 | } 30 | return _instance; 31 | } 32 | 33 | factory BaseDto.getInstance() => _getInstance(); 34 | 35 | BaseDto._internal() { 36 | aid = 1989; 37 | app_name = "DTOK"; 38 | device_platform = Platform.operatingSystemValues.first; 39 | device_id = null; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/lib/models/dto/discover/banner_dto.dart: -------------------------------------------------------------------------------- 1 | /// banner dto 2 | class BannerDto { 3 | int? cursor; 4 | int? count; 5 | BannerDto({this.cursor, this.count}); 6 | } 7 | -------------------------------------------------------------------------------- /lib/lib/models/dto/discover/discover_challenge_dto.dart: -------------------------------------------------------------------------------- 1 | class DiscoverChallengeDto { 2 | int? cursor; 3 | int? count; 4 | DiscoverChallengeDto([this.cursor, this.count]); 5 | } 6 | -------------------------------------------------------------------------------- /lib/lib/models/dto/discover/discover_music_dto.dart: -------------------------------------------------------------------------------- 1 | class DiscoverMusicDto { 2 | int? cursor; 3 | int? count; 4 | DiscoverMusicDto([this.cursor, this.count]); 5 | } 6 | -------------------------------------------------------------------------------- /lib/lib/models/dto/discover/discover_user_dto.dart: -------------------------------------------------------------------------------- 1 | class DiscoverUserDto { 2 | int? cursor; 3 | int? count; 4 | DiscoverUserDto([this.cursor, this.count]); 5 | } 6 | -------------------------------------------------------------------------------- /lib/lib/models/dto/forgetpwd/forgetpwd_dto.dart: -------------------------------------------------------------------------------- 1 | class ForgetPwdDto {} 2 | -------------------------------------------------------------------------------- /lib/lib/models/dto/message/notification_dto.dart: -------------------------------------------------------------------------------- 1 | import 'package:telsavideo/models/dto/core/base_dto.dart'; 2 | 3 | class NotificationDto extends BaseDto {} 4 | -------------------------------------------------------------------------------- /lib/lib/models/dto/message/notification_make_read_dto.dart: -------------------------------------------------------------------------------- 1 | class NotificationMakeReadDto {} 2 | -------------------------------------------------------------------------------- /lib/lib/models/dto/recommend/itemlist_dto.dart: -------------------------------------------------------------------------------- 1 | import 'package:telsavideo/models/dto/core/base_dto.dart'; 2 | 3 | class ItemListDto extends BaseDto { 4 | int? cursor; 5 | int? count; 6 | 7 | ItemListDto([this.cursor, this.count]); 8 | } 9 | -------------------------------------------------------------------------------- /lib/lib/models/dto/signin/signin_dto.dart: -------------------------------------------------------------------------------- 1 | class SignInDto { 2 | String? username; 3 | String? password; 4 | 5 | SignInDto([this.username, this.password]); 6 | } 7 | -------------------------------------------------------------------------------- /lib/lib/models/dto/signup/signup_dto.dart: -------------------------------------------------------------------------------- 1 | class SignUpDto { 2 | String? username; 3 | String? email; 4 | String? password; 5 | 6 | SignUpDto([this.username, this.email, this.password]); 7 | } 8 | -------------------------------------------------------------------------------- /lib/lib/models/vo/comment/comment_item_digg_vo.dart: -------------------------------------------------------------------------------- 1 | class CommentItemDiggVo { 2 | CommentItemDiggVo(); 3 | factory CommentItemDiggVo.fromJson(Map json) => 4 | CommentItemDiggVo(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/lib/models/vo/discover/banner_vo.dart: -------------------------------------------------------------------------------- 1 | class BannerVo { 2 | String? image; 3 | String? title; 4 | String? url; 5 | 6 | BannerVo({this.image, this.title, this.url}); 7 | factory BannerVo.toJson(Map json) => BannerVo(); 8 | } 9 | -------------------------------------------------------------------------------- /lib/lib/models/vo/discover/discover_challenage_vo.dart: -------------------------------------------------------------------------------- 1 | class DiscoverChallengeVo { 2 | DiscoverChallengeVo(); 3 | 4 | factory DiscoverChallengeVo.fromJson(Map json) => 5 | DiscoverChallengeVo(); 6 | } 7 | -------------------------------------------------------------------------------- /lib/lib/models/vo/discover/discover_user_vo.dart: -------------------------------------------------------------------------------- 1 | class DiscoverUserVo { 2 | DiscoverUserVo(); 3 | factory DiscoverUserVo.fromJson(Map json) => 4 | DiscoverUserVo(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/lib/models/vo/message/notification_make_read_vo.dart: -------------------------------------------------------------------------------- 1 | class NotificationMakeReadVo { 2 | NotificationMakeReadVo(); 3 | factory NotificationMakeReadVo.fromJson(Map json) => 4 | NotificationMakeReadVo(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/lib/models/vo/message/notification_vo.dart: -------------------------------------------------------------------------------- 1 | class NotificationVo { 2 | NotificationVo(); 3 | 4 | factory NotificationVo.fromJson(Map json) => 5 | NotificationVo(); 6 | } 7 | -------------------------------------------------------------------------------- /lib/lib/models/vo/signin/signin_vo.dart: -------------------------------------------------------------------------------- 1 | /// the telsacoin 2 | /// author:cw 3 | 4 | class SignInVo { 5 | String? accessToken; 6 | int? expiresIn; 7 | DateTime? expiresInDate; 8 | String? permitToken; 9 | String? refreshToken; 10 | String? token; 11 | String? userInfo; 12 | String? userName; 13 | 14 | SignInVo({ 15 | this.accessToken, 16 | this.expiresIn, 17 | this.expiresInDate, 18 | this.permitToken, 19 | this.refreshToken, 20 | this.token, 21 | this.userInfo, 22 | this.userName, 23 | }); 24 | 25 | factory SignInVo.fromJson(Map json) => SignInVo( 26 | accessToken: json["accessToken"] == null ? null : json["accessToken"], 27 | expiresIn: json["expiresIn"] == null ? null : json["expiresIn"], 28 | expiresInDate: json["expiresInDate"] == null 29 | ? null 30 | : DateTime.parse(json["expiresInDate"]), 31 | permitToken: json["permitToken"] == null ? null : json["permitToken"], 32 | refreshToken: 33 | json["refreshToken"] == null ? null : json["refreshToken"], 34 | token: json["token"] == null ? null : json["token"], 35 | userInfo: json["userInfo"] == null ? null : json["userInfo"], 36 | userName: json["userName"] == null ? null : json["userName"], 37 | ); 38 | 39 | Map toJson() => {}; 40 | } 41 | -------------------------------------------------------------------------------- /lib/lib/models/vo/signup/signup.dart: -------------------------------------------------------------------------------- 1 | class SignUpVO { 2 | String? message; 3 | 4 | SignUpVO([this.message]); 5 | 6 | factory SignUpVO.fromJson(Map json) => SignUpVO(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/lib/models/vo/user/user_login.dart: -------------------------------------------------------------------------------- 1 | class LoginResponse {} 2 | -------------------------------------------------------------------------------- /lib/lib/services/endpoints.dart: -------------------------------------------------------------------------------- 1 | /// The URL to access in order to receive a SteemConnect auth token 2 | final Uri authEndpoint = Uri.parse( 3 | 'https://steemconnect.com/api/oauth2/authorize?'); 4 | 5 | /// The URL to access to exchange an authorization token for an access token. 6 | final Uri tokenEndpoint = Uri.parse( 7 | 'http://localhost:8000/complete/steemconnect/'); 8 | 9 | /// The URL to access to revoke an authorization token for an application 10 | final Uri revocationEndpoint = Uri.parse( 11 | 'https://v2.steemconnect.com/api/oauth2/token/revoke'); 12 | 13 | /// The URL to access in order to make API calls to the SteemConnect API. 14 | final Uri scRoot = Uri.parse('https://v2.steemconnect.com/api'); 15 | 16 | /// The URL to access in order to make API calls to the SteemJS API. 17 | final Uri sjsRoot = Uri.parse('https://api.steemjs.com'); -------------------------------------------------------------------------------- /lib/lib/services/firestore_service.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/lib/services/firestore_service.dart -------------------------------------------------------------------------------- /lib/lib/services/launchurl.dart: -------------------------------------------------------------------------------- 1 | import 'package:url_launcher/url_launcher.dart'; 2 | 3 | class Launcher { 4 | Launcher(); 5 | 6 | Future launchInBrowser(String url) async { 7 | if (await canLaunch(url)) { 8 | await launch(url, forceSafariVC: false, forceWebView: false); 9 | } else { 10 | throw 'Could not launch $url'; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/lib/services/requestor.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:http/src/base_client.dart' as http; 4 | import 'package:http/src/request.dart' as http; 5 | import 'package:http/src/response.dart' as http; 6 | 7 | import 'package:telsavideo/models/impl_models.dart'; 8 | 9 | abstract class Requestor { 10 | //build uri 11 | Uri buildUri(String apiSrc, String path, 12 | {Map? queryParameters, String? method}); 13 | 14 | Map buildBody(Map body); 15 | 16 | Future request(String apiSrc, String path, 17 | {Map? body, 18 | Map? queryParameters, 19 | String? method}) { 20 | var uri = buildUri(apiSrc, path, 21 | queryParameters: queryParameters, method: method); 22 | var req = new http.Request(method ?? 'GET', uri); 23 | req.headers['Content-Type'] = 'application/json'; 24 | req.headers['Accept'] = 'application/json'; 25 | 26 | if (body?.isNotEmpty == true) { 27 | req.bodyFields = buildBody(body!); 28 | } 29 | 30 | return send(req); 31 | } 32 | 33 | Future send(http.Request request); 34 | } 35 | -------------------------------------------------------------------------------- /lib/lib/tabs/addTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/lib/tabs/addTab.dart -------------------------------------------------------------------------------- /lib/lib/tabs/chatTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/lib/tabs/chatTab.dart -------------------------------------------------------------------------------- /lib/lib/tabs/homeTab.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class HomeTab extends StatefulWidget { 4 | @override 5 | State createState() => _HomeTabState(); 6 | } 7 | 8 | class _HomeTabState extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | child: Container(), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/lib/tabs/profileTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/lib/tabs/profileTab.dart -------------------------------------------------------------------------------- /lib/lib/tabs/searchTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/lib/tabs/searchTab.dart -------------------------------------------------------------------------------- /lib/lib/utils/ipfs.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ffi'; 2 | 3 | import 'package:ffi/ffi.dart'; 4 | 5 | typedef get_bycid_func = Pointer Function(Pointer cidParam); 6 | typedef GetByCid = Pointer Function(Pointer cidParam); 7 | final dylib = DynamicLibrary.open('ipfslite.so'); 8 | 9 | final GetByCid getByCid = 10 | dylib.lookup>('GetByCid').asFunction(); 11 | 12 | String getIPFSData(cidParam) { 13 | final cid = StringUtf8Pointer(cidParam).toNativeUtf8(); 14 | final data = Utf8Pointer(getByCid(cid)).toDartString(); 15 | return data; 16 | } 17 | -------------------------------------------------------------------------------- /lib/models/Episode.dart: -------------------------------------------------------------------------------- 1 | /// The Episode model. 2 | /// Represents a Episode. 3 | class Episode { 4 | int? id; 5 | int? episodeId; 6 | String? taskId; 7 | String? name; 8 | String? podcastName; 9 | String? summary; 10 | String? image; 11 | 12 | /// Default constructor. 13 | Episode({ 14 | this.id, 15 | this.episodeId, 16 | this.taskId, 17 | this.name, 18 | this.podcastName, 19 | this.summary, 20 | this.image, 21 | }); 22 | 23 | /// Constructs this object from a json object. 24 | Episode.fromJson(Map data) { 25 | id = data['id']; 26 | episodeId = data['episodeId']; 27 | taskId = data['taskId']; 28 | name = data['name']; 29 | podcastName = data['podcastName']; 30 | summary = data['summary']; 31 | image = data['image']; 32 | } 33 | 34 | /// Gets the json representation of this object. 35 | Map toJson() { 36 | return { 37 | 'id': id, 38 | 'episodeId': episodeId, 39 | 'taskId': taskId, 40 | 'name': name, 41 | 'podcastName': podcastName, 42 | 'summary': summary, 43 | 'image': image, 44 | }; 45 | } 46 | 47 | /// Gets the object at specified key. 48 | /// This doesn't return the object reference. Instead it returns a clone. 49 | dynamic operator [](String key) => toJson()[key]; 50 | } 51 | -------------------------------------------------------------------------------- /lib/models/category.dart: -------------------------------------------------------------------------------- 1 | class Category { 2 | final String name; 3 | final int discussions; 4 | final String lastPost; 5 | final double totalPayouts; 6 | 7 | Category({ 8 | required this.name, 9 | required this.discussions, 10 | required this.lastPost, 11 | required this.totalPayouts, 12 | }); 13 | 14 | factory Category.fromJson(Map json) { 15 | return Category( 16 | name: json['name'] as String, 17 | discussions: json['discussions'] as int, 18 | lastPost: json['last_post'] as String, 19 | totalPayouts: (json['total_payouts'] as num).toDouble(), 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/models/dto/comment/comment_item_digg_dto.dart: -------------------------------------------------------------------------------- 1 | class CommentItemDiggDto { 2 | String? videoId; 3 | 4 | CommentItemDiggDto({this.videoId}); 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/dto/comment/comment_item_list_dto.dart: -------------------------------------------------------------------------------- 1 | class CommentItemListDto { 2 | CommentItemListDto(); 3 | } 4 | -------------------------------------------------------------------------------- /lib/models/dto/comment/comment_list_reply_dto.dart: -------------------------------------------------------------------------------- 1 | class CommentListReplyDto {} 2 | -------------------------------------------------------------------------------- /lib/models/dto/core/base_dto.dart: -------------------------------------------------------------------------------- 1 | import 'package:platform/platform.dart'; 2 | 3 | class BaseDto { 4 | int? aid; 5 | String? app_name; 6 | String? device_platform; 7 | int? device_id; 8 | String? region; 9 | String? priority_region; 10 | String? os; 11 | String? referer; 12 | String? root_referer; 13 | bool? cookie_enabled; 14 | String? screen_width; 15 | String? screen_height; 16 | String? browser_language; 17 | String? browser_platform; 18 | 19 | BaseDto() { 20 | BaseDto.getInstance(); 21 | } 22 | 23 | ///singleton instance 24 | static BaseDto? _instance; 25 | 26 | static _getInstance() { 27 | if (null == _instance) { 28 | _instance = BaseDto._internal(); 29 | } 30 | return _instance; 31 | } 32 | 33 | factory BaseDto.getInstance() => _getInstance(); 34 | 35 | BaseDto._internal() { 36 | aid = 1989; 37 | app_name = "DTOK"; 38 | device_platform = Platform.operatingSystemValues.first; 39 | device_id = null; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/models/dto/discover/banner_dto.dart: -------------------------------------------------------------------------------- 1 | /// banner dto 2 | class BannerDto { 3 | int? cursor; 4 | int? count; 5 | BannerDto({this.cursor, this.count}); 6 | } 7 | -------------------------------------------------------------------------------- /lib/models/dto/discover/discover_challenge_dto.dart: -------------------------------------------------------------------------------- 1 | class DiscoverChallengeDto { 2 | int? cursor; 3 | int? count; 4 | DiscoverChallengeDto([this.cursor, this.count]); 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/dto/discover/discover_music_dto.dart: -------------------------------------------------------------------------------- 1 | class DiscoverMusicDto { 2 | int? cursor; 3 | int? count; 4 | DiscoverMusicDto([this.cursor, this.count]); 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/dto/discover/discover_user_dto.dart: -------------------------------------------------------------------------------- 1 | class DiscoverUserDto { 2 | int? cursor; 3 | int? count; 4 | DiscoverUserDto([this.cursor, this.count]); 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/dto/forgetpwd/forgetpwd_dto.dart: -------------------------------------------------------------------------------- 1 | class ForgetPwdDto {} 2 | -------------------------------------------------------------------------------- /lib/models/dto/message/notification_dto.dart: -------------------------------------------------------------------------------- 1 | import 'package:telsavideo/models/dto/core/base_dto.dart'; 2 | 3 | class NotificationDto extends BaseDto {} 4 | -------------------------------------------------------------------------------- /lib/models/dto/message/notification_make_read_dto.dart: -------------------------------------------------------------------------------- 1 | class NotificationMakeReadDto {} 2 | -------------------------------------------------------------------------------- /lib/models/dto/recommend/itemlist_dto.dart: -------------------------------------------------------------------------------- 1 | import 'package:telsavideo/models/dto/core/base_dto.dart'; 2 | 3 | class ItemListDto extends BaseDto { 4 | int? cursor; 5 | int? count; 6 | 7 | ItemListDto([this.cursor, this.count]); 8 | } 9 | -------------------------------------------------------------------------------- /lib/models/dto/signin/captcha_image_dto.dart: -------------------------------------------------------------------------------- 1 | class CaptchaImageDto {} 2 | -------------------------------------------------------------------------------- /lib/models/dto/signin/signin_dto.dart: -------------------------------------------------------------------------------- 1 | class SignInDto { 2 | String? username; 3 | String? password; 4 | 5 | SignInDto([this.username, this.password]); 6 | } 7 | -------------------------------------------------------------------------------- /lib/models/dto/signup/signup_dto.dart: -------------------------------------------------------------------------------- 1 | class SignUpDto { 2 | String? username; 3 | String? email; 4 | String? password; 5 | 6 | SignUpDto([this.username, this.email, this.password]); 7 | } 8 | -------------------------------------------------------------------------------- /lib/models/vo/comment/comment_item_digg_vo.dart: -------------------------------------------------------------------------------- 1 | class CommentItemDiggVo { 2 | CommentItemDiggVo(); 3 | factory CommentItemDiggVo.fromJson(Map json) => 4 | CommentItemDiggVo(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/vo/discover/banner_vo.dart: -------------------------------------------------------------------------------- 1 | class BannerVo { 2 | String? image; 3 | String? title; 4 | String? url; 5 | 6 | BannerVo({this.image, this.title, this.url}); 7 | factory BannerVo.toJson(Map json) => BannerVo(); 8 | } 9 | -------------------------------------------------------------------------------- /lib/models/vo/discover/discover_challenage_vo.dart: -------------------------------------------------------------------------------- 1 | class DiscoverChallengeVo { 2 | DiscoverChallengeVo(); 3 | 4 | factory DiscoverChallengeVo.fromJson(Map json) => 5 | DiscoverChallengeVo(); 6 | } 7 | -------------------------------------------------------------------------------- /lib/models/vo/discover/discover_user_vo.dart: -------------------------------------------------------------------------------- 1 | class DiscoverUserVo { 2 | DiscoverUserVo(); 3 | factory DiscoverUserVo.fromJson(Map json) => 4 | DiscoverUserVo(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/vo/message/notification_make_read_vo.dart: -------------------------------------------------------------------------------- 1 | class NotificationMakeReadVo { 2 | NotificationMakeReadVo(); 3 | factory NotificationMakeReadVo.fromJson(Map json) => 4 | NotificationMakeReadVo(); 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/vo/message/notification_vo.dart: -------------------------------------------------------------------------------- 1 | class NotificationVo { 2 | NotificationVo(); 3 | 4 | factory NotificationVo.fromJson(Map json) => 5 | NotificationVo(); 6 | } 7 | -------------------------------------------------------------------------------- /lib/models/vo/signin/captcha_image_vo.dart: -------------------------------------------------------------------------------- 1 | class CaptchaImageVo { 2 | String? img; 3 | String? code; 4 | bool? captchaOnOff; 5 | String? uuid; 6 | CaptchaImageVo({this.img, this.code, this.captchaOnOff, this.uuid}); 7 | 8 | factory CaptchaImageVo.fromJson(Map json) => CaptchaImageVo( 9 | img: json["img"] == null ? null : json["img"], 10 | code: json["code"] == null ? null : json["code"], 11 | captchaOnOff: 12 | json["captchaOnOff"] == null ? null : json["captchaOnOff"], 13 | uuid: json["uuid"] == null ? null : json["uuid"], 14 | ); 15 | 16 | Map toJson() => {}; 17 | } 18 | -------------------------------------------------------------------------------- /lib/models/vo/signin/signin_vo.dart: -------------------------------------------------------------------------------- 1 | /// the telsacoin 2 | /// author:cw 3 | 4 | class SignInVo { 5 | String? accessToken; 6 | int? expiresIn; 7 | DateTime? expiresInDate; 8 | String? permitToken; 9 | String? refreshToken; 10 | String? token; 11 | String? userInfo; 12 | String? userName; 13 | 14 | SignInVo({ 15 | this.accessToken, 16 | this.expiresIn, 17 | this.expiresInDate, 18 | this.permitToken, 19 | this.refreshToken, 20 | this.token, 21 | this.userInfo, 22 | this.userName, 23 | }); 24 | 25 | factory SignInVo.fromJson(Map json) => SignInVo( 26 | accessToken: json["accessToken"] == null ? null : json["accessToken"], 27 | expiresIn: json["expiresIn"] == null ? null : json["expiresIn"], 28 | expiresInDate: json["expiresInDate"] == null 29 | ? null 30 | : DateTime.parse(json["expiresInDate"]), 31 | permitToken: json["permitToken"] == null ? null : json["permitToken"], 32 | refreshToken: 33 | json["refreshToken"] == null ? null : json["refreshToken"], 34 | token: json["token"] == null ? null : json["token"], 35 | userInfo: json["userInfo"] == null ? null : json["userInfo"], 36 | userName: json["userName"] == null ? null : json["userName"], 37 | ); 38 | 39 | Map toJson() => {}; 40 | } 41 | -------------------------------------------------------------------------------- /lib/models/vo/signup/signup.dart: -------------------------------------------------------------------------------- 1 | class SignUpVO { 2 | String? message; 3 | 4 | SignUpVO([this.message]); 5 | 6 | factory SignUpVO.fromJson(Map json) => SignUpVO(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/models/vo/user/user_login.dart: -------------------------------------------------------------------------------- 1 | class LoginResponse {} 2 | -------------------------------------------------------------------------------- /lib/services/endpoints.dart: -------------------------------------------------------------------------------- 1 | /// The URL to access in order to receive a SteemConnect auth token 2 | final Uri authEndpoint = Uri.parse( 3 | 'https://steemconnect.com/api/oauth2/authorize?'); 4 | 5 | /// The URL to access to exchange an authorization token for an access token. 6 | final Uri tokenEndpoint = Uri.parse( 7 | 'http://localhost:8000/complete/steemconnect/'); 8 | 9 | /// The URL to access to revoke an authorization token for an application 10 | final Uri revocationEndpoint = Uri.parse( 11 | 'https://v2.steemconnect.com/api/oauth2/token/revoke'); 12 | 13 | /// The URL to access in order to make API calls to the SteemConnect API. 14 | final Uri scRoot = Uri.parse('https://v2.steemconnect.com/api'); 15 | 16 | /// The URL to access in order to make API calls to the SteemJS API. 17 | final Uri sjsRoot = Uri.parse('https://api.steemjs.com'); -------------------------------------------------------------------------------- /lib/services/firestore_service.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/services/firestore_service.dart -------------------------------------------------------------------------------- /lib/services/launchurl.dart: -------------------------------------------------------------------------------- 1 | import 'package:url_launcher/url_launcher.dart'; 2 | 3 | class Launcher { 4 | Launcher(); 5 | 6 | Future launchInBrowser(String url) async { 7 | if (await canLaunch(url)) { 8 | await launch(url, forceSafariVC: false, forceWebView: false); 9 | } else { 10 | throw 'Could not launch $url'; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/services/requestor.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:http/src/base_client.dart' as http; 4 | import 'package:http/src/request.dart' as http; 5 | import 'package:http/src/response.dart' as http; 6 | 7 | import 'package:telsavideo/models/impl_models.dart'; 8 | 9 | abstract class Requestor { 10 | //build uri 11 | Uri buildUri(String apiSrc, String path, 12 | {Map? queryParameters, String? method}); 13 | 14 | Map buildBody(Map body); 15 | 16 | Future request(String apiSrc, String path, 17 | {Map? body, 18 | Map? queryParameters, 19 | String? method}) { 20 | var uri = buildUri(apiSrc, path, 21 | queryParameters: queryParameters, method: method); 22 | var req = new http.Request(method ?? 'GET', uri); 23 | req.headers['Content-Type'] = 'application/json'; 24 | req.headers['Accept'] = 'application/json'; 25 | 26 | if (body?.isNotEmpty == true) { 27 | req.bodyFields = buildBody(body!); 28 | } 29 | 30 | return send(req); 31 | } 32 | 33 | Future send(http.Request request); 34 | } 35 | -------------------------------------------------------------------------------- /lib/tabs/addTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/tabs/addTab.dart -------------------------------------------------------------------------------- /lib/tabs/chatTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/tabs/chatTab.dart -------------------------------------------------------------------------------- /lib/tabs/homeTab.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class HomeTab extends StatefulWidget { 4 | @override 5 | State createState() => _HomeTabState(); 6 | } 7 | 8 | class _HomeTabState extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | child: Container(), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/tabs/profileTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/tabs/profileTab.dart -------------------------------------------------------------------------------- /lib/tabs/searchTab.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/lib/tabs/searchTab.dart -------------------------------------------------------------------------------- /lib/utils/ipfs.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ffi'; 2 | 3 | import 'package:ffi/ffi.dart'; 4 | 5 | typedef get_bycid_func = Pointer Function(Pointer cidParam); 6 | typedef GetByCid = Pointer Function(Pointer cidParam); 7 | final dylib = DynamicLibrary.open('ipfslite.so'); 8 | 9 | final GetByCid getByCid = 10 | dylib.lookup>('GetByCid').asFunction(); 11 | 12 | String getIPFSData(cidParam) { 13 | final cid = StringUtf8Pointer(cidParam).toNativeUtf8(); 14 | final data = Utf8Pointer(getByCid(cid)).toDartString(); 15 | return data; 16 | } 17 | -------------------------------------------------------------------------------- /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 | 13 | void fl_register_plugins(FlPluginRegistry* registry) { 14 | g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = 15 | fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); 16 | file_selector_plugin_register_with_registrar(file_selector_linux_registrar); 17 | g_autoptr(FlPluginRegistrar) sentry_flutter_registrar = 18 | fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin"); 19 | sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar); 20 | g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = 21 | fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); 22 | url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); 23 | } 24 | -------------------------------------------------------------------------------- /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 | file_selector_linux 7 | sentry_flutter 8 | url_launcher_linux 9 | ) 10 | 11 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 12 | ) 13 | 14 | set(PLUGIN_BUNDLED_LIBRARIES) 15 | 16 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 17 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 18 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 19 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 20 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 21 | endforeach(plugin) 22 | 23 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 24 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 25 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 26 | endforeach(ffi_plugin) 27 | -------------------------------------------------------------------------------- /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? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Podfile: -------------------------------------------------------------------------------- 1 | platform :osx, '10.14' 2 | 3 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 4 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 5 | 6 | project 'Runner', { 7 | 'Debug' => :debug, 8 | 'Profile' => :release, 9 | 'Release' => :release, 10 | } 11 | 12 | def flutter_root 13 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) 14 | unless File.exist?(generated_xcode_build_settings_path) 15 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" 16 | end 17 | 18 | File.foreach(generated_xcode_build_settings_path) do |line| 19 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 20 | return matches[1].strip if matches 21 | end 22 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" 23 | end 24 | 25 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 26 | 27 | flutter_macos_podfile_setup 28 | 29 | target 'Runner' do 30 | use_frameworks! 31 | use_modular_headers! 32 | 33 | flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) 34 | end 35 | 36 | post_install do |installer| 37 | installer.pods_project.targets.each do |target| 38 | flutter_additional_macos_build_settings(target) 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /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 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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 = telsavideo 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.telsavideo 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2023 com.example. 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/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CLIENT_ID 6 | 165025931859-gnd7eqh8h2bedkbqg1l1tju9kh247lmr.apps.googleusercontent.com 7 | REVERSED_CLIENT_ID 8 | com.googleusercontent.apps.165025931859-gnd7eqh8h2bedkbqg1l1tju9kh247lmr 9 | ANDROID_CLIENT_ID 10 | 165025931859-l8npthdrgheseevn8furv4igl25patc3.apps.googleusercontent.com 11 | API_KEY 12 | AIzaSyAwQ2kWYjWYN0WYcyE_kECTawz6fFwuDG8 13 | GCM_SENDER_ID 14 | 165025931859 15 | PLIST_VERSION 16 | 1 17 | BUNDLE_ID 18 | com.example.telsavideo 19 | PROJECT_ID 20 | dtok-438fb 21 | STORAGE_BUCKET 22 | dtok-438fb.appspot.com 23 | IS_ADS_ENABLED 24 | 25 | IS_ANALYTICS_ENABLED 26 | 27 | IS_APPINVITE_ENABLED 28 | 29 | IS_GCM_ENABLED 30 | 31 | IS_SIGNIN_ENABLED 32 | 33 | GOOGLE_APP_ID 34 | 1:165025931859:ios:98663ecdd18b70d8885ca6 35 | DATABASE_URL 36 | https://dtok-438fb-default-rtdb.firebaseio.com 37 | 38 | -------------------------------------------------------------------------------- /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.init() 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/firebase_app_id_file.json: -------------------------------------------------------------------------------- 1 | { 2 | "file_generated_by": "FlutterFire CLI", 3 | "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", 4 | "GOOGLE_APP_ID": "1:165025931859:ios:98663ecdd18b70d8885ca6", 5 | "FIREBASE_PROJECT_ID": "dtok-438fb", 6 | "GCM_SENDER_ID": "165025931859" 7 | } -------------------------------------------------------------------------------- /storage.rules: -------------------------------------------------------------------------------- 1 | rules_version = '2'; 2 | service firebase.storage { 3 | match /b/{bucket}/o { 4 | match /{allPaths=**} { 5 | allow read, write: if false; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:telsavideo/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | //await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "telsavideo", 3 | "short_name": "telsavideo", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#hexcode", 7 | "theme_color": "#hexcode", 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 | } -------------------------------------------------------------------------------- /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 | 15 | void RegisterPlugins(flutter::PluginRegistry* registry) { 16 | FileSelectorWindowsRegisterWithRegistrar( 17 | registry->GetRegistrarForPlugin("FileSelectorWindows")); 18 | FirebaseCorePluginCApiRegisterWithRegistrar( 19 | registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); 20 | PermissionHandlerWindowsPluginRegisterWithRegistrar( 21 | registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); 22 | SentryFlutterPluginRegisterWithRegistrar( 23 | registry->GetRegistrarForPlugin("SentryFlutterPlugin")); 24 | UrlLauncherWindowsRegisterWithRegistrar( 25 | registry->GetRegistrarForPlugin("UrlLauncherWindows")); 26 | } 27 | -------------------------------------------------------------------------------- /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 | file_selector_windows 7 | firebase_core 8 | permission_handler_windows 9 | sentry_flutter 10 | url_launcher_windows 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}/windows 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}/windows plugins/${ffi_plugin}) 27 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 28 | endforeach(ffi_plugin) 29 | -------------------------------------------------------------------------------- /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"telsavideo", 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/telsacoin/telsavideo/a97d1d6a6948eb822e5cb021504f6da575c3865d/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 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------