├── ios
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
├── Runner.xcworkspace
│ └── contents.xcworkspacedata
└── Runner.xcodeproj
│ └── project.xcworkspace
│ └── contents.xcworkspacedata
├── lib
├── agor
│ └── utils
│ │ └── settings.dart
├── constants
│ ├── index.dart
│ ├── length.dart
│ ├── string.dart
│ ├── font.dart
│ ├── color.dart
│ └── filter_menu.dart
├── model
│ ├── state_model
│ │ ├── base_state_model.dart
│ │ ├── tab_state_model.dart
│ │ └── theme_state_model.dart
│ ├── beautyimage.dart
│ ├── buy_model.dart
│ ├── pood
│ │ ├── Index_tab_model.dart
│ │ └── video_detail_model.dart
│ ├── banner.dart
│ ├── kingkong.dart
│ ├── msg_model.dart
│ ├── sub_category.dart
│ ├── model_cell.dart
│ ├── cart.dart
│ ├── paylog_model.dart
│ ├── crowdfund.dart
│ ├── oder_model.dart
│ ├── product.dart
│ ├── search.dart
│ ├── song.dart
│ └── userinfo.dart
├── components
│ ├── keyboard
│ │ ├── pay_password.dart
│ │ ├── custom_keyboard_button.dart
│ │ └── CustomJPasswordFieldWidget.dart
│ ├── empty_component.dart
│ ├── in_text_dot.dart
│ ├── SliveTabbarDelege.dart
│ ├── load_more.dart
│ ├── tag_component.dart
│ ├── sliver_appbar_delegate.dart
│ ├── video_detail_item_component.dart
│ ├── ToastDialog.dart
│ ├── fiexdAppbar.dart
│ ├── dropdown.dart
│ ├── loginButton.dart
│ ├── icon_with_text.dart
│ ├── LoadingDialog.dart
│ ├── animation_text_component.dart
│ ├── wxshare.dart
│ ├── wxPay.dart
│ ├── index_model_list.dart
│ └── topbar.dart
├── model.dart
├── widgets
│ ├── index.dart
│ ├── divideline.dart
│ ├── CustomIcon.dart
│ ├── CustomInactiveIcon.dart
│ ├── topbar.dart
│ ├── category
│ │ ├── search_bar.dart
│ │ └── right_list_view.dart
│ ├── search
│ │ ├── listtopbar.dart
│ │ ├── recomend.dart
│ │ ├── hotSug.dart
│ │ └── topbar.dart
│ ├── NavigationIconView.dart
│ └── bottombar.dart
├── views
│ ├── details
│ │ ├── details_top_area.dart
│ │ ├── details_web.dart
│ │ ├── details_tabar.dart
│ │ ├── details_explain.dart
│ │ └── Details_bottom.dart
│ ├── player
│ │ ├── opacity_tap_widget.dart
│ │ └── audio_tool.dart
│ ├── search
│ │ ├── listtopbar.dart
│ │ ├── searchserver.dart
│ │ ├── search.dart
│ │ └── searchlist.dart
│ ├── cart
│ │ ├── cart.dart
│ │ └── cart_list.dart
│ ├── secendpage.dart
│ ├── person
│ │ ├── myfavera.dart
│ │ └── tempdemo_list.dart
│ ├── category_Page.dart
│ ├── noticeMessgeList.dart
│ ├── webView.dart
│ └── message_page.dart
├── api
│ └── movie.dart
├── video
│ ├── video_web.dart
│ ├── videoplayer.dart
│ ├── anims
│ │ ├── record_anim.dart
│ │ └── needle_anim.dart
│ ├── chewie_list_item.dart
│ ├── demo_video_player.dart
│ └── player.dart
├── main_provide.dart
├── data
│ ├── base2.dart
│ ├── base.dart
│ └── cart.dart
├── utils
│ ├── fiexdAppbar.dart
│ ├── utils.dart
│ ├── cacheUtil.dart
│ └── screen_util.dart
├── globleConfig.dart
├── routers
│ ├── routes.dart
│ └── router_handler.dart
├── movie
│ └── moviedetail.dart
└── SplashScreen.dart
├── images
├── x.png
├── 签到.png
├── 1199.png
├── 1200.png
├── about.png
├── bill.png
├── czzy.png
├── disc.png
├── gift.png
├── help.png
├── level.png
├── logo.png
├── order.png
├── quota.png
├── share.png
├── vip-白.png
├── vip.png
├── address.png
├── balance.png
├── bg_img.png
├── express.png
├── locking.png
├── logo_b.png
├── reward.png
├── thehorn.png
├── zhuanru.png
├── 2.0x
│ ├── logo.png
│ └── logo_b.png
├── 3.0x
│ ├── logo.png
│ └── logo_b.png
├── IMG_1198.PNG
├── IMG_1199.PNG
├── changehen.png
├── detailed.png
├── exchange.png
├── exchangetb.png
├── headerlogo.png
├── mustread.png
├── walletico.png
├── icon
│ ├── img_png.png
│ ├── icon_ann.png
│ ├── icon_apply.png
│ ├── icon_helpt.png
│ ├── icon_jilu.png
│ ├── icon_my_n.png
│ ├── icon_my_s.png
│ ├── icon_myimg.png
│ ├── icon_order.png
│ ├── icon_plan.png
│ ├── icon_purse.png
│ ├── icon_setup.png
│ ├── img_visa.png
│ ├── icon_card_n.png
│ ├── icon_card_s.png
│ ├── icon_home_n.png
│ ├── icon_home_s.png
│ ├── icon_pingan.png
│ ├── icon_wechat.png
│ └── icon_administer.png
├── icon_wechat.png
├── play_needle.png
├── play_needle2.png
├── placehoder_img.png
├── icon_placeholder.png
└── icon_default_avatar.png
├── assets
├── icon
│ └── icon.png
├── fonts
│ ├── Lobster-1.4.otf
│ └── FZLanTingHeiS-DB1-GB-Regular.TTF
└── images
│ ├── icon_empty.webp
│ ├── icon_home_tab.png
│ ├── icon_mine_tab.png
│ ├── icon_load_error.png
│ ├── icon_movie_tab.png
│ ├── icon_feature_tab.png
│ ├── icon_placeholder.png
│ ├── icon_popular_tab.png
│ ├── icon_default_avatar.png
│ ├── icon_videodetail_num.png
│ ├── icon_home_tab_pressed.png
│ ├── icon_mine_tab_pressed.png
│ ├── icon_movie_tab_pressed.png
│ ├── icon_videodetail_desc.png
│ ├── icon_videodetail_jishu.png
│ ├── icon_videodetail_name.png
│ ├── icon_feature_tab_pressed.png
│ ├── icon_popular_tab_pressed.png
│ ├── icon_videodetail_director.png
│ ├── icon_videodetail_playlist.png
│ └── icon_videodetail_starring.png
├── android
├── key.properties
├── app
│ ├── english_key.jks
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── logo_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── logo_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── logo_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── logo_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── logo_launcher.png
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ └── kotlin
│ │ │ │ └── be
│ │ │ │ └── goodgood
│ │ │ │ └── flutter_english
│ │ │ │ └── MainActivity.kt
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── settings.gradle
└── build.gradle
├── todo
├── .metadata
├── test
└── widget_test.dart
├── .gitignore
└── README.md
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
--------------------------------------------------------------------------------
/lib/agor/utils/settings.dart:
--------------------------------------------------------------------------------
1 | // Agora AppId
2 | const APP_ID = '';
3 |
--------------------------------------------------------------------------------
/images/x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/x.png
--------------------------------------------------------------------------------
/images/签到.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/签到.png
--------------------------------------------------------------------------------
/images/1199.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/1199.png
--------------------------------------------------------------------------------
/images/1200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/1200.png
--------------------------------------------------------------------------------
/images/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/about.png
--------------------------------------------------------------------------------
/images/bill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/bill.png
--------------------------------------------------------------------------------
/images/czzy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/czzy.png
--------------------------------------------------------------------------------
/images/disc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/disc.png
--------------------------------------------------------------------------------
/images/gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/gift.png
--------------------------------------------------------------------------------
/images/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/help.png
--------------------------------------------------------------------------------
/images/level.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/level.png
--------------------------------------------------------------------------------
/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/logo.png
--------------------------------------------------------------------------------
/images/order.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/order.png
--------------------------------------------------------------------------------
/images/quota.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/quota.png
--------------------------------------------------------------------------------
/images/share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/share.png
--------------------------------------------------------------------------------
/images/vip-白.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/vip-白.png
--------------------------------------------------------------------------------
/images/vip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/vip.png
--------------------------------------------------------------------------------
/images/address.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/address.png
--------------------------------------------------------------------------------
/images/balance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/balance.png
--------------------------------------------------------------------------------
/images/bg_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/bg_img.png
--------------------------------------------------------------------------------
/images/express.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/express.png
--------------------------------------------------------------------------------
/images/locking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/locking.png
--------------------------------------------------------------------------------
/images/logo_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/logo_b.png
--------------------------------------------------------------------------------
/images/reward.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/reward.png
--------------------------------------------------------------------------------
/images/thehorn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/thehorn.png
--------------------------------------------------------------------------------
/images/zhuanru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/zhuanru.png
--------------------------------------------------------------------------------
/assets/icon/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/icon/icon.png
--------------------------------------------------------------------------------
/images/2.0x/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/2.0x/logo.png
--------------------------------------------------------------------------------
/images/3.0x/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/3.0x/logo.png
--------------------------------------------------------------------------------
/images/IMG_1198.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/IMG_1198.PNG
--------------------------------------------------------------------------------
/images/IMG_1199.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/IMG_1199.PNG
--------------------------------------------------------------------------------
/images/changehen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/changehen.png
--------------------------------------------------------------------------------
/images/detailed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/detailed.png
--------------------------------------------------------------------------------
/images/exchange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/exchange.png
--------------------------------------------------------------------------------
/images/exchangetb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/exchangetb.png
--------------------------------------------------------------------------------
/images/headerlogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/headerlogo.png
--------------------------------------------------------------------------------
/images/mustread.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/mustread.png
--------------------------------------------------------------------------------
/images/walletico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/walletico.png
--------------------------------------------------------------------------------
/android/key.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/key.properties
--------------------------------------------------------------------------------
/images/2.0x/logo_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/2.0x/logo_b.png
--------------------------------------------------------------------------------
/images/3.0x/logo_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/3.0x/logo_b.png
--------------------------------------------------------------------------------
/images/icon/img_png.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/img_png.png
--------------------------------------------------------------------------------
/images/icon_wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon_wechat.png
--------------------------------------------------------------------------------
/images/play_needle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/play_needle.png
--------------------------------------------------------------------------------
/images/play_needle2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/play_needle2.png
--------------------------------------------------------------------------------
/images/icon/icon_ann.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_ann.png
--------------------------------------------------------------------------------
/images/icon/icon_apply.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_apply.png
--------------------------------------------------------------------------------
/images/icon/icon_helpt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_helpt.png
--------------------------------------------------------------------------------
/images/icon/icon_jilu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_jilu.png
--------------------------------------------------------------------------------
/images/icon/icon_my_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_my_n.png
--------------------------------------------------------------------------------
/images/icon/icon_my_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_my_s.png
--------------------------------------------------------------------------------
/images/icon/icon_myimg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_myimg.png
--------------------------------------------------------------------------------
/images/icon/icon_order.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_order.png
--------------------------------------------------------------------------------
/images/icon/icon_plan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_plan.png
--------------------------------------------------------------------------------
/images/icon/icon_purse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_purse.png
--------------------------------------------------------------------------------
/images/icon/icon_setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_setup.png
--------------------------------------------------------------------------------
/images/icon/img_visa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/img_visa.png
--------------------------------------------------------------------------------
/images/placehoder_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/placehoder_img.png
--------------------------------------------------------------------------------
/android/app/english_key.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/english_key.jks
--------------------------------------------------------------------------------
/assets/fonts/Lobster-1.4.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/fonts/Lobster-1.4.otf
--------------------------------------------------------------------------------
/images/icon/icon_card_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_card_n.png
--------------------------------------------------------------------------------
/images/icon/icon_card_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_card_s.png
--------------------------------------------------------------------------------
/images/icon/icon_home_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_home_n.png
--------------------------------------------------------------------------------
/images/icon/icon_home_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_home_s.png
--------------------------------------------------------------------------------
/images/icon/icon_pingan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_pingan.png
--------------------------------------------------------------------------------
/images/icon/icon_wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_wechat.png
--------------------------------------------------------------------------------
/images/icon_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon_placeholder.png
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableJetifier=true
3 | android.useAndroidX=true
4 |
--------------------------------------------------------------------------------
/assets/images/icon_empty.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_empty.webp
--------------------------------------------------------------------------------
/assets/images/icon_home_tab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_home_tab.png
--------------------------------------------------------------------------------
/assets/images/icon_mine_tab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_mine_tab.png
--------------------------------------------------------------------------------
/images/icon/icon_administer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon/icon_administer.png
--------------------------------------------------------------------------------
/images/icon_default_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/images/icon_default_avatar.png
--------------------------------------------------------------------------------
/lib/constants/index.dart:
--------------------------------------------------------------------------------
1 | export 'color.dart';
2 | export 'font.dart';
3 | export 'string.dart';
4 | export 'length.dart';
--------------------------------------------------------------------------------
/assets/images/icon_load_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_load_error.png
--------------------------------------------------------------------------------
/assets/images/icon_movie_tab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_movie_tab.png
--------------------------------------------------------------------------------
/todo:
--------------------------------------------------------------------------------
1 | 1,自动下一首 判断是否购买,购买了才能继续播放
2 | 2,退出再重新进入,字幕条滚动到位问题----。
3 | 3,音乐和字幕文件缓存
4 | 4,弹----
5 | 5,往上拉
6 | 6,最后一行
7 | 7,第一行可能翻页超过视线范围
--------------------------------------------------------------------------------
/assets/images/icon_feature_tab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_feature_tab.png
--------------------------------------------------------------------------------
/assets/images/icon_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_placeholder.png
--------------------------------------------------------------------------------
/assets/images/icon_popular_tab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_popular_tab.png
--------------------------------------------------------------------------------
/assets/images/icon_default_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_default_avatar.png
--------------------------------------------------------------------------------
/assets/images/icon_videodetail_num.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_videodetail_num.png
--------------------------------------------------------------------------------
/assets/images/icon_home_tab_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_home_tab_pressed.png
--------------------------------------------------------------------------------
/assets/images/icon_mine_tab_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_mine_tab_pressed.png
--------------------------------------------------------------------------------
/assets/images/icon_movie_tab_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_movie_tab_pressed.png
--------------------------------------------------------------------------------
/assets/images/icon_videodetail_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_videodetail_desc.png
--------------------------------------------------------------------------------
/assets/images/icon_videodetail_jishu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_videodetail_jishu.png
--------------------------------------------------------------------------------
/assets/images/icon_videodetail_name.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_videodetail_name.png
--------------------------------------------------------------------------------
/assets/images/icon_feature_tab_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_feature_tab_pressed.png
--------------------------------------------------------------------------------
/assets/images/icon_popular_tab_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_popular_tab_pressed.png
--------------------------------------------------------------------------------
/assets/images/icon_videodetail_director.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_videodetail_director.png
--------------------------------------------------------------------------------
/assets/images/icon_videodetail_playlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_videodetail_playlist.png
--------------------------------------------------------------------------------
/assets/images/icon_videodetail_starring.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/images/icon_videodetail_starring.png
--------------------------------------------------------------------------------
/assets/fonts/FZLanTingHeiS-DB1-GB-Regular.TTF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/assets/fonts/FZLanTingHeiS-DB1-GB-Regular.TTF
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/logo_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-hdpi/logo_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/logo_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-mdpi/logo_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/logo_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-xhdpi/logo_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/logo_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-xxhdpi/logo_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/logo_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/android/app/src/main/res/mipmap-xxxhdpi/logo_launcher.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/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/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiebaoxin/flutter_english/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/lib/model/state_model/base_state_model.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * Model基类
3 | * Create by Songlcy
4 | */
5 | import 'package:scoped_model/scoped_model.dart';
6 |
7 | class BaseStateModel extends Model {
8 |
9 | }
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/components/keyboard/pay_password.dart:
--------------------------------------------------------------------------------
1 | /// 支符密码 用于 密码输入框和键盘之间进行通信
2 | class KeyEvent {
3 | String key;
4 |
5 | KeyEvent(this.key);
6 |
7 | bool isDelete() => this.key == "del";
8 | bool isCommit() => this.key == "commit";
9 | }
10 |
--------------------------------------------------------------------------------
/lib/model.dart:
--------------------------------------------------------------------------------
1 |
2 | export 'model/banner.dart';
3 | export 'model/kingkong.dart';
4 | export 'model/product.dart';
5 | export 'model/crowdfund.dart';
6 | export 'model/sub_category.dart';
7 | export 'model/cart.dart';
8 | export 'model/search.dart';
9 | export 'model/beautyimage.dart';
--------------------------------------------------------------------------------
/lib/model/beautyimage.dart:
--------------------------------------------------------------------------------
1 | class BeautyImageModal{
2 | int width;
3 | int height;
4 | String thumb;
5 | BeautyImageModal({this.height,this.width,this.thumb});
6 | BeautyImageModal.fromJSON(dynamic json):width= int.parse(json['width']),height=int.parse(json['height']),thumb=json['thumb'];
7 | }
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
7 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/lib/model/buy_model.dart:
--------------------------------------------------------------------------------
1 | import 'goods.dart';
2 | class BuyModel{
3 | String goods_id;
4 | String goods_num;
5 | String item_id;
6 | String action;
7 | String imgurl;
8 | GoodInfo goodsinfo;
9 | double goods_price;
10 | BuyModel({this.goods_id,this.goods_num,this.item_id,this.goods_price,this.goodsinfo,this.imgurl,this.action="buy_now"});
11 |
12 | }
--------------------------------------------------------------------------------
/lib/constants/length.dart:
--------------------------------------------------------------------------------
1 | class Klength{
2 | static const double topBarHeight = 45;//Dp
3 | static const double bottomBarHeight = 54;
4 | // ///设置适配尺寸 (填入设计稿中设备的屏幕尺寸) 假如设计稿是按iPhone6的尺寸设计的(iPhone6 750*1334)
5 | static const double designWidth = 500; //设计稿想像素宽度
6 | static const double designHeight = 900; //设计稿像素宽度
7 | static const double searchTxtFieldHeight=34;
8 | }
--------------------------------------------------------------------------------
/lib/components/empty_component.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * 空视图组件
3 | * Create by Songlcy
4 | */
5 | import 'package:flutter/material.dart';
6 |
7 | class EmptyComponent extends StatelessWidget {
8 |
9 | const EmptyComponent();
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | return Container(
14 | width: 0,
15 | height: 0,
16 | );
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/lib/model/pood/Index_tab_model.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * 首页Tab分类实体类
3 | * Create by Songlcy
4 | */
5 |
6 | class IndexTabModel {
7 |
8 | String id;
9 | String name;
10 |
11 | IndexTabModel({ this.id, this.name });
12 |
13 | factory IndexTabModel.fromJson(Map jsonObj) {
14 | return new IndexTabModel(
15 | id: jsonObj["_id"],
16 | name: jsonObj["name"]
17 | );
18 | }
19 | }
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/model/state_model/tab_state_model.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * 首页Tab切换Model
3 | */
4 | import './base_state_model.dart';
5 |
6 | class TabBarStateModel extends BaseStateModel {
7 |
8 | int _tabBarCurrentIndex = 0;
9 |
10 | get tabBarCurrentIndex => _tabBarCurrentIndex;
11 |
12 | void changeTabBarCurrentIndex(int currentIndex) {
13 | _tabBarCurrentIndex = currentIndex;
14 | notifyListeners();
15 | }
16 |
17 | }
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/be/goodgood/flutter_english/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package be.goodgood.flutter_english
2 |
3 | import android.os.Bundle
4 |
5 | import io.flutter.app.FlutterActivity
6 | import io.flutter.plugins.GeneratedPluginRegistrant
7 |
8 | class MainActivity: FlutterActivity() {
9 | override fun onCreate(savedInstanceState: Bundle?) {
10 | super.onCreate(savedInstanceState)
11 | GeneratedPluginRegistrant.registerWith(this)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/lib/components/in_text_dot.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class InTextDot extends StatelessWidget {
4 | @override
5 | Widget build(BuildContext context) {
6 | return Container(
7 | width: 3.0,
8 | height: 3.0,
9 | margin: const EdgeInsets.symmetric(horizontal: 6.0),
10 | decoration: BoxDecoration(
11 | color: Color(0xFFB2BAC2),
12 | borderRadius: BorderRadius.all(Radius.circular(3.0))),
13 | );
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/lib/widgets/index.dart:
--------------------------------------------------------------------------------
1 |
2 | export 'category/list_view_item.dart';
3 | export 'category/menue.dart';
4 | export 'category/right_list_view.dart';
5 | export 'category/search_bar.dart';
6 |
7 | export 'bottombar.dart';
8 | export 'divideline.dart';
9 | export 'topbar.dart';
10 |
11 | export '../components/banner.dart';
12 |
13 | export 'search/hotSug.dart';
14 | export 'search/recomend.dart';
15 | export 'search/topbar.dart';
16 | export 'search/listtopbar.dart';
17 | export 'search/searchresult.dart';
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/widgets/divideline.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../constants/index.dart';
3 | import '../utils/screen_util.dart';
4 |
5 | class DivideLineWidget extends StatelessWidget{
6 | final double width;
7 | DivideLineWidget({Key key,this.width}):super(key:key);
8 | @override
9 | Widget build(BuildContext context) {
10 | return Container(
11 | // height: ScreenUtil().H(width),
12 | alignment: Alignment.center,
13 | color: KColorConstant.divideLineColor,
14 | );
15 | }
16 | }
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/lib/widgets/CustomIcon.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * @Description TODO
3 | * @Author zhibuyu
4 | * @Date 2018/10/26 14:10
5 | * @Version 1.0
6 | */
7 | import 'package:flutter/material.dart';
8 | class CustomIcon extends StatelessWidget {
9 | @override
10 | Widget build(BuildContext context) {
11 | final IconThemeData iconTheme = IconTheme.of(context);
12 | return Container(
13 | margin: const EdgeInsets.all(4.0),
14 | width: iconTheme.size - 8.0,
15 | height: iconTheme.size - 8.0,
16 | color: iconTheme.color,
17 | );
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/lib/model/banner.dart:
--------------------------------------------------------------------------------
1 |
2 |
3 | class BannerItemModel {
4 | String href;
5 | String picUrl;
6 | BannerItemModel({this.href, this.picUrl});
7 | BannerItemModel.fromJson(Map json)
8 | : href = json['href'],
9 | picUrl = json['pic_url'];
10 | }
11 |
12 |
13 | class BannerListModel {
14 | List items;
15 | BannerListModel({this.items});
16 | factory BannerListModel.fromJson(dynamic json) {
17 | List list = (json as List).map((i) {
18 | return BannerItemModel.fromJson(i);
19 | }).toList();
20 | return BannerListModel(items: list);
21 | }
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/lib/constants/string.dart:
--------------------------------------------------------------------------------
1 |
2 | class KString{
3 | static const String homeSearchBarHint = '搜一搜';
4 | static const String categorySearchBarHint = '专区两件九折,三件八折';
5 | static const String pinweiTitle = '发现';
6 | static const String pinweigoFindTxt = '去发现';
7 | static const String cartTitle='购物车';
8 | static const String allSelectedTxt = '全选';
9 | static const String goPayTxt = '去结算';
10 | static const String totalSumTxt = "合计";
11 |
12 | static const String searchBtTxt ='搜索';
13 | static const String searchHotTxt = '热门搜索';
14 | static const List tabs=['首页','性感美女','制服','清新美女','校园','古装','动漫','壁纸','苍老师'];
15 |
16 | }
--------------------------------------------------------------------------------
/lib/model/kingkong.dart:
--------------------------------------------------------------------------------
1 | class KingKongItem {
2 | String href;
3 | String picUrl;
4 | String title;
5 | KingKongItem({this.href, this.picUrl,this.title});
6 | KingKongItem.fromJson(Map json)
7 | : href = json['href'],
8 | title=json['title'],
9 | picUrl = json['pic_url'];
10 | }
11 |
12 | class KingKongList {
13 | List items;
14 | KingKongList({this.items});
15 | factory KingKongList.fromJson( dynamic json) {
16 | List list = (json as List).map((i) {
17 | return KingKongItem.fromJson(i);
18 | }).toList();
19 | return KingKongList(items: list);
20 | }
21 | }
--------------------------------------------------------------------------------
/lib/views/details/details_top_area.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../../components/banner.dart';
3 | import '../../utils/screen_util.dart';
4 | import '../../model/goods.dart';
5 | import '../../model/globle_model.dart';
6 |
7 | class DetailsTopArea extends StatelessWidget {
8 | GoodInfo goodsInfo = null;
9 | double _width=ScreenUtil.screenWidth;
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | final model = globleModel().of(context);
14 | goodsInfo=model.goodsinfo;
15 | // print(goodsInfo.images);
16 | return SwipperBanner(banners:goodsInfo.images,nheight: _width);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/views/details/details_web.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_html/flutter_html.dart';
3 | import '../../model/goods.dart';
4 |
5 | class DetailsWeb extends StatelessWidget {
6 | final GoodInfo goodsinfo;
7 | DetailsWeb(this.goodsinfo);
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | var goodsDetails = this.goodsinfo.content;
12 | // print(goodsDetails);
13 | bool isLeft =true;
14 | if (isLeft) {
15 | return Html(data: goodsDetails);
16 | } else {
17 | return Container(
18 | child: Text('暂时没有数据'),
19 | );
20 | };
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/widgets/CustomInactiveIcon.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * @Description TODO
3 | * @Author zhibuyu
4 | * @Date 2018/10/26 14:11
5 | * @Version 1.0
6 | */
7 | import 'package:flutter/material.dart';
8 |
9 | class CustomInactiveIcon extends StatelessWidget {
10 | @override
11 | Widget build(BuildContext context) {
12 | final IconThemeData iconTheme = IconTheme.of(context);
13 | return Container(
14 | margin: const EdgeInsets.all(4.0),
15 | width: iconTheme.size - 8.0,
16 | height: iconTheme.size - 8.0,
17 | decoration: BoxDecoration(
18 | border: Border.all(color: iconTheme.color, width: 2.0),
19 | ));
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/lib/model/msg_model.dart:
--------------------------------------------------------------------------------
1 | class MyMsgCell {
2 | String id;
3 | String title;
4 | String content;
5 | String createtime;
6 | String status; //状态,订单状态(0=进行中,1=已完成,2=已取消,3=已停止)
7 |
8 | MyMsgCell({
9 | this.id,
10 | this.title,
11 | this.content,
12 | this.createtime,
13 | this.status,
14 | });
15 |
16 | factory MyMsgCell.fromJson(Map json) {
17 | var statlist={'0':'未读','1':'已读','2':'已过期'};
18 | return MyMsgCell(
19 | id: json['id'] ?? '',
20 | title: json['title'] ?? '',
21 | content: json['content'] ?? '',
22 | createtime: json['create_time'] ?? '',
23 | status:statlist[json['status']]??'未知'
24 | );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/api/movie.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 |
3 | Dio dio = new Dio();
4 |
5 | class MovieApi {
6 | // 获取电影列表
7 | getMovieList(String mt, int page, int pagesize) async {
8 | int offset = (page - 1) * pagesize;
9 | var result = await dio.get(
10 | 'http://www.liulongbin.top:3005/api/v2/movie/$mt?start=$offset&count=$pagesize');
11 | return result.data;
12 | }
13 |
14 | // 获取电影详情
15 | getMovieDetail(String id) async {
16 | var result = await dio
17 | .get('http://www.liulongbin.top:3005/api/v2/movie/subject/$id');
18 | return result.data;
19 | }
20 |
21 | int add(int n) {
22 | return ++n;
23 | }
24 |
25 | int sub(int n) {
26 | return --n;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.30'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.3.2'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | jcenter()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | task clean(type: Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/lib/video/video_web.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_html/flutter_html.dart';
3 | class VideoWebPlayer extends StatelessWidget {
4 | final String content;
5 | VideoWebPlayer(this.content);
6 |
7 | @override
8 | Widget build(BuildContext context) {
9 | if (content!='') {
10 | return Html(data: content);
11 | } else {
12 | return Container(
13 | child: Text('暂时没有数据'),
14 | );
15 | };
16 | }
17 | }
18 | /*
19 | *
22 | */
--------------------------------------------------------------------------------
/lib/video/videoplayer.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:video_player/video_player.dart';
3 | import 'chewie_list_item.dart';
4 | import 'tx_video_player.dart';
5 |
6 | class MyVideoPlayer extends StatelessWidget {
7 | final String url;
8 | MyVideoPlayer({this.url="http://200024424.vod.myqcloud.com/200024424_709ae516bdf811e6ad39991f76a4df69.f20.mp4"});
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | return Scaffold(
13 | appBar: AppBar(
14 | title: Text('视频播放'),
15 | ),
16 | body: ListView(
17 | children: [
18 | ChewieListItem(
19 | videoPlayerController: VideoPlayerController.network(url,
20 | ),
21 | ),
22 | TxVideoPlayer(url),
23 |
24 | ],
25 | ),
26 | );
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/widgets/topbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../constants/index.dart';
3 | class TopBarWidget extends StatelessWidget {
4 | final String title;
5 | TopBarWidget(this.title);
6 | @override
7 | Widget build(BuildContext context) {
8 | final double statusBarHeight = MediaQuery.of(context).padding.top;
9 | return Container(
10 | padding: EdgeInsets.only(top: statusBarHeight),
11 | alignment: Alignment.center,
12 | height: statusBarHeight + Klength.topBarHeight,
13 | decoration: BoxDecoration(
14 | border:
15 | Border(bottom: BorderSide(color: Color(0xFFe1e1e1), width: 1))),
16 | child:
17 | Text(title, style: TextStyle(color: Color(0xFF313131), fontSize: 18)),
18 | );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/lib/components/SliveTabbarDelege.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | class SliverTabBarDelegate extends SliverPersistentHeaderDelegate {
3 | final TabBar widget;
4 | final Color color;
5 |
6 | const SliverTabBarDelegate(this.widget, {this.color})
7 | : assert(widget != null);
8 |
9 | @override
10 | Widget build(
11 | BuildContext context, double shrinkOffset, bool overlapsContent) {
12 | return new Container(
13 | child: widget,
14 | color: color,
15 | );
16 | }
17 |
18 | @override
19 | bool shouldRebuild(SliverTabBarDelegate oldDelegate) {
20 | return false;
21 | }
22 |
23 | @override
24 | double get maxExtent => widget.preferredSize.height;
25 |
26 | @override
27 | double get minExtent => widget.preferredSize.height;
28 | }
--------------------------------------------------------------------------------
/lib/components/load_more.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class LoadMore extends StatelessWidget {
4 | final bool hasMore;
5 |
6 | LoadMore(this.hasMore);
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | if (hasMore) {
11 | return Container(
12 | height: 70.0,
13 | child: Center(
14 | child: Opacity(
15 | opacity: 1.0,
16 | child: CircularProgressIndicator(
17 | strokeWidth: 3.0,
18 | ),
19 | ),
20 | ),
21 | );
22 | }
23 | return Container(
24 | height: 70.0,
25 | child: Center(
26 | child: Text('亲,我也是有底线的',
27 | style: TextStyle(color: Theme.of(context).accentColor)),
28 | ),
29 | );
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/model/state_model/theme_state_model.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * 主题Model
3 | * Create by Songlcy
4 | */
5 | import 'package:scoped_model/scoped_model.dart';
6 | import 'package:shared_preferences/shared_preferences.dart';
7 |
8 | abstract class ThemeStateModel extends Model {
9 | int _themeIndex;
10 |
11 | get themeIndex => _themeIndex;
12 |
13 | void changeTheme(int themeIndex) async {
14 | _themeIndex = themeIndex;
15 | notifyListeners();
16 | SharedPreferences sp = await SharedPreferences.getInstance();
17 | sp.setInt("themeIndex", themeIndex);
18 | }
19 |
20 | Future getTheme() async {
21 | SharedPreferences sp = await SharedPreferences.getInstance();
22 | int themeIndex = sp.getInt("themeIndex");
23 | if (themeIndex != null) {
24 | return themeIndex;
25 | }
26 | return 0;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/components/tag_component.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * 标签组件
3 | * Create by Songlcy
4 | */
5 | import 'package:flutter/material.dart';
6 |
7 | class TagComponent extends StatelessWidget {
8 |
9 | final String title;
10 |
11 | const TagComponent({
12 | this.title = "tag"
13 | });
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | return Container(
18 | margin: EdgeInsets.symmetric(horizontal: 6.0),
19 | padding: EdgeInsets.fromLTRB(6.0, 3.0, 6.0, 3.0),
20 | child: Center(
21 | child: Text(
22 | title,
23 | style: TextStyle(color: Colors.white, fontSize: 10.0),
24 | ),
25 | ),
26 | decoration: BoxDecoration(
27 | color: Theme.of(context).primaryColor,
28 | borderRadius: BorderRadius.all(Radius.circular(3.0))
29 | ),
30 | );
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/model/sub_category.dart:
--------------------------------------------------------------------------------
1 | class SubCategoryItemModel {
2 | String name;
3 | String icon;
4 | int ucid;
5 | SubCategoryItemModel({this.name, this.icon, this.ucid});
6 | SubCategoryItemModel.fromJson(Map json)
7 | : name = json['name'],
8 | icon = json['icon'],
9 | ucid = json['ucid'];
10 | }
11 |
12 | class SubCategoryListModel {
13 | List list;
14 | int ucid;
15 | String uname;
16 | String banner;
17 | SubCategoryListModel({this.list,this.banner,this.ucid,this.uname});
18 | factory SubCategoryListModel.fromJson(dynamic json) {
19 | var items = json['list'] as List;
20 | var itemModals = items.map((item) {
21 | return SubCategoryItemModel.fromJson(item);
22 | }).toList();
23 | return SubCategoryListModel(list: itemModals,banner:json['banner'],ucid: json['ucid'],uname: json['name']);
24 | }
25 | }
--------------------------------------------------------------------------------
/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 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/lib/main_provide.dart:
--------------------------------------------------------------------------------
1 |
2 | import './data/base.dart';
3 | class MainProvide extends BaseProvide {
4 |
5 | // 工厂模式
6 | factory MainProvide() =>_getInstance();
7 | static MainProvide get instance => _getInstance();
8 | static MainProvide _instance;
9 | static MainProvide _getInstance() {
10 | if (_instance == null) {
11 | _instance = new MainProvide._internal();
12 | }
13 | return _instance;
14 | }
15 |
16 | MainProvide._internal() {
17 | // 初始化
18 | }
19 |
20 | int _currentIndex = 0;
21 | int get currentIndex => _currentIndex;
22 | set currentIndex(int currentIndex) {
23 | _currentIndex = currentIndex;
24 | notify();
25 | }
26 |
27 | bool _showMini = false;
28 | bool get showMini => _showMini;
29 | set showMini(bool showMini) {
30 | _showMini = showMini;
31 | notify();
32 | }
33 |
34 | notify() {
35 | notifyListeners();
36 | }
37 | }
--------------------------------------------------------------------------------
/lib/model/model_cell.dart:
--------------------------------------------------------------------------------
1 | class ModelCell {
2 | String id;
3 | String modAddr;
4 | String modName;
5 | String modtype;
6 | String url;
7 | String fluUrl;
8 | String sortId; //
9 | String stat;
10 | String icon; //
11 | String iconname;
12 |
13 | ModelCell({
14 | this.id,
15 | this.modAddr,
16 | this.modName,
17 | this.modtype,
18 | this.url,
19 | this.fluUrl,
20 | this.sortId,
21 | this.stat,
22 | this.icon,
23 | this.iconname,
24 | });
25 |
26 | factory ModelCell.fromJson(Map json) {
27 | return ModelCell(
28 | id: json['_id'],
29 | modAddr: json['modAddr'],
30 | modName: json['modName'],
31 | modtype: json['modtype'],
32 | sortId: json['sortId'],
33 | url: json['url'],
34 | fluUrl: json['iosUrl'],
35 | stat: json['stat'],
36 | icon: json['icon'],
37 | iconname: json['iconname'],
38 | );
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/lib/video/anims/record_anim.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/animation.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | class RotateRecord extends AnimatedWidget {
5 | RotateRecord({Key key, Animation animation})
6 | : super(key: key, listenable: animation);
7 |
8 | Widget build(BuildContext context) {
9 | final Animation animation = listenable;
10 | return new Container(
11 | margin: new EdgeInsets.symmetric(vertical: 10.0),
12 | height: 250.0,
13 | width: 250.0,
14 | child: new RotationTransition(
15 | turns: animation,
16 | child: new Container(
17 | decoration: BoxDecoration(
18 | shape: BoxShape.circle,
19 | image: DecorationImage(
20 | image: NetworkImage(
21 | "https://images-na.ssl-images-amazon.com/images/I/51inO4DBH0L._SS500.jpg"),
22 | ),
23 | ),
24 | )),
25 | );
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/lib/components/sliver_appbar_delegate.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * SliverPersistentHeader 委托类
3 | */
4 | import 'package:flutter/material.dart';
5 |
6 | class SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
7 |
8 | final TabBar _tabBar;
9 | SliverAppBarDelegate(this._tabBar);
10 |
11 | /**
12 | * minExtent 与 maxExtent 相同, Header不会有收缩效果,类似普通Header。
13 | */
14 | @override
15 | double get minExtent => _tabBar.preferredSize.height;
16 |
17 | @override
18 | double get maxExtent => _tabBar.preferredSize.height;
19 |
20 | @override
21 | Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
22 | return Container(
23 | color: Colors.white,
24 | child: _tabBar
25 | );
26 | }
27 |
28 | @override
29 | bool shouldRebuild(SliverAppBarDelegate oldDelegate) {
30 | return false;
31 | // return maxHeight != oldDelegate.maxHeight ||
32 | // minHeight != oldDelegate.minHeight ||
33 | // child != oldDelegate.child;
34 | }
35 | }
--------------------------------------------------------------------------------
/lib/model/cart.dart:
--------------------------------------------------------------------------------
1 | class CartItemModel {
2 | int cartId;
3 | String productName;
4 | int goodsId;
5 | int itemId;
6 | int buyLimit;
7 | int count;
8 | String imageUrl;
9 | bool isSelected;
10 | bool isDeleted;
11 | double price;
12 | CartItemModel(
13 | {this.productName,
14 | this.count,
15 | this.cartId,
16 | this.goodsId,
17 | this.itemId,
18 | this.buyLimit,
19 | this.imageUrl,
20 | this.price,
21 | this.isDeleted,
22 | this.isSelected});
23 | CartItemModel.fromJson(dynamic json)
24 | : productName = json['goods_name'],
25 | goodsId = json['goods_id'],
26 | itemId = json['item_id'],
27 | cartId = json['id'],
28 | price = num.parse(json['goods_price']),
29 | isDeleted = false,
30 | count = json['goods_num'],
31 | isSelected = (json['selected'] as int) == 1 ? true : false,
32 | imageUrl = json['original_img'] ?? '',
33 | buyLimit = json['store_count'];
34 | }
35 |
--------------------------------------------------------------------------------
/lib/components/video_detail_item_component.dart:
--------------------------------------------------------------------------------
1 | /**
2 | * 视频详情描述Item
3 | * Create by Songlcy
4 | */
5 | import 'package:flutter/material.dart';
6 | import './empty_component.dart';
7 |
8 | class VideoDetailItemComponent extends StatelessWidget {
9 |
10 | final String icon;
11 | final String content;
12 | final Widget child;
13 |
14 | const VideoDetailItemComponent({
15 | this.icon,
16 | this.content,
17 | this.child = const EmptyComponent()
18 | });
19 |
20 | @override
21 | Widget build(BuildContext context) {
22 | return Padding(
23 | padding: EdgeInsets.symmetric(horizontal: 10.0),
24 | child: Row(
25 | crossAxisAlignment: CrossAxisAlignment.center,
26 | children: [
27 | Image.asset(
28 | icon,
29 | width: 20.0,
30 | height: 20.0,
31 | fit: BoxFit.cover,
32 | ),
33 | SizedBox(width: 6.0),
34 | Text(content),
35 | child
36 | ],
37 | )
38 | );
39 | }
40 | }
--------------------------------------------------------------------------------
/lib/components/ToastDialog.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | // ignore: must_be_immutable
4 | class ToastDialog extends Dialog {
5 | String text;
6 |
7 | ToastDialog({Key key, @required this.text}) : super(key: key);
8 |
9 | @override
10 | Widget build (BuildContext context) {
11 | return new Material(
12 | type: MaterialType.transparency,
13 | child: Align(
14 | alignment: Alignment(0.0, 0.8),
15 | child: Container(
16 | decoration: ShapeDecoration(
17 | color: Color(0xffffffff),
18 | shape: RoundedRectangleBorder(
19 | borderRadius: BorderRadius.all(
20 | Radius.circular(8.0),
21 | ),
22 | ),
23 | ),
24 | child: Padding(
25 | padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0),
26 | child: new Text(
27 | text,
28 | style: new TextStyle(fontSize: 12.0),
29 | ),
30 | ),
31 | ),
32 | ),
33 | );
34 | }
35 | }
--------------------------------------------------------------------------------
/lib/data/base2.dart:
--------------------------------------------------------------------------------
1 |
2 | import 'dart:async';
3 |
4 | import 'package:provider/provider.dart';
5 | import 'package:flutter/material.dart';
6 | import 'package:rxdart/rxdart.dart';
7 |
8 | abstract class PageProvideNode2 extends StatelessWidget {
9 | /// The values made available to the [child].
10 | BaseProvide2 mProviders = BaseProvide2();
11 |
12 | Widget buildContent(BuildContext context);
13 |
14 | @override
15 | Widget build(BuildContext context) {
16 | return ChangeNotifierProvider.value(
17 | value: mProviders,
18 | child: buildContent(context),
19 | );
20 | }
21 | }
22 |
23 | /// BaseProvide
24 | class BaseProvide2 with ChangeNotifier {
25 |
26 | CompositeSubscription compositeSubscription = CompositeSubscription();
27 |
28 |
29 | /// add [StreamSubscription] to [compositeSubscription]
30 | ///
31 | /// 在 [dispose]的时候能进行取消
32 | addSubscription(StreamSubscription subscription){
33 | compositeSubscription.add(subscription);
34 | }
35 |
36 | @override
37 | void dispose() {
38 | super.dispose();
39 | compositeSubscription.dispose();
40 | }
41 | }
--------------------------------------------------------------------------------
/lib/views/player/opacity_tap_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class OpacityTapWidget extends StatefulWidget {
4 | final Widget child;
5 | final Function onTap;
6 |
7 | const OpacityTapWidget({Key key, this.child, this.onTap}) : super(key: key);
8 |
9 | @override
10 | OpacityTapWidgetState createState() {
11 | return new OpacityTapWidgetState();
12 | }
13 | }
14 |
15 | class OpacityTapWidgetState extends State {
16 | var isDown = false;
17 | @override
18 | Widget build(BuildContext context) {
19 | return GestureDetector(
20 | behavior: HitTestBehavior.opaque,
21 | child: AnimatedContainer(
22 | duration: Duration(milliseconds: 500),
23 | padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
24 | child: new Opacity(
25 | opacity: isDown ? 0.5 : 1,
26 | child: widget.child,
27 | ),
28 | ),
29 | onTap: widget.onTap,
30 | onTapDown: (d) => setState(() => this.isDown = true),
31 | onTapUp: (d) => setState(() => this.isDown = false),
32 | onTapCancel: () => setState(() => this.isDown = false),
33 | );
34 | }
35 | }
--------------------------------------------------------------------------------
/lib/widgets/category/search_bar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../../constants/index.dart';
3 | class SearchBar extends StatelessWidget {
4 | @override
5 | Widget build(BuildContext context) {
6 | return Container(
7 | height: 45,
8 | margin: EdgeInsets.only(top:MediaQuery.of(context).padding.top),
9 | decoration: BoxDecoration(border: Border(bottom: BorderSide(color:KColorConstant.searchBarBgColor,width: 1.0))),
10 | padding: EdgeInsets.symmetric(horizontal: 12),
11 | alignment: Alignment.center,
12 | child: Container(
13 | height: 27,
14 | padding: EdgeInsets.symmetric(horizontal: 6),
15 | alignment: Alignment.center,
16 | color: KColorConstant.searchBarBgColor,
17 | child: Row(
18 | children: [
19 | Icon(Icons.search,size: 17,),
20 | Container(
21 | margin: EdgeInsets.only(left: 5) ,
22 | child: Text(KString.categorySearchBarHint,style: TextStyle(color: KColorConstant.searchBarTxtColor),),
23 | )
24 | ],
25 | ),
26 | ),
27 | );
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/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 that Flutter provides. 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:flutter_english/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(Kukabao());
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 |
--------------------------------------------------------------------------------
/lib/model/paylog_model.dart:
--------------------------------------------------------------------------------
1 |
2 | class PayLogCell {
3 | String id;
4 | String orderNo;
5 | String orderName;
6 | String orderMoney;
7 | String orderBond;//入账金额
8 | String orderCharge;//手续费
9 | String orderCard;
10 | String orderTime;
11 | String status; //状态,0=处理中,1=出账成功
12 |
13 | PayLogCell(
14 | {this.id,
15 | this.orderNo,
16 | this.orderMoney,
17 |
18 | this.orderName,
19 | this.orderBond,
20 | this.orderCharge,
21 |
22 | this.orderCard,
23 | this.orderTime,
24 | this.status,});
25 |
26 | factory PayLogCell.fromJson(Map json) {
27 | var statlist={'0':'不成功','1':'入账','2':'消费','3':'入账','4':'消费'};
28 | return PayLogCell(
29 | id: json['id']??'',
30 | orderNo: json['orderNo']??'',
31 | orderMoney: json['orderMoney']??'',
32 |
33 | orderName: json['orderName']??'',
34 | orderBond: json['orderBond']??'',
35 | orderCharge: json['orderCharge']??'',
36 | orderCard: json['orderNo']??'',
37 | orderTime: json['create_time']??'',
38 | // status: json['status']=='1' ? "出账成功":"已处理",
39 | status:statlist[json['status']]??'处理'
40 | );
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/lib/components/fiexdAppbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class FiexdAppbar extends StatefulWidget implements PreferredSizeWidget {
4 |
5 | final double contentHeight; //从外部指定高度
6 | final Widget contentChild; //从外部指定内容
7 | final Color statusBarColor; //设置statusbar的颜色
8 |
9 | FiexdAppbar({this.contentChild, this.contentHeight, this.statusBarColor}): super();
10 |
11 | @override
12 | State createState() {
13 | return new _XFileAppbarState();
14 | }
15 |
16 | @override
17 | Size get preferredSize => new Size.fromHeight(contentHeight);
18 |
19 | }
20 | /*
21 | * 这是一个可以指定SafeArea区域背景色的AppBar
22 | * PreferredSizeWidget提供指定高度的方法
23 | * 如果没有约束其高度,则会使用PreferredSizeWidget指定的高度
24 | */
25 |
26 | /*
27 | * 这里没有直接用SafeArea,而是用Container包装了一层
28 | * 因为直接用SafeArea,会把顶部的statusBar区域留出空白
29 | * 外层Container会填充SafeArea,指定外层Container背景色也会覆盖原来SafeArea的颜色
30 | */
31 | class _XFileAppbarState extends State {
32 | @override
33 | Widget build(BuildContext context) {
34 | return new Container(
35 | color: widget.statusBarColor,
36 | child: new SafeArea(
37 | top: true,
38 | child: widget.contentChild,
39 | ),
40 | );
41 | }
42 |
43 | }
--------------------------------------------------------------------------------
/lib/utils/fiexdAppbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | /**
4 | * 这是一个可以指定SafeArea区域背景色的AppBar
5 | * PreferredSizeWidget提供指定高度的方法
6 | * 如果没有约束其高度,则会使用PreferredSizeWidget指定的高度
7 | */
8 | class FiexdAppbar extends StatefulWidget implements PreferredSizeWidget {
9 |
10 | final double contentHeight; //从外部指定高度
11 | final Widget contentChild; //从外部指定内容
12 | final Color statusBarColor; //设置statusbar的颜色
13 |
14 | FiexdAppbar({this.contentChild, this.contentHeight, this.statusBarColor}): super();
15 |
16 | @override
17 | State createState() {
18 | return new _XFileAppbarState();
19 | }
20 |
21 | @override
22 | Size get preferredSize => new Size.fromHeight(contentHeight);
23 |
24 | }
25 |
26 |
27 | /**
28 | * 这里没有直接用SafeArea,而是用Container包装了一层
29 | * 因为直接用SafeArea,会把顶部的statusBar区域留出空白
30 | * 外层Container会填充SafeArea,指定外层Container背景色也会覆盖原来SafeArea的颜色
31 | */
32 | class _XFileAppbarState extends State {
33 | @override
34 | Widget build(BuildContext context) {
35 | return new Container(
36 | color: widget.statusBarColor,
37 | child: new SafeArea(
38 | top: true,
39 | child: widget.contentChild,
40 | ),
41 | );
42 | }
43 |
44 | }
--------------------------------------------------------------------------------
/lib/views/search/listtopbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../../constants/index.dart';
3 |
4 | class SearchListTopBarTitleWidget extends StatelessWidget {
5 | final String keyworld;
6 | SearchListTopBarTitleWidget({Key key, this.keyworld}) : super(key: key);
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Container(
11 | height: Klength.searchTxtFieldHeight,
12 | padding: EdgeInsets.only(left: 10),
13 | margin: EdgeInsets.only(right: 30),
14 | alignment: Alignment.centerLeft,
15 | decoration: BoxDecoration(
16 | color: KColorConstant.divideLineColor,
17 | borderRadius: BorderRadius.all(Radius.circular(5))),
18 | child: GestureDetector(
19 | onTap: () => Navigator.pop(context),
20 | child: Row(
21 | children: [
22 | Icon(
23 | Icons.search,
24 | color: KColorConstant.floorTitleColor,
25 | size: 20,
26 | ),
27 | Text(
28 | keyworld,
29 | style: KfontConstant.defaultStyle,
30 | ),
31 | ],
32 | )));
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/lib/widgets/search/listtopbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../../constants/index.dart';
3 |
4 | class SearchListTopBarTitleWidget extends StatelessWidget {
5 | final String keyworld;
6 | SearchListTopBarTitleWidget({Key key, this.keyworld}) : super(key: key);
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Container(
11 | height: Klength.searchTxtFieldHeight,
12 | padding: EdgeInsets.only(left: 10),
13 | margin: EdgeInsets.only(right: 30),
14 | alignment: Alignment.centerLeft,
15 | decoration: BoxDecoration(
16 | color: KColorConstant.divideLineColor,
17 | borderRadius: BorderRadius.all(Radius.circular(5))),
18 | child: GestureDetector(
19 | onTap: () => Navigator.pop(context),
20 | child: Row(
21 | children: [
22 | Icon(
23 | Icons.search,
24 | color: KColorConstant.floorTitleColor,
25 | size: 20,
26 | ),
27 | Text(
28 | keyworld,
29 | style: KfontConstant.defaultStyle,
30 | ),
31 | ],
32 | )));
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/lib/model/crowdfund.dart:
--------------------------------------------------------------------------------
1 | class CrowdFundItemModel {
2 | String name;
3 | String summary;
4 | String picUrl;
5 | int marketPrice;
6 | int progress;
7 | int saledCount;
8 | String jumpUrl;
9 | CrowdFundItemModel(
10 | {this.name,
11 | this.marketPrice,
12 | this.progress,
13 | this.saledCount,
14 | this.jumpUrl,
15 | this.picUrl,
16 | this.summary});
17 | factory CrowdFundItemModel.fromJson(dynamic json) {
18 | return CrowdFundItemModel(
19 | name: json['name'],
20 | summary: json['summary'],
21 | picUrl: json['pic_url'],
22 | marketPrice: json['market_price'],
23 | progress: json['progress'],
24 | saledCount: json['saled_count'],
25 | jumpUrl: json['jump_url']);
26 | }
27 | }
28 |
29 | class CrowdFundingListModel {
30 | List items;
31 | String title;
32 |
33 | CrowdFundingListModel({this.items, this.title});
34 | factory CrowdFundingListModel.fromJson(Map json) {
35 | var itemsList = json['items'] as List;
36 | var items = itemsList.map((i) {
37 | return CrowdFundItemModel.fromJson(i);
38 | }).toList();
39 |
40 | return CrowdFundingListModel(items: items, title: json['title']);
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/utils/utils.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:quiver/strings.dart';
3 | import 'dart:math' as math;
4 |
5 | Color string2Color(String colorString) {
6 | int value = 0x00000000;
7 |
8 | if (isNotEmpty(colorString)) {
9 | if (colorString[0] == '#') {
10 | colorString = colorString.substring(1);
11 | }
12 | value = int.tryParse(colorString, radix: 16);
13 | if (value != null) {
14 | if (value < 0xFF000000) {
15 | value += 0xFF000000;
16 | }
17 | }
18 | }
19 | return Color(value);
20 | }
21 |
22 |
23 | Map url2query(String url){
24 | var search = new RegExp('([^&=]+)=?([^&]*)');
25 | var result = new Map();
26 |
27 | // Get rid off the beginning ? in query strings.
28 | if (url.startsWith('?')) url = url.substring(1);
29 |
30 | // A custom decoder.
31 | decode(String s) => Uri.decodeComponent(s.replaceAll('+', ' '));
32 |
33 | // Go through all the matches and build the result map.
34 | for (Match match in search.allMatches(url)) {
35 | result[decode(match.group(1))] = decode(match.group(2));
36 | }
37 |
38 | return result;
39 | }
40 |
41 | Color randomColor(){
42 | return Color((math.Random().nextDouble() * 0xFFFFFF).toInt() << 0).withOpacity(1.0);
43 | }
--------------------------------------------------------------------------------
/lib/widgets/search/recomend.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../../constants/index.dart';
3 |
4 | class RecomendListWidget extends StatelessWidget {
5 | final List items;
6 | final ValueChanged onItemTap;
7 | RecomendListWidget(this.items, {this.onItemTap});
8 | @override
9 | Widget build(BuildContext context) {
10 | return ListView.separated(
11 | padding: EdgeInsets.symmetric(horizontal: 10),
12 | itemCount: items.length,
13 | itemBuilder: (BuildContext context, int i) {
14 | return InkWell(
15 | onTap: () => onItemTap(items[i]),
16 | child: Container(
17 | height: 42,
18 | width: double.infinity,
19 | // color: Colors.red,
20 | alignment: Alignment.centerLeft,
21 | // constraints: BoxConstraints(minWidth: double.infinity),
22 | child: Text(
23 | items[i],
24 | style: TextStyle(fontSize: 15),
25 | ),
26 | ),
27 | );
28 | },
29 | separatorBuilder: (BuildContext context, int i) {
30 | return Container(
31 | height: 1,
32 | color: KColorConstant.searchRecomendDividerColor,
33 | );
34 | },
35 | );
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/lib/globleConfig.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './utils/screen_util.dart';
3 | export './constants/index.dart';
4 |
5 | class GlobalConfig {
6 | static final String appName = '护卡宝';
7 | static final String agentid='0';
8 | static final bool dark = true;
9 | // static ThemeData themeData = new ThemeData.dark();
10 | static final Color mainColor = Colors.red;
11 | static Color searchBackgroundColor = Colors.white10;
12 | static Color cardBackgroundColor = new Color(0xFF222222);
13 | static Color fontColor = Colors.white30;
14 |
15 | static final String server='http://bixue.goodgood.be/';
16 | static final String base='http://bixue.goodgood.be/Appi/';
17 | static final String wxAppId='wxbe64b7b2cd18c128';//'wxb85ad5c66ae2efb2';
18 |
19 | static final double cardWidth =ScreenUtil().L(650);//卡片统一宽度
20 | static final double cardCircularWidth = 8;//卡片圆角高度
21 |
22 | static final ShapeBorder cardBorderRadius = const RoundedRectangleBorder(
23 | side: BorderSide(color: Colors.white12),
24 | borderRadius: BorderRadius.only(
25 | topLeft: Radius.circular(8.0),
26 | topRight: Radius.circular(8.0),
27 | bottomLeft: Radius.circular(8.0),
28 | bottomRight: Radius.circular(8.0),
29 | ),
30 | );
31 |
32 | static final bool ios_show=true;
33 | }
--------------------------------------------------------------------------------
/lib/components/keyboard/custom_keyboard_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 |
4 | /// 自定义 键盘 按钮
5 |
6 | class CustomKbBtn extends StatefulWidget {
7 | String text;
8 |
9 | CustomKbBtn({Key key, this.text, this.callback}) : super(key: key);
10 | final callback;
11 |
12 | @override
13 | State createState() {
14 | return ButtonState();
15 | }
16 | }
17 |
18 | class ButtonState extends State {
19 | ///回调函数执行体
20 | var backMethod;
21 |
22 | void back() {
23 | widget.callback('$backMethod');
24 | }
25 |
26 | @override
27 | Widget build(BuildContext context) {
28 |
29 | MediaQueryData mediaQuery = MediaQuery.of(context);
30 | var _screenWidth = mediaQuery.size.width;
31 |
32 | return new Container(
33 | height:50.0,
34 | width: _screenWidth / 3,
35 | child: new OutlineButton(
36 | // 直角
37 | shape: new RoundedRectangleBorder(
38 | borderRadius: new BorderRadius.circular(0.0)),
39 | // 边框颜色
40 | borderSide: new BorderSide(color: Color(0x10333333)),
41 | child: new Text(
42 | widget.text,
43 | style: new TextStyle(color: Color(0xff333333), fontSize: 20.0),
44 | ),
45 | onPressed: back,
46 | ));
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/lib/data/base.dart:
--------------------------------------------------------------------------------
1 |
2 | import 'dart:async';
3 | import 'package:flutter/material.dart';
4 | import 'package:provide/provide.dart';
5 | import 'package:rxdart/rxdart.dart';
6 |
7 | /// BaseProvide
8 | class BaseProvide with ChangeNotifier {
9 |
10 | CompositeSubscription compositeSubscription = CompositeSubscription();
11 |
12 |
13 | /// add [StreamSubscription] to [compositeSubscription]
14 | ///
15 | /// 在 [dispose]的时候能进行取消
16 | addSubscription(StreamSubscription subscription){
17 | compositeSubscription.add(subscription);
18 | }
19 |
20 | @override
21 | void dispose() {
22 | super.dispose();
23 | compositeSubscription.dispose();
24 | }
25 | }
26 |
27 |
28 | /// page的基类 [PageProvideNode]
29 | ///
30 | /// 隐藏了 [ProviderNode] 的调用
31 | abstract class PageProvideNode extends StatelessWidget {
32 | /// The values made available to the [child].
33 | final Providers mProviders = Providers();
34 |
35 | Widget buildContent(BuildContext context);
36 |
37 | @override
38 | Widget build(BuildContext context) {
39 | return ProviderNode(
40 | providers: mProviders,
41 | child: buildContent(context),
42 | );
43 | }
44 | }
45 |
46 |
47 | abstract class BaseState extends State {
48 |
49 | @override
50 | void initState() {
51 | super.initState();
52 | }
53 |
54 | @override
55 | void dispose() {
56 | super.dispose();
57 | }
58 | }
--------------------------------------------------------------------------------
/lib/components/dropdown.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_picker/flutter_picker.dart';
3 | import '../utils/HttpUtils.dart';
4 |
5 | class citySelector {
6 | int pid;
7 | citySelector({this.pid = 0});
8 |
9 | List _bankPickerData = new List();
10 | Map _bankCodeMap = {}; //
11 | String _bankName;
12 | String _bankId;
13 |
14 | Future showBankPicker(BuildContext context,Function callback) async {
15 | await HttpUtils.dioappi(
16 | 'Api/getregion/pid/${this.pid}',
17 | {},
18 | ).then((response) {
19 | response['data'].forEach((ele) {
20 | if (ele.isNotEmpty) {
21 | _bankPickerData.add(ele['name'].toString());
22 | _bankCodeMap[ele['name']] = ele['id'].toString();
23 | }
24 | });
25 | }).then((_){
26 | Picker(
27 | adapter: PickerDataAdapter(pickerdata: _bankPickerData),
28 | hideHeader: true,
29 | title: new Text("城市列表"),
30 | cancelText: '取消',
31 | confirmText: '确定',
32 | onConfirm: (Picker picker, List value) {
33 | _bankName = picker.getSelectedValues()[0].toString();
34 | _bankId = _bankCodeMap[_bankName];
35 | print("bankId:$_bankId");
36 | callback(_bankId,_bankName);
37 | }).showDialog(context);
38 | });
39 |
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/lib/constants/font.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../utils/screen_util.dart';
3 | import 'color.dart';
4 | class KfontConstant {
5 | static TextStyle bigfontSize = TextStyle(
6 | fontSize: 14,
7 | color: KColorConstant.categoryDefaultColor,
8 | decoration: TextDecoration.none,
9 | );
10 |
11 | static TextStyle defaultStyle = TextStyle(
12 | fontSize: 14,
13 | color: KColorConstant.categoryDefaultColor,
14 | decoration: TextDecoration.none,
15 | );
16 |
17 | static TextStyle defaultSubStyle = TextStyle(
18 | fontSize:12,
19 | color: Colors.black45,
20 | decoration: TextDecoration.none,
21 | );
22 |
23 | static TextStyle defaultPriceStyle = TextStyle(
24 | fontSize:10,
25 | color: KColorConstant.priceColor,
26 | decoration: TextDecoration.none,
27 | );
28 |
29 |
30 | static TextStyle fLoorTitleStyle = TextStyle(
31 | fontSize:14,
32 | color: KColorConstant.floorTitleColor,
33 | );
34 | static TextStyle pinweiCorverSubtitleStyle = TextStyle(
35 | fontSize: 10,
36 | color: KColorConstant.pinweicorverSubtitleColor,
37 | );
38 |
39 | static TextStyle cartBottomTotalPriceStyle = TextStyle(fontSize: 12,color: KColorConstant.priceColor);
40 |
41 |
42 | static TextStyle searchResultItemCommentCountStyle = TextStyle(
43 | fontSize: 12, color: Color(0xFF999999));
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/lib/components/loginButton.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../routers/application.dart';
3 | import 'package:fluro/fluro.dart';
4 |
5 | class LoginButton extends StatelessWidget {
6 | final String userName;
7 | final String userPic;
8 |
9 | LoginButton({Key key, this.userPic, this.userName}) : super(key: key);
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | if (userName != '') {
14 | return FlatButton(
15 | onPressed: () {
16 | print('click loggout');
17 | Application.router.navigateTo(context, "/login",
18 | transition: TransitionType.fadeIn);
19 | /* Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(
20 | builder: (BuildContext context) => LoginScreen()), (//跳转到主页
21 | Route route) => route == null);
22 | */
23 | },
24 | child: Text(
25 | '登陆 . 注册',
26 | style: TextStyle(
27 | color: Theme.of(context).primaryColor,
28 | fontSize: 16.0,
29 | fontWeight: FontWeight.w200,
30 | ),
31 | ));
32 | }
33 | return Container(
34 | child: Row(
35 | children: [
36 | CircleAvatar(
37 | backgroundImage: NetworkImage(userPic),
38 | child: Text(userName),
39 | ),
40 | ],
41 | ),
42 | );
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/lib/routers/routes.dart:
--------------------------------------------------------------------------------
1 | import './router_handler.dart';
2 | import 'package:fluro/fluro.dart';
3 | import 'package:flutter/material.dart';
4 |
5 | class Routes {
6 | static String root = '/';
7 | static String swipPage = '/swip';
8 | static String flashPage = "/flash";
9 | static String webViewPage = '/web';
10 | static String homePage = '/home';//
11 | static String loginPage = '/login';
12 | static String userCenterPage = '/user';
13 |
14 | static String sharePage = '/share';
15 | static String payLogPage = '/paylog';
16 | static String addCardPage = '/addcard';
17 | static String omyMsgistPage = '/myMsg';
18 |
19 |
20 | static void configureRoutes(Router router) {
21 | router.notFoundHandler = new Handler(
22 | handlerFunc: (BuildContext context, Map> params) {
23 | print("ROUTE WAS NOT FOUND !!!");
24 | });
25 | router.define(root,handler: homePageHandler);
26 | router.define(flashPage, handler: flashPageHandler);
27 | router.define(webViewPage, handler: webPageHandler);
28 | router.define(homePage, handler: homePageHandler);
29 | router.define(loginPage,handler: loginPageHandler);
30 |
31 | router.define(userCenterPage, handler:userPageHandler);
32 |
33 | router.define(sharePage, handler:sharePageHandler);
34 | router.define(payLogPage, handler: payLogPageHandler);
35 | router.define(omyMsgistPage, handler: myMsgListPageHandler);
36 |
37 |
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/views/search/searchserver.dart:
--------------------------------------------------------------------------------
1 |
2 | import 'dart:convert';
3 | import 'dart:async';
4 | import '../../utils/HttpUtils.dart';
5 | /**
6 | * 获取热刺列表
7 | */
8 | Future getHotSugs(context) async {
9 | var response =await HttpUtils.dioappi(
10 | "Shop/getHotKeys", {}, context: context);
11 | return jsonDecode(response)['result'] as List;
12 |
13 | /* return [];
14 | var url = 'https://suggest.taobao.com/sug?area=sug_hot&wireless=2';
15 | var res = await http.get(url);
16 | if (res.statusCode == 200) {
17 | List querys = jsonDecode(res.body)['querys'] as List;
18 | return querys;
19 | }else{
20 | return [];
21 | }*/
22 | }
23 | /**
24 | * 添加到搜索热刺
25 | */
26 | Future getSuggest(String q) async {
27 | return [];
28 | }
29 |
30 |
31 | /*
32 |
33 | getSearchResult(String keyworld,[int page=0]) async{
34 | String url = 'https://so.m.jd.com/ware/search._m2wq_list?keyword=$keyworld&datatype=1&callback=C&page=$page&pagesize=10&ext_attr=no&brand_col=no&price_col=no&color_col=no&size_col=no&ext_attr_sort=no&merge_sku=yes&multi_suppliers=yes&area_ids=1,72,2818&qp_disable=no&fdesc=%E5%8C%97%E4%BA%AC';
35 | var res = await http.get(url);
36 | String body = res.body;
37 | String jsonString = body.substring(2,body.length-2);
38 |
39 | // debugPrint(jsonString.replaceAll('\\x2F', '/'));
40 | var json = jsonDecode(jsonString.replaceAll( RegExp(r'\\x..') ,'/'));
41 | return json['data']['searchm']['Paragraph'] as List;
42 | }*/
43 |
--------------------------------------------------------------------------------
/lib/components/icon_with_text.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class IconWidthText extends StatelessWidget {
4 | final Image icon;
5 | final String text;
6 | final Color color;
7 |
8 | IconWidthText({Key key, this.color, this.icon, this.text}) : super(key: key);
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | return new Container(
13 | child: GestureDetector(
14 | child: new Column(
15 | mainAxisAlignment: MainAxisAlignment.spaceEvenly,
16 | mainAxisSize: MainAxisSize.max,
17 | crossAxisAlignment: CrossAxisAlignment.center,
18 | verticalDirection: VerticalDirection.down,
19 | children: [
20 | Expanded(
21 | child: new Container(
22 | constraints: new BoxConstraints.expand(),
23 | decoration: new BoxDecoration(
24 | image: new DecorationImage(
25 | // image: icon,
26 | // image: new NetworkImage('http://h.hiphotos.baidu.com/zhi6e06f06c.jpg'),
27 | image: AssetImage('images/sysicon/icon_jilu.png'),
28 | ),
29 | ),
30 | ),
31 | ),
32 | Expanded(child: Text(text))
33 | ],
34 | ),
35 | /* onTap: () {
36 | print(11);
37 | Application.router.navigateTo(context, url);
38 | },*/
39 | ),
40 | );
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/constants/color.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 |
3 | class KColorConstant {
4 | static const Color themeColor = Color.fromRGBO(240, 100, 90, 1.0);
5 | static const Color floorTitleColor = Color.fromRGBO(51, 51, 51, 1);
6 | static const Color searchBarBgColor = Color.fromRGBO(240, 240, 240, 1.0);
7 | static const Color searchBarTxtColor = Color(0xFFCDCDCD);
8 | static const Color divideLineColor = Color.fromRGBO(245, 245, 245, 1.0);
9 | static const Color categoryDefaultColor = Color(0xFF666666);
10 | static const Color priceColor = Color.fromRGBO(182, 9, 9, 1.0);
11 | static const Color pinweicorverSubtitleColor = Color.fromRGBO(153, 153, 153, 1.0);
12 | static const Color pinweicorverBtbgColor = themeColor;
13 | static const Color pinweicorverBtTxtColor = Color(0xFFFFFFFF);
14 | static const Color tabtxtColor = Color.fromRGBO(88, 88, 88, 1.0);
15 | static const Color cartDisableColor = Color.fromRGBO(221, 221,221,1.0);
16 | static const Color cartItemChangenumBtColor = Color.fromRGBO(153, 153, 153, 1.0);
17 | static const Color cartItemCountTxtColor = Color.fromRGBO(102, 102, 102, 0.8);
18 | static const Color cartBottomBgColor = Color(0xFFFFFFFF);
19 | static const Color goPayBtBgColor = themeColor;
20 | static const Color goPayBtTxtColor = Color(0xFFFFFFFF);
21 | static const Color searchAppBarBgColor = Color(0xFFFFFFFF);
22 |
23 | static const Color bottomBarbgColor = Color.fromRGBO(250, 250, 250, 1.0);
24 |
25 |
26 | static const Color searchRecomendDividerColor = Color(0xFFdedede);
27 | }
--------------------------------------------------------------------------------
/lib/model/oder_model.dart:
--------------------------------------------------------------------------------
1 | class OrderCell {
2 | String id;
3 | String orderNo;
4 | String orderName;
5 | String orderMoney;
6 | String orderBond; //保证金
7 | String orderCharge; //手续费
8 |
9 | String orderBondPer;
10 | String content;
11 | String createtime;
12 | String planText;
13 |
14 | String orderCard;
15 | String orderTime;
16 | String status; //状态,订单状态(0=进行中,1=已完成,2=已取消,3=已停止)
17 |
18 | OrderCell({
19 | this.id,
20 | this.orderNo,
21 | this.orderMoney,
22 | this.orderName,
23 | this.orderBond,
24 | this.orderCharge,
25 | this.orderBondPer,
26 | this.content,
27 | this.createtime,
28 | this.planText,
29 | this.orderCard,
30 | this.orderTime,
31 | this.status,
32 | });
33 |
34 | factory OrderCell.fromJson(Map json) {
35 | var statlist={'0':'进行中','1':'已完成','2':'已取消','3':'已停止'};
36 | return OrderCell(
37 | id: json['id'] ?? '',
38 | orderNo: json['orderNo'] ?? '',
39 | orderMoney: json['orderMoney'] ?? '',
40 | orderName: json['orderName'] ?? '',
41 | orderBond: json['orderBond'] ?? '',
42 | orderCharge: json['orderCharge'] ?? '',
43 | orderCard: json['orderNo'] ?? '',
44 | orderBondPer: json['orderBondPer'] ?? '',
45 | content: json['content'] ?? '',
46 | planText: json['planText'] ?? '',
47 | createtime: json['create_time'] ?? '',
48 | orderTime: json['planPayTime'] ?? '',
49 |
50 | status:statlist[json['status']]??'异常'
51 | );
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lib/model/product.dart:
--------------------------------------------------------------------------------
1 | class ProductItemModel {
2 | String goods_id;
3 | String shop_price;
4 | String market_price;
5 | String bgColor;
6 | String picurl;
7 | String title;
8 | String titleColor;
9 | String subtitle;
10 | String subtitleColor;
11 | ProductItemModel(
12 | {this.goods_id,
13 | this.bgColor,
14 | this.market_price,
15 | this.shop_price,
16 | this.picurl,
17 | this.title,
18 | this.titleColor,
19 | this.subtitle,
20 | this.subtitleColor});
21 | factory ProductItemModel.fromJson(Map json) {
22 | return ProductItemModel(
23 | bgColor: json['bg_color'],
24 | goods_id: json['goods_id'].toString() ?? "0",
25 | market_price: json['market_price'] ?? "0",
26 | shop_price: json['shop_price'] ?? "0",
27 | picurl: json['pic_url'],
28 | subtitle: json['subtitle'].toString()??"",
29 | titleColor: json['title_color'],
30 | subtitleColor: json['subtitle_color'],
31 | title: json['title']);
32 | }
33 | }
34 |
35 | class ProductListModel {
36 | List items;
37 | String title;
38 |
39 | ProductListModel({this.items, this.title});
40 | factory ProductListModel.fromJson(Map json) {
41 | var itemsList = json['items'] as List;
42 | var menueItems = itemsList.map((i) {
43 | return ProductItemModel.fromJson(i);
44 | }).toList();
45 |
46 | return ProductListModel(items: menueItems, title: json['title']);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/lib/components/LoadingDialog.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | // ignore: must_be_immutable
4 | class LoadingDialog extends Dialog {
5 | String text;
6 |
7 | LoadingDialog({Key key, @required this.text}) : super(key: key);
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return new Material( //创建透明层
12 | type: MaterialType.transparency, //透明类型
13 | child: new Center( //保证控件居中效果
14 | child: new SizedBox(
15 | width: 120.0,
16 | height: 120.0,
17 | child: new Container(
18 | decoration: ShapeDecoration(
19 | color: Color(0xffffffff),
20 | shape: RoundedRectangleBorder(
21 | borderRadius: BorderRadius.all(
22 | Radius.circular(8.0),
23 | ),
24 | ),
25 | ),
26 | child: new Column(
27 | mainAxisAlignment: MainAxisAlignment.center,
28 | crossAxisAlignment: CrossAxisAlignment.center,
29 | children: [
30 | new CircularProgressIndicator(),
31 | new Padding(
32 | padding: const EdgeInsets.only(
33 | top: 20.0,
34 | ),
35 | child: new Text(
36 | text,
37 | style: new TextStyle(fontSize: 12.0),
38 | ),
39 | ),
40 | ],
41 | ),
42 | ),
43 | ),
44 | ),
45 | );
46 | }
47 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # Visual Studio Code related
19 | .vscode/
20 |
21 | # Flutter/Dart/Pub related
22 | **/doc/api/
23 | .dart_tool/
24 | .flutter-plugins
25 | .packages
26 | .pub-cache/
27 | .pub/
28 | /build/
29 |
30 | # Android related
31 | **/android/**/gradle-wrapper.jar
32 | **/android/.gradle
33 | **/android/captures/
34 | **/android/gradlew
35 | **/android/gradlew.bat
36 | **/android/local.properties
37 | **/android/**/GeneratedPluginRegistrant.java
38 |
39 | # iOS/XCode related
40 | **/ios/**/*.mode1v3
41 | **/ios/**/*.mode2v3
42 | **/ios/**/*.moved-aside
43 | **/ios/**/*.pbxuser
44 | **/ios/**/*.perspectivev3
45 | **/ios/**/*sync/
46 | **/ios/**/.sconsign.dblite
47 | **/ios/**/.tags*
48 | **/ios/**/.vagrant/
49 | **/ios/**/DerivedData/
50 | **/ios/**/Icon?
51 | **/ios/**/Pods/
52 | **/ios/**/.symlinks/
53 | **/ios/**/profile
54 | **/ios/**/xcuserdata
55 | **/ios/.generated/
56 | **/ios/Flutter/App.framework
57 | **/ios/Flutter/Flutter.framework
58 | **/ios/Flutter/Generated.xcconfig
59 | **/ios/Flutter/app.flx
60 | **/ios/Flutter/app.zip
61 | **/ios/Flutter/flutter_assets/
62 | **/ios/ServiceDefinitions.json
63 | **/ios/Runner/GeneratedPluginRegistrant.*
64 |
65 | # Exceptions to above rules.
66 | !**/ios/**/default.mode1v3
67 | !**/ios/**/default.mode2v3
68 | !**/ios/**/default.pbxuser
69 | !**/ios/**/default.perspectivev3
70 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
71 |
--------------------------------------------------------------------------------
/lib/widgets/search/hotSug.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../../constants/index.dart';
3 | import '../../utils/utils.dart';
4 |
5 | class HotSugWidget extends StatelessWidget {
6 | final List hotWords;
7 | final ValueChanged goSearchList;
8 | HotSugWidget( {Key key,this.hotWords,this.goSearchList}):super(key:key);
9 | @override
10 | Widget build(BuildContext context) {
11 | return Column(
12 | children: [
13 | Container(
14 | height: 40,
15 | padding: EdgeInsets.only(left: 20),
16 | alignment: Alignment.centerLeft,
17 | color: KColorConstant.divideLineColor,
18 | child: Text(KString.searchHotTxt),
19 | margin: EdgeInsets.only(bottom: 10),
20 | ),
21 | Wrap(
22 | spacing: 10,
23 | runSpacing: 10,
24 | children: hotWords
25 | .map((i) => GestureDetector(
26 | onTap: ()=>goSearchList(i),
27 | child: Container(
28 | decoration: BoxDecoration(
29 | color: randomColor(),
30 | borderRadius: BorderRadius.circular(5)),
31 | padding:
32 | EdgeInsets.symmetric(vertical: 5, horizontal: 7),
33 | child: Text(
34 | i,
35 | style: TextStyle(color: Color(0xFFFFFFFF)),
36 | )),
37 | ))
38 | .toList(),
39 | )
40 | ],
41 | );
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/lib/model/search.dart:
--------------------------------------------------------------------------------
1 | class SearchResultItemModal {
2 | String shopName;
3 | String wareName;
4 | String price;
5 | String coupon;
6 | String imageUrl;
7 | String commentcount;
8 | String good; //好评率
9 | String shopId;
10 | String disCount;
11 | SearchResultItemModal(
12 | {this.shopId,
13 | this.shopName,
14 | this.commentcount,
15 | this.coupon,
16 | this.price,
17 | this.good,
18 | this.disCount,
19 | this.imageUrl,
20 | this.wareName});
21 | factory SearchResultItemModal.fromJson(dynamic json) {
22 | String picurl = 'http://img10.360buyimg.com/mobilecms/s270x270_' +
23 | json['Content']['imageurl'];
24 | String coupon;
25 | if(json['coupon']!=null){
26 | if(json['coupon']['m']!='0'){
27 | coupon='满${json['coupon']['m']}减${json['coupon']['j']}';
28 | }
29 | }
30 | String disCount;
31 | if(json['pfdt']!=null){
32 | if(json['pfdt']['m']!=''){
33 | disCount='${json['pfdt']['m']}件${json['pfdt']['j']}折';
34 | }
35 | }
36 |
37 | return SearchResultItemModal(
38 | shopId: json['shop_id'],
39 | shopName: json['shop_name'],
40 | imageUrl: picurl,
41 | good: json['good'],
42 | commentcount: json['commentcount'],
43 | price: json['dredisprice'],
44 | coupon: coupon,
45 | disCount: disCount,
46 | wareName: json['Content']['warename']);
47 | }
48 | }
49 |
50 | class SearchResultListModal {
51 | List data;
52 | SearchResultListModal(this.data);
53 | factory SearchResultListModal.fromJson(List json){
54 | return SearchResultListModal(
55 | json.map((i)=>SearchResultItemModal.fromJson(i)).toList()
56 | );
57 | }
58 | }
--------------------------------------------------------------------------------
/lib/model/song.dart:
--------------------------------------------------------------------------------
1 | import 'package:json_annotation/json_annotation.dart';
2 |
3 | @JsonSerializable()
4 | class Song {
5 | int id;
6 | String url;
7 | Map video;//当前
8 | Map info;//简介
9 | List