Showing
18 changed files
with
1002 additions
and
176 deletions
assets/is_member.png
0 → 100644
10.8 KB
assets/not_member.png
0 → 100644
11 KB
| @@ -17,8 +17,12 @@ PODS: | @@ -17,8 +17,12 @@ PODS: | ||
| 17 | - flutter_bugly (0.0.1): | 17 | - flutter_bugly (0.0.1): |
| 18 | - Bugly | 18 | - Bugly |
| 19 | - Flutter | 19 | - Flutter |
| 20 | + - flutter_ijkplayer (0.0.1): | ||
| 21 | + - Flutter | ||
| 22 | + - FlutterIJK (~> 0.1.0) | ||
| 20 | - flutter_statusbarcolor (0.0.1): | 23 | - flutter_statusbarcolor (0.0.1): |
| 21 | - Flutter | 24 | - Flutter |
| 25 | + - FlutterIJK (0.1.1) | ||
| 22 | - fluttertoast (0.0.2): | 26 | - fluttertoast (0.0.2): |
| 23 | - Flutter | 27 | - Flutter |
| 24 | - fluwx (0.0.1): | 28 | - fluwx (0.0.1): |
| @@ -53,6 +57,10 @@ PODS: | @@ -53,6 +57,10 @@ PODS: | ||
| 53 | - TPNS-iOS (= 1.2.7.2) | 57 | - TPNS-iOS (= 1.2.7.2) |
| 54 | - url_launcher (0.0.1): | 58 | - url_launcher (0.0.1): |
| 55 | - Flutter | 59 | - Flutter |
| 60 | + - video_player (0.0.1): | ||
| 61 | + - Flutter | ||
| 62 | + - wakelock (0.0.1): | ||
| 63 | + - Flutter | ||
| 56 | - webview_flutter (0.0.1): | 64 | - webview_flutter (0.0.1): |
| 57 | - Flutter | 65 | - Flutter |
| 58 | - WechatOpenSDK (1.8.7.1) | 66 | - WechatOpenSDK (1.8.7.1) |
| @@ -66,6 +74,7 @@ DEPENDENCIES: | @@ -66,6 +74,7 @@ DEPENDENCIES: | ||
| 66 | - Flutter (from `Flutter`) | 74 | - Flutter (from `Flutter`) |
| 67 | - flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`) | 75 | - flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`) |
| 68 | - flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`) | 76 | - flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`) |
| 77 | + - flutter_ijkplayer (from `.symlinks/plugins/flutter_ijkplayer/ios`) | ||
| 69 | - flutter_statusbarcolor (from `.symlinks/plugins/flutter_statusbarcolor/ios`) | 78 | - flutter_statusbarcolor (from `.symlinks/plugins/flutter_statusbarcolor/ios`) |
| 70 | - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) | 79 | - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) |
| 71 | - fluwx (from `.symlinks/plugins/fluwx/ios`) | 80 | - fluwx (from `.symlinks/plugins/fluwx/ios`) |
| @@ -80,11 +89,14 @@ DEPENDENCIES: | @@ -80,11 +89,14 @@ DEPENDENCIES: | ||
| 80 | - sqflite (from `.symlinks/plugins/sqflite/ios`) | 89 | - sqflite (from `.symlinks/plugins/sqflite/ios`) |
| 81 | - tpns_flutter_plugin (from `.symlinks/plugins/tpns_flutter_plugin/ios`) | 90 | - tpns_flutter_plugin (from `.symlinks/plugins/tpns_flutter_plugin/ios`) |
| 82 | - url_launcher (from `.symlinks/plugins/url_launcher/ios`) | 91 | - url_launcher (from `.symlinks/plugins/url_launcher/ios`) |
| 92 | + - video_player (from `.symlinks/plugins/video_player/ios`) | ||
| 93 | + - wakelock (from `.symlinks/plugins/wakelock/ios`) | ||
| 83 | - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`) | 94 | - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`) |
| 84 | 95 | ||
| 85 | SPEC REPOS: | 96 | SPEC REPOS: |
| 86 | trunk: | 97 | trunk: |
| 87 | - Bugly | 98 | - Bugly |
| 99 | + - FlutterIJK | ||
| 88 | - FMDB | 100 | - FMDB |
| 89 | - Reachability | 101 | - Reachability |
| 90 | - TPNS-iOS | 102 | - TPNS-iOS |
| @@ -107,6 +119,8 @@ EXTERNAL SOURCES: | @@ -107,6 +119,8 @@ EXTERNAL SOURCES: | ||
| 107 | :path: ".symlinks/plugins/flutter_app_badger/ios" | 119 | :path: ".symlinks/plugins/flutter_app_badger/ios" |
| 108 | flutter_bugly: | 120 | flutter_bugly: |
| 109 | :path: ".symlinks/plugins/flutter_bugly/ios" | 121 | :path: ".symlinks/plugins/flutter_bugly/ios" |
| 122 | + flutter_ijkplayer: | ||
| 123 | + :path: ".symlinks/plugins/flutter_ijkplayer/ios" | ||
| 110 | flutter_statusbarcolor: | 124 | flutter_statusbarcolor: |
| 111 | :path: ".symlinks/plugins/flutter_statusbarcolor/ios" | 125 | :path: ".symlinks/plugins/flutter_statusbarcolor/ios" |
| 112 | fluttertoast: | 126 | fluttertoast: |
| @@ -135,6 +149,10 @@ EXTERNAL SOURCES: | @@ -135,6 +149,10 @@ EXTERNAL SOURCES: | ||
| 135 | :path: ".symlinks/plugins/tpns_flutter_plugin/ios" | 149 | :path: ".symlinks/plugins/tpns_flutter_plugin/ios" |
| 136 | url_launcher: | 150 | url_launcher: |
| 137 | :path: ".symlinks/plugins/url_launcher/ios" | 151 | :path: ".symlinks/plugins/url_launcher/ios" |
| 152 | + video_player: | ||
| 153 | + :path: ".symlinks/plugins/video_player/ios" | ||
| 154 | + wakelock: | ||
| 155 | + :path: ".symlinks/plugins/wakelock/ios" | ||
| 138 | webview_flutter: | 156 | webview_flutter: |
| 139 | :path: ".symlinks/plugins/webview_flutter/ios" | 157 | :path: ".symlinks/plugins/webview_flutter/ios" |
| 140 | 158 | ||
| @@ -148,7 +166,9 @@ SPEC CHECKSUMS: | @@ -148,7 +166,9 @@ SPEC CHECKSUMS: | ||
| 148 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec | 166 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec |
| 149 | flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68 | 167 | flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68 |
| 150 | flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3 | 168 | flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3 |
| 169 | + flutter_ijkplayer: ef9006131553deb6d8ae6d7fbd3bcbf93b135930 | ||
| 151 | flutter_statusbarcolor: 8afb1071ed8c58be929f1e32b36c629771fd2259 | 170 | flutter_statusbarcolor: 8afb1071ed8c58be929f1e32b36c629771fd2259 |
| 171 | + FlutterIJK: f3c0ead9ca31b93d993d46dda53156fdc7b22d2c | ||
| 152 | fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b | 172 | fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b |
| 153 | fluwx: 07a55ed66bf3a4961e836a2a411b02dcada32902 | 173 | fluwx: 07a55ed66bf3a4961e836a2a411b02dcada32902 |
| 154 | FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a | 174 | FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a |
| @@ -165,6 +185,8 @@ SPEC CHECKSUMS: | @@ -165,6 +185,8 @@ SPEC CHECKSUMS: | ||
| 165 | TPNS-iOS: 9b35473a4a0d07f2c2730ea1e66c6749c2b98095 | 185 | TPNS-iOS: 9b35473a4a0d07f2c2730ea1e66c6749c2b98095 |
| 166 | tpns_flutter_plugin: 8dbbee157aab91a878f64d056c1383726a6c5c4d | 186 | tpns_flutter_plugin: 8dbbee157aab91a878f64d056c1383726a6c5c4d |
| 167 | url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef | 187 | url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef |
| 188 | + video_player: 9cc823b1d9da7e8427ee591e8438bfbcde500e6e | ||
| 189 | + wakelock: 0d4a70faf8950410735e3f61fb15d517c8a6efc4 | ||
| 168 | webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96 | 190 | webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96 |
| 169 | WechatOpenSDK: 6a4d1436c15b3b5fe2a0bd383f3046010186da44 | 191 | WechatOpenSDK: 6a4d1436c15b3b5fe2a0bd383f3046010186da44 |
| 170 | 192 |
| @@ -298,6 +298,8 @@ | @@ -298,6 +298,8 @@ | ||
| 298 | "${BUILT_PRODUCTS_DIR}/sign_in_with_apple/sign_in_with_apple.framework", | 298 | "${BUILT_PRODUCTS_DIR}/sign_in_with_apple/sign_in_with_apple.framework", |
| 299 | "${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework", | 299 | "${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework", |
| 300 | "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework", | 300 | "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework", |
| 301 | + "${BUILT_PRODUCTS_DIR}/video_player/video_player.framework", | ||
| 302 | + "${BUILT_PRODUCTS_DIR}/wakelock/wakelock.framework", | ||
| 301 | "${BUILT_PRODUCTS_DIR}/webview_flutter/webview_flutter.framework", | 303 | "${BUILT_PRODUCTS_DIR}/webview_flutter/webview_flutter.framework", |
| 302 | ); | 304 | ); |
| 303 | name = "[CP] Embed Pods Frameworks"; | 305 | name = "[CP] Embed Pods Frameworks"; |
| @@ -322,6 +324,8 @@ | @@ -322,6 +324,8 @@ | ||
| 322 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sign_in_with_apple.framework", | 324 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sign_in_with_apple.framework", |
| 323 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework", | 325 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework", |
| 324 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework", | 326 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework", |
| 327 | + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/video_player.framework", | ||
| 328 | + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/wakelock.framework", | ||
| 325 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/webview_flutter.framework", | 329 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/webview_flutter.framework", |
| 326 | ); | 330 | ); |
| 327 | runOnlyForDeploymentPostprocessing = 0; | 331 | runOnlyForDeploymentPostprocessing = 0; |
| 1 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
| 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
| 3 | +import 'package:one_key/pages/create_store/video_widget.dart'; | ||
| 3 | import 'package:one_key/res/colors.dart'; | 4 | import 'package:one_key/res/colors.dart'; |
| 4 | import 'package:one_key/utils/navigator_util.dart'; | 5 | import 'package:one_key/utils/navigator_util.dart'; |
| 5 | import 'package:one_key/widgets/round_button.dart'; | 6 | import 'package:one_key/widgets/round_button.dart'; |
| @@ -44,6 +45,66 @@ class _CreateStorePageState extends State<CreateStorePage> { | @@ -44,6 +45,66 @@ class _CreateStorePageState extends State<CreateStorePage> { | ||
| 44 | return list; | 45 | return list; |
| 45 | } | 46 | } |
| 46 | 47 | ||
| 48 | + ///店铺名称 | ||
| 49 | + Widget _storeNameWidget() { | ||
| 50 | + return Column( | ||
| 51 | + crossAxisAlignment: CrossAxisAlignment.start, | ||
| 52 | + children: [ | ||
| 53 | + Text('2.您的店铺名称是?', | ||
| 54 | + style: TextStyle( | ||
| 55 | + fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)), | ||
| 56 | + VEmptyView(30), | ||
| 57 | + TextField( | ||
| 58 | + // textAlignVertical: TextAlignVertical.bottom, | ||
| 59 | + maxLines: 1, | ||
| 60 | + // //光标颜色 | ||
| 61 | + // cursorColor: | ||
| 62 | + // widget.isSelect ? Colors.white : MyColours.color_199095, | ||
| 63 | + //输入文本的样式 | ||
| 64 | + style: TextStyle( | ||
| 65 | + fontSize: ScreenUtil().setSp(28), | ||
| 66 | + ), | ||
| 67 | + // focusNode: _codeNode, | ||
| 68 | + decoration: InputDecoration( | ||
| 69 | + contentPadding: EdgeInsets.symmetric( | ||
| 70 | + vertical: ScreenUtil().setWidth(6), | ||
| 71 | + horizontal: ScreenUtil().setWidth(20)), | ||
| 72 | + border: OutlineInputBorder(), | ||
| 73 | + hintText: '请输入店铺名称', | ||
| 74 | + hintStyle: TextStyle( | ||
| 75 | + color: MyColours.color_999999, | ||
| 76 | + fontSize: ScreenUtil().setSp(28), | ||
| 77 | + ), | ||
| 78 | + // enabledBorder: new UnderlineInputBorder( | ||
| 79 | + // borderSide: BorderSide.none, | ||
| 80 | + // ), | ||
| 81 | + focusedBorder: OutlineInputBorder( | ||
| 82 | + borderSide: BorderSide(color: MyColours.color_199095)), | ||
| 83 | + ), | ||
| 84 | + onChanged: (value) {}, | ||
| 85 | + onEditingComplete: () { | ||
| 86 | + FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘 | ||
| 87 | + }, | ||
| 88 | + keyboardType: TextInputType.number, | ||
| 89 | + ) | ||
| 90 | + ], | ||
| 91 | + ); | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + ///店铺环境 | ||
| 95 | + Widget _storeEnvironmentWidget() { | ||
| 96 | + return Column( | ||
| 97 | + crossAxisAlignment: CrossAxisAlignment.start, | ||
| 98 | + children: [ | ||
| 99 | + Text('3.请上传您店铺环境的照片或者视频', | ||
| 100 | + style: TextStyle( | ||
| 101 | + fontSize: ScreenUtil().setSp(30), fontWeight: FontWeight.bold)), | ||
| 102 | + VEmptyView(30), | ||
| 103 | + VideoPickerWidget(maxImageNumber: 1) | ||
| 104 | + ], | ||
| 105 | + ); | ||
| 106 | + } | ||
| 107 | + | ||
| 47 | @override | 108 | @override |
| 48 | Widget build(BuildContext context) { | 109 | Widget build(BuildContext context) { |
| 49 | return Scaffold( | 110 | return Scaffold( |
| @@ -74,6 +135,10 @@ class _CreateStorePageState extends State<CreateStorePage> { | @@ -74,6 +135,10 @@ class _CreateStorePageState extends State<CreateStorePage> { | ||
| 74 | fontWeight: FontWeight.bold)), | 135 | fontWeight: FontWeight.bold)), |
| 75 | VEmptyView(30), | 136 | VEmptyView(30), |
| 76 | Column(children: _roomTypeWidget()), | 137 | Column(children: _roomTypeWidget()), |
| 138 | + _storeNameWidget(), | ||
| 139 | + VEmptyView(30), | ||
| 140 | + _storeEnvironmentWidget(), | ||
| 141 | + VEmptyView(30), | ||
| 77 | ]))), | 142 | ]))), |
| 78 | RoundButton( | 143 | RoundButton( |
| 79 | text: '下一步', | 144 | text: '下一步', |
lib/pages/create_store/play_video.dart
0 → 100644
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | +import 'package:flutter_ijkplayer/flutter_ijkplayer.dart'; | ||
| 3 | +import 'package:one_key/utils/navigator_util.dart'; | ||
| 4 | +import 'package:one_key/widgets/system_app_bar.dart'; | ||
| 5 | + | ||
| 6 | +class PlayVideoPage extends StatefulWidget { | ||
| 7 | + final String url; | ||
| 8 | + PlayVideoPage({Key key, this.url}) : super(key: key); | ||
| 9 | + | ||
| 10 | + @override | ||
| 11 | + _PlayVideoPageState createState() => _PlayVideoPageState(); | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +class _PlayVideoPageState extends State<PlayVideoPage> { | ||
| 15 | + IjkMediaController ijkMediaController = IjkMediaController(); | ||
| 16 | + | ||
| 17 | + @override | ||
| 18 | + void initState() { | ||
| 19 | + // TODO: implement initState | ||
| 20 | + super.initState(); | ||
| 21 | + ijkMediaController.setNetworkDataSource( | ||
| 22 | + widget.url, | ||
| 23 | + autoPlay: true, | ||
| 24 | + ); | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + @override | ||
| 28 | + Widget build(BuildContext context) { | ||
| 29 | + return Scaffold( | ||
| 30 | + appBar: SystemAppBar( | ||
| 31 | + 'cannnn', | ||
| 32 | + onTap: () { | ||
| 33 | + Navigator.pop(context); | ||
| 34 | + }, | ||
| 35 | + ), | ||
| 36 | + body: IjkPlayer(mediaController: ijkMediaController), | ||
| 37 | + ); | ||
| 38 | + } | ||
| 39 | +} |
lib/pages/create_store/video_widget.dart
0 → 100644
| 1 | +import 'dart:convert'; | ||
| 2 | + | ||
| 3 | +import 'dart:io'; | ||
| 4 | +import 'dart:async'; | ||
| 5 | + | ||
| 6 | +import 'package:cached_network_image/cached_network_image.dart'; | ||
| 7 | +import 'package:flutter/material.dart'; | ||
| 8 | +import 'package:flutter_ijkplayer/flutter_ijkplayer.dart'; | ||
| 9 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
| 10 | +import 'package:one_key/models/upload_img_model.dart'; | ||
| 11 | +import 'package:one_key/pages/online_check/photo_view_wiget.dart'; | ||
| 12 | +import 'package:one_key/pages/online_check/progress.dart'; | ||
| 13 | + | ||
| 14 | +import 'package:one_key/provider/online_check_edit_provider.dart'; | ||
| 15 | +import 'package:one_key/provider/upload_img_provider.dart'; | ||
| 16 | +import 'package:one_key/res/colors.dart'; | ||
| 17 | +import 'package:one_key/utils/dialog_util.dart'; | ||
| 18 | +import 'package:one_key/utils/misc.dart'; | ||
| 19 | +import 'package:one_key/utils/navigator_util.dart'; | ||
| 20 | +import 'package:one_key/utils/upload_image_util.dart'; | ||
| 21 | +import 'package:one_key/utils/utils.dart'; | ||
| 22 | +import 'package:one_key/widgets/MyDivider.dart'; | ||
| 23 | +import 'package:one_key/widgets/v_empty_view.dart'; | ||
| 24 | +import 'package:permission_handler/permission_handler.dart'; | ||
| 25 | +import 'package:photo/photo.dart'; | ||
| 26 | +import 'package:provider/provider.dart'; | ||
| 27 | + | ||
| 28 | +import 'package:image_picker/image_picker.dart'; | ||
| 29 | +import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart'; | ||
| 30 | +import 'package:video_player/video_player.dart'; | ||
| 31 | +import '../online_check/dispose.dart'; | ||
| 32 | +import 'package:photo_manager/photo_manager.dart'; | ||
| 33 | +// import 'package:video_thumbnail/video_thumbnail.dart'; | ||
| 34 | +import 'package:chewie/chewie.dart'; | ||
| 35 | + | ||
| 36 | +typedef void OnPickImageCallback( | ||
| 37 | + double maxWidth, double maxHeight, int quality); | ||
| 38 | + | ||
| 39 | +class VideoPickerWidget extends StatefulWidget { | ||
| 40 | + final ScrollController scrollController; | ||
| 41 | + final Color borderColor; | ||
| 42 | + final ValueChanged onChange; | ||
| 43 | + final int maxImageNumber; | ||
| 44 | + VideoPickerWidget( | ||
| 45 | + {Key key, | ||
| 46 | + this.scrollController, | ||
| 47 | + this.borderColor = Colors.blue, | ||
| 48 | + this.onChange, | ||
| 49 | + this.maxImageNumber = 5}) | ||
| 50 | + : super(key: key); | ||
| 51 | + | ||
| 52 | + @override | ||
| 53 | + _VideoPickerWidgetState createState() => _VideoPickerWidgetState(); | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> { | ||
| 57 | + final picker = ImagePicker(); | ||
| 58 | + // OnlineCheckEditProvider _onlineCheckEditProvider; | ||
| 59 | + UploadImageProvider _uploadImageProvider; | ||
| 60 | + | ||
| 61 | + // 用户输入的文件名 | ||
| 62 | + String key; | ||
| 63 | + // 用户输入的 partSize | ||
| 64 | + int partSize = 4; | ||
| 65 | + // 用户输入的 token | ||
| 66 | + String token; | ||
| 67 | + | ||
| 68 | + /// storage 实例 | ||
| 69 | + final Storage storage = Storage(); | ||
| 70 | + // 控制器,可以用于取消任务、获取上述的状态,进度等信息 | ||
| 71 | + // PutController putController = PutController(); | ||
| 72 | + // 当前的任务状态 | ||
| 73 | + | ||
| 74 | + // String thumbnailPath; | ||
| 75 | + VideoPlayerController _controller; | ||
| 76 | + Future _initializeVideoPlayerFuture; | ||
| 77 | + | ||
| 78 | + // 声明控制器(两个) | ||
| 79 | + VideoPlayerController videoPlayerController; | ||
| 80 | + ChewieController chewieController; | ||
| 81 | + IjkMediaController ijkMediaController = IjkMediaController(); | ||
| 82 | + | ||
| 83 | + @override | ||
| 84 | + void initState() { | ||
| 85 | + // storage = Storage(); | ||
| 86 | + // putController = PutController(); | ||
| 87 | + super.initState(); | ||
| 88 | + | ||
| 89 | + // _controller.setLooping(false); | ||
| 90 | + // 生成控制器(两个) | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + @override | ||
| 94 | + void dispose() { | ||
| 95 | + super.dispose(); | ||
| 96 | + // 销毁播放器的控制器 | ||
| 97 | + _controller.dispose(); | ||
| 98 | + chewieController.dispose(); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + ///#相机拍照,单图选择 | ||
| 102 | + Future _getFromPictureOrCamera(imageSource) async { | ||
| 103 | + final pickedFile = await picker.getVideo( | ||
| 104 | + source: imageSource, maxDuration: const Duration(seconds: 15)); | ||
| 105 | + // thumbnailPath = await VideoThumbnail.thumbnailFile( | ||
| 106 | + // video: pickedFile.path, | ||
| 107 | + // imageFormat: ImageFormat.PNG, | ||
| 108 | + // maxWidth: 128, | ||
| 109 | + // quality: 25); | ||
| 110 | + | ||
| 111 | + // print(thumbnailPath); | ||
| 112 | + _controller = VideoPlayerController.file(File(pickedFile.path)); | ||
| 113 | + _initializeVideoPlayerFuture = _controller.initialize(); | ||
| 114 | + setState(() { | ||
| 115 | + if (pickedFile != null) { | ||
| 116 | + UploadImgModel imgModel = UploadImgModel(); | ||
| 117 | + imgModel.file = File(pickedFile.path); | ||
| 118 | + imgModel.process = 0.01; | ||
| 119 | + _uploadImageProvider.imageList.add(imgModel); | ||
| 120 | + } else { | ||
| 121 | + print('No image selected.'); | ||
| 122 | + } | ||
| 123 | + }); | ||
| 124 | + if (pickedFile != null) { | ||
| 125 | + UploadImageUtil().startUpload( | ||
| 126 | + context, | ||
| 127 | + File(pickedFile.path), | ||
| 128 | + _uploadImageProvider.imageList.length - 1, | ||
| 129 | + true, | ||
| 130 | + _uploadImageProvider); | ||
| 131 | + } | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + ///多图片选择 | ||
| 135 | + void pickAsset(PickType type, {List<AssetPathEntity> pathList}) async { | ||
| 136 | + /// context is required, other params is optional. | ||
| 137 | + List<AssetEntity> imgList = await PhotoPicker.pickAsset( | ||
| 138 | + // BuildContext required | ||
| 139 | + context: context, | ||
| 140 | + | ||
| 141 | + /// The following are optional parameters. | ||
| 142 | + themeColor: MyColours.color_199095, | ||
| 143 | + // the title color and bottom color | ||
| 144 | + textColor: Colors.white, | ||
| 145 | + // text color | ||
| 146 | + padding: 1.0, | ||
| 147 | + // item padding | ||
| 148 | + dividerColor: Colors.grey, | ||
| 149 | + // divider color | ||
| 150 | + disableColor: Colors.grey.shade300, | ||
| 151 | + // the check box disable color | ||
| 152 | + itemRadio: 0.88, | ||
| 153 | + // the content item radio | ||
| 154 | + maxSelected: | ||
| 155 | + widget.maxImageNumber - _uploadImageProvider.imageList.length, | ||
| 156 | + // max picker image count | ||
| 157 | + // provider: I18nProvider.english, | ||
| 158 | + provider: I18nProvider.chinese, | ||
| 159 | + // i18n provider ,default is chinese. , you can custom I18nProvider or use ENProvider() | ||
| 160 | + rowCount: 3, | ||
| 161 | + // item row count | ||
| 162 | + thumbSize: 150, | ||
| 163 | + // preview thumb size , default is 64 | ||
| 164 | + sortDelegate: SortDelegate.common, | ||
| 165 | + // default is common ,or you make custom delegate to sort your gallery | ||
| 166 | + checkBoxBuilderDelegate: DefaultCheckBoxBuilderDelegate( | ||
| 167 | + activeColor: MyColours.color_353535, | ||
| 168 | + unselectedColor: Colors.white, | ||
| 169 | + checkColor: MyColours.color_199095, | ||
| 170 | + ), | ||
| 171 | + // default is DefaultCheckBoxBuilderDelegate ,or you make custom delegate to create checkbox | ||
| 172 | + // loadingDelegate: this, | ||
| 173 | + // if you want to build custom loading widget,extends LoadingDelegate, [see example/lib/main.dart] | ||
| 174 | + badgeDelegate: const DurationBadgeDelegate(), | ||
| 175 | + // badgeDelegate to show badge widget | ||
| 176 | + pickType: type, | ||
| 177 | + photoPathList: pathList, | ||
| 178 | + ); | ||
| 179 | + if (imgList == null || imgList.isEmpty) { | ||
| 180 | + print("No pick item."); | ||
| 181 | + return; | ||
| 182 | + } else { | ||
| 183 | + for (int i = 0; i < imgList.length; i++) { | ||
| 184 | + var file = await imgList[i].file; | ||
| 185 | + setState(() { | ||
| 186 | + UploadImgModel imgModel = UploadImgModel(); | ||
| 187 | + imgModel.file = File(file.absolute.path); | ||
| 188 | + imgModel.process = 0.01; | ||
| 189 | + _uploadImageProvider.imageList.add(imgModel); | ||
| 190 | + }); | ||
| 191 | + UploadImageUtil().startUpload( | ||
| 192 | + context, | ||
| 193 | + File(file.absolute.path), | ||
| 194 | + _uploadImageProvider.imageList.length - 1, | ||
| 195 | + false, | ||
| 196 | + _uploadImageProvider); | ||
| 197 | + // startUpload(File(file.absolute.path), | ||
| 198 | + // _uploadImageProvider.imageList.length - 1, false); | ||
| 199 | + } | ||
| 200 | + } | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + ///添加图片UI弹出 | ||
| 204 | + Future _openModalBottomSheet(context) async { | ||
| 205 | + final option = await showModalBottomSheet( | ||
| 206 | + context: context, | ||
| 207 | + backgroundColor: Colors.transparent, | ||
| 208 | + isDismissible: false, | ||
| 209 | + builder: (BuildContext context) { | ||
| 210 | + return Container( | ||
| 211 | + // height: ScreenUtil().setWidth(180 * 2), | ||
| 212 | + decoration: BoxDecoration( | ||
| 213 | + color: MyColours.color_ffffff, | ||
| 214 | + borderRadius: BorderRadius.only( | ||
| 215 | + topLeft: Radius.circular(ScreenUtil().setWidth(24)), | ||
| 216 | + topRight: Radius.circular(ScreenUtil().setWidth(24)))), | ||
| 217 | + child: Column( | ||
| 218 | + mainAxisSize: MainAxisSize.min, | ||
| 219 | + children: <Widget>[ | ||
| 220 | + InkWell( | ||
| 221 | + onTap: () { | ||
| 222 | + Utils.getPickPermission(context, () { | ||
| 223 | + _getFromPictureOrCamera(ImageSource.camera); | ||
| 224 | + Navigator.pop(context); | ||
| 225 | + }, PermissionGroup.camera); | ||
| 226 | + }, | ||
| 227 | + child: Container( | ||
| 228 | + width: double.infinity, | ||
| 229 | + height: ScreenUtil().setWidth(58 * 2), | ||
| 230 | + child: Center( | ||
| 231 | + child: Text( | ||
| 232 | + '拍摄', | ||
| 233 | + style: TextStyle( | ||
| 234 | + fontSize: ScreenUtil().setSp(32), | ||
| 235 | + color: MyColours.color_353535, | ||
| 236 | + fontWeight: FontWeight.bold), | ||
| 237 | + ), | ||
| 238 | + )), | ||
| 239 | + ), | ||
| 240 | + MyDivider( | ||
| 241 | + double.infinity, | ||
| 242 | + ScreenUtil().setWidth(2), | ||
| 243 | + color: MyColours.color_EEEEEE, | ||
| 244 | + ), | ||
| 245 | + InkWell( | ||
| 246 | + onTap: () { | ||
| 247 | + Utils.getPickPermission(context, () { | ||
| 248 | + // pickAsset(PickType.onlyVideo); | ||
| 249 | + _getFromPictureOrCamera(ImageSource.gallery); | ||
| 250 | + Navigator.pop(context); | ||
| 251 | + }, PermissionGroup.photos); | ||
| 252 | + }, | ||
| 253 | + child: Container( | ||
| 254 | + width: double.infinity, | ||
| 255 | + height: ScreenUtil().setWidth(58 * 2), | ||
| 256 | + child: Center( | ||
| 257 | + child: Text( | ||
| 258 | + '从相册选择', | ||
| 259 | + style: TextStyle( | ||
| 260 | + fontSize: ScreenUtil().setSp(32), | ||
| 261 | + color: MyColours.color_353535, | ||
| 262 | + fontWeight: FontWeight.bold), | ||
| 263 | + ), | ||
| 264 | + )), | ||
| 265 | + ), | ||
| 266 | + MyDivider( | ||
| 267 | + double.infinity, | ||
| 268 | + ScreenUtil().setWidth(10), | ||
| 269 | + color: MyColours.color_EEEEEE, | ||
| 270 | + ), | ||
| 271 | + InkWell( | ||
| 272 | + onTap: () { | ||
| 273 | + Navigator.pop(context, '取消'); | ||
| 274 | + }, | ||
| 275 | + child: Container( | ||
| 276 | + width: double.infinity, | ||
| 277 | + height: ScreenUtil().setWidth(58 * 2), | ||
| 278 | + child: Center( | ||
| 279 | + child: Text( | ||
| 280 | + '取消', | ||
| 281 | + style: TextStyle( | ||
| 282 | + fontSize: ScreenUtil().setSp(32), | ||
| 283 | + color: MyColours.color_353535, | ||
| 284 | + fontWeight: FontWeight.bold), | ||
| 285 | + ), | ||
| 286 | + ))) | ||
| 287 | + ], | ||
| 288 | + ), | ||
| 289 | + ); | ||
| 290 | + }); | ||
| 291 | + } | ||
| 292 | + | ||
| 293 | + //查看大图 | ||
| 294 | + _showPhotoView(BuildContext context, int index, List imgs, | ||
| 295 | + {isShow = false, List dashName}) async { | ||
| 296 | + // if (imgs.length == 1 && | ||
| 297 | + // imgs[0] == | ||
| 298 | + // 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') { | ||
| 299 | + // imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png'; | ||
| 300 | + // } | ||
| 301 | + // _controller = VideoPlayerController.network(imgs[index]); | ||
| 302 | + // chewieController = ChewieController( | ||
| 303 | + // videoPlayerController: _controller, | ||
| 304 | + // // 比例 | ||
| 305 | + // // aspectRatio: 16 / 9, | ||
| 306 | + // // 自动播放 | ||
| 307 | + // autoPlay: true, | ||
| 308 | + // // 循环 | ||
| 309 | + // looping: true, | ||
| 310 | + // ); | ||
| 311 | + | ||
| 312 | + ijkMediaController.setNetworkDataSource( | ||
| 313 | + imgs[index], | ||
| 314 | + autoPlay: true, | ||
| 315 | + ); | ||
| 316 | + Utils.setBarStatus(false, color: Colors.black); | ||
| 317 | + dynamic result = await showGeneralDialog( | ||
| 318 | + context: context, | ||
| 319 | + barrierDismissible: false, | ||
| 320 | + barrierColor: Colors.black, | ||
| 321 | + barrierLabel: | ||
| 322 | + MaterialLocalizations.of(context).modalBarrierDismissLabel, | ||
| 323 | + transitionDuration: const Duration(milliseconds: 150), | ||
| 324 | + pageBuilder: (BuildContext context, Animation animation, | ||
| 325 | + Animation secondaryAnimation) { | ||
| 326 | + return Column( | ||
| 327 | + children: [ | ||
| 328 | + Container( | ||
| 329 | + height: ScreenUtil().setWidth(100), | ||
| 330 | + color: Colors.black, | ||
| 331 | + child: Row( | ||
| 332 | + children: [ | ||
| 333 | + Material( | ||
| 334 | + child: InkWell( | ||
| 335 | + onTap: () { | ||
| 336 | + Navigator.pop(context); | ||
| 337 | + }, | ||
| 338 | + child: Image.asset(Utils.getImgPath('invication_back')), | ||
| 339 | + )), | ||
| 340 | + ], | ||
| 341 | + ), | ||
| 342 | + ), | ||
| 343 | + | ||
| 344 | + // Chewie( | ||
| 345 | + // controller: chewieController, | ||
| 346 | + // ), | ||
| 347 | + IjkPlayer(mediaController: ijkMediaController), | ||
| 348 | + ], | ||
| 349 | + ); | ||
| 350 | + }); | ||
| 351 | + // Utils.setBarStatus(true, color: Colors.white); | ||
| 352 | + } | ||
| 353 | + | ||
| 354 | + @override | ||
| 355 | + Widget build(BuildContext context) { | ||
| 356 | + _uploadImageProvider = | ||
| 357 | + Provider.of<UploadImageProvider>(context, listen: true); | ||
| 358 | + return _getGridImg( | ||
| 359 | + _uploadImageProvider.imageList.length < widget.maxImageNumber | ||
| 360 | + ? _uploadImageProvider.imageList.length + 1 | ||
| 361 | + : _uploadImageProvider.imageList.length, | ||
| 362 | + context, | ||
| 363 | + _uploadImageProvider.imageList.length == widget.maxImageNumber | ||
| 364 | + ? true | ||
| 365 | + : false); | ||
| 366 | + } | ||
| 367 | + | ||
| 368 | + /// 九宫格 | ||
| 369 | + Widget _getGridImg(count, context, isLinjie) { | ||
| 370 | + // return | ||
| 371 | + // GridView.builder( | ||
| 372 | + // controller: widget.scrollController, | ||
| 373 | + // // padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)), | ||
| 374 | + // shrinkWrap: true, | ||
| 375 | + // itemCount: count, | ||
| 376 | + // //SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget | ||
| 377 | + // gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( | ||
| 378 | + // //横轴元素个数 | ||
| 379 | + // crossAxisCount: 1, | ||
| 380 | + // //纵轴间距 | ||
| 381 | + // mainAxisSpacing: ScreenUtil().setWidth(30), | ||
| 382 | + // //横轴间距 | ||
| 383 | + // crossAxisSpacing: ScreenUtil().setWidth(30), | ||
| 384 | + // //子组件宽高长度比例 | ||
| 385 | + // // childAspectRatio: 1.0 | ||
| 386 | + // ), | ||
| 387 | + // itemBuilder: (BuildContext context, int index) { | ||
| 388 | + //Widget Function(BuildContext context, int index) | ||
| 389 | + var linjie = widget.maxImageNumber; | ||
| 390 | + if (isLinjie) { | ||
| 391 | + linjie = widget.maxImageNumber - 1; | ||
| 392 | + } | ||
| 393 | + if (0 == count - 1 && 0 < linjie) { | ||
| 394 | + return InkWell( | ||
| 395 | + onTap: () { | ||
| 396 | + // 触摸收起键盘 | ||
| 397 | + FocusScope.of(context).requestFocus(FocusNode()); | ||
| 398 | + _openModalBottomSheet(context); | ||
| 399 | + }, | ||
| 400 | + child: Container( | ||
| 401 | + width: ScreenUtil().setWidth(90 * 2), | ||
| 402 | + height: ScreenUtil().setWidth(90 * 2), | ||
| 403 | + decoration: BoxDecoration( | ||
| 404 | + border: Border.all( | ||
| 405 | + color: MyColours.color_E0E0E0, | ||
| 406 | + width: ScreenUtil().setWidth(2)), | ||
| 407 | + ), | ||
| 408 | + child: Column( | ||
| 409 | + children: [ | ||
| 410 | + VEmptyView(74), | ||
| 411 | + Image.asset( | ||
| 412 | + Utils.getImgPath('add_image'), | ||
| 413 | + width: ScreenUtil().setWidth(32), | ||
| 414 | + height: ScreenUtil().setWidth(32), | ||
| 415 | + ), | ||
| 416 | + VEmptyView(10), | ||
| 417 | + Text( | ||
| 418 | + '添加视频', | ||
| 419 | + style: TextStyle( | ||
| 420 | + fontSize: ScreenUtil().setSp(24), | ||
| 421 | + color: MyColours.color_999999), | ||
| 422 | + ) | ||
| 423 | + ], | ||
| 424 | + )), | ||
| 425 | + ); | ||
| 426 | + } | ||
| 427 | + return _uploadImageProvider.imageList.length < 1 | ||
| 428 | + ? Text('') | ||
| 429 | + : InkWell( | ||
| 430 | + onTap: () { | ||
| 431 | + if (_uploadImageProvider.imageList[0].process == 1) { | ||
| 432 | + _uploadImageProvider.imageQiniuUrlList = []; | ||
| 433 | + if (_uploadImageProvider.imageList[0].qiniuUrl != null) { | ||
| 434 | + for (int i = 0; | ||
| 435 | + i < _uploadImageProvider.imageList.length; | ||
| 436 | + i++) { | ||
| 437 | + _uploadImageProvider.imageQiniuUrlList | ||
| 438 | + .add(_uploadImageProvider.imageList[i].qiniuUrl); | ||
| 439 | + } | ||
| 440 | + | ||
| 441 | + ///没有上传完成的不可以点击 | ||
| 442 | + // _showPhotoView( | ||
| 443 | + // context, 0, _uploadImageProvider.imageQiniuUrlList); | ||
| 444 | + NavigatorUtil.goPlayVideoPage(context, | ||
| 445 | + urlStr: _uploadImageProvider.imageQiniuUrlList[0]); | ||
| 446 | + } | ||
| 447 | + } | ||
| 448 | + }, | ||
| 449 | + child: Stack( | ||
| 450 | + children: [ | ||
| 451 | + Stack( | ||
| 452 | + alignment: Alignment.topRight, | ||
| 453 | + children: [ | ||
| 454 | + // Image.file( | ||
| 455 | + // // _uploadImageProvider.imageList[index].file, | ||
| 456 | + // File(thumbnailPath), | ||
| 457 | + // fit: BoxFit.cover, | ||
| 458 | + // width: ScreenUtil().setWidth(100 * 2), | ||
| 459 | + // height: ScreenUtil().setWidth(100 * 2), | ||
| 460 | + // ), | ||
| 461 | + FutureBuilder( | ||
| 462 | + //显示缩略图 | ||
| 463 | + future: _initializeVideoPlayerFuture, | ||
| 464 | + builder: (context, snapshot) { | ||
| 465 | + print(snapshot.connectionState); | ||
| 466 | + if (snapshot.hasError) print(snapshot.error); | ||
| 467 | + if (snapshot.connectionState == ConnectionState.done) { | ||
| 468 | + return Container( | ||
| 469 | + width: ScreenUtil().setWidth(225), | ||
| 470 | + child: AspectRatio( | ||
| 471 | + // aspectRatio: 1 / 1, | ||
| 472 | + aspectRatio: _controller.value.aspectRatio, | ||
| 473 | + child: VideoPlayer(_controller), | ||
| 474 | + ), | ||
| 475 | + ); | ||
| 476 | + } else { | ||
| 477 | + return Center( | ||
| 478 | + child: CircularProgressIndicator(), | ||
| 479 | + ); | ||
| 480 | + } | ||
| 481 | + }, | ||
| 482 | + ), | ||
| 483 | + | ||
| 484 | + Offstage( | ||
| 485 | + offstage: _uploadImageProvider.imageList[0].process < 1, | ||
| 486 | + child: GestureDetector( | ||
| 487 | + child: Image.asset( | ||
| 488 | + Utils.getImgPath("delete"), | ||
| 489 | + width: ScreenUtil().setWidth(40), | ||
| 490 | + height: ScreenUtil().setWidth(40), | ||
| 491 | + ), | ||
| 492 | + onTap: () { | ||
| 493 | + //点击删除按钮 | ||
| 494 | + setState(() { | ||
| 495 | + _uploadImageProvider.imageList.removeWhere( | ||
| 496 | + (element) => | ||
| 497 | + element == | ||
| 498 | + _uploadImageProvider.imageList[0]); | ||
| 499 | + _uploadImageProvider.imageQiniuUrlList.removeWhere( | ||
| 500 | + (element) => | ||
| 501 | + element == | ||
| 502 | + _uploadImageProvider.imageQiniuUrlList[0]); | ||
| 503 | + }); | ||
| 504 | + }, | ||
| 505 | + ), | ||
| 506 | + ), | ||
| 507 | + ], | ||
| 508 | + ), | ||
| 509 | + Offstage( | ||
| 510 | + offstage: _uploadImageProvider.imageList[0].process == 1, | ||
| 511 | + child: Progress(_uploadImageProvider.imageList[0].process), | ||
| 512 | + ) | ||
| 513 | + ], | ||
| 514 | + )); | ||
| 515 | + // }); | ||
| 516 | + } | ||
| 517 | +} |
| @@ -59,8 +59,10 @@ class _BindingPhoneState extends State<BindingPhone> { | @@ -59,8 +59,10 @@ class _BindingPhoneState extends State<BindingPhone> { | ||
| 59 | @override | 59 | @override |
| 60 | Widget build(BuildContext context) { | 60 | Widget build(BuildContext context) { |
| 61 | return Scaffold( | 61 | return Scaffold( |
| 62 | + backgroundColor: Colors.white, | ||
| 62 | appBar: SystemAppBar( | 63 | appBar: SystemAppBar( |
| 63 | - '绑定手机号', | 64 | + '', |
| 65 | + leftTitle: '上一步', | ||
| 64 | onTap: () { | 66 | onTap: () { |
| 65 | Navigator.pop(context); | 67 | Navigator.pop(context); |
| 66 | }, | 68 | }, |
| @@ -70,132 +72,171 @@ class _BindingPhoneState extends State<BindingPhone> { | @@ -70,132 +72,171 @@ class _BindingPhoneState extends State<BindingPhone> { | ||
| 70 | FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘 | 72 | FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘 |
| 71 | }, | 73 | }, |
| 72 | child: Container( | 74 | child: Container( |
| 73 | - padding: EdgeInsets.all(ScreenUtil().setWidth(40)), | 75 | + padding: EdgeInsets.symmetric( |
| 76 | + horizontal: ScreenUtil().setWidth(35 * 2), | ||
| 77 | + vertical: ScreenUtil().setWidth(30 * 2)), | ||
| 74 | child: Column( | 78 | child: Column( |
| 75 | children: [ | 79 | children: [ |
| 76 | Expanded( | 80 | Expanded( |
| 77 | child: SingleChildScrollView( | 81 | child: SingleChildScrollView( |
| 78 | controller: _controller, | 82 | controller: _controller, |
| 79 | child: Column( | 83 | child: Column( |
| 84 | + crossAxisAlignment: CrossAxisAlignment.start, | ||
| 80 | children: [ | 85 | children: [ |
| 81 | - TextField( | ||
| 82 | - // textAlignVertical: TextAlignVertical.bottom, | ||
| 83 | - maxLines: 1, | ||
| 84 | - // //光标颜色 | ||
| 85 | - // cursorColor: | ||
| 86 | - // widget.isSelect ? Colors.white : MyColours.color_199095, | ||
| 87 | - //输入文本的样式 | ||
| 88 | - style: TextStyle( | ||
| 89 | - fontSize: ScreenUtil().setSp(28), | ||
| 90 | - ), | ||
| 91 | - focusNode: _phoneNode, | ||
| 92 | - decoration: InputDecoration( | ||
| 93 | - contentPadding: EdgeInsets.symmetric( | ||
| 94 | - vertical: ScreenUtil().setWidth(6), | ||
| 95 | - horizontal: ScreenUtil().setWidth(20)), | ||
| 96 | - border: OutlineInputBorder(), | ||
| 97 | - hintText: '请输入手机号码', | ||
| 98 | - hintStyle: TextStyle( | ||
| 99 | - color: MyColours.color_999999, | ||
| 100 | - fontSize: ScreenUtil().setSp(28), | ||
| 101 | - ), | ||
| 102 | - // enabledBorder: new UnderlineInputBorder( | ||
| 103 | - // borderSide: BorderSide.none, | ||
| 104 | - // ), | ||
| 105 | - focusedBorder: OutlineInputBorder( | ||
| 106 | - borderSide: BorderSide( | ||
| 107 | - color: MyColours.color_199095)), | ||
| 108 | - ), | ||
| 109 | - onChanged: (value) {}, | ||
| 110 | - onEditingComplete: () { | ||
| 111 | - FocusScope.of(context) | ||
| 112 | - .requestFocus(FocusNode()); //点击空白处隐藏键盘 | ||
| 113 | - }, | ||
| 114 | - keyboardType: TextInputType.number, | ||
| 115 | - ), | ||
| 116 | - VEmptyView(30), | 86 | + Text('绑定您的手机号', |
| 87 | + style: TextStyle( | ||
| 88 | + fontWeight: FontWeight.bold, | ||
| 89 | + color: MyColours.color_333333, | ||
| 90 | + fontSize: ScreenUtil().setSp(40))), | ||
| 91 | + VEmptyView(100), | ||
| 92 | + Container( | ||
| 93 | + height: ScreenUtil().setHeight(52 * 2), | ||
| 94 | + // width: ScreenUtil().setWidth(611), | ||
| 95 | + padding: EdgeInsets.only( | ||
| 96 | + left: ScreenUtil().setWidth(20)), | ||
| 97 | + margin: EdgeInsets.only( | ||
| 98 | + top: ScreenUtil().setHeight(8)), | ||
| 99 | + alignment: Alignment.center, | ||
| 100 | + decoration: BoxDecoration( | ||
| 101 | + border: Border.all( | ||
| 102 | + color: MyColours.color_bff6f7, | ||
| 103 | + width: ScreenUtil().setWidth(2)), | ||
| 104 | + borderRadius: BorderRadius.circular( | ||
| 105 | + ScreenUtil().setWidth(10))), | ||
| 106 | + child: Row( | ||
| 107 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
| 108 | + children: <Widget>[ | ||
| 109 | + HEmptyView(30), | ||
| 110 | + Text( | ||
| 111 | + "手机号", | ||
| 112 | + style: TextStyle( | ||
| 113 | + color: MyColours.color_333333, | ||
| 114 | + fontSize: ScreenUtil().setSp(26)), | ||
| 115 | + ), | ||
| 116 | + HEmptyView(30), | ||
| 117 | + Expanded( | ||
| 118 | + child: TextField( | ||
| 119 | + focusNode: _phoneNode, | ||
| 120 | + style: TextStyle( | ||
| 121 | + color: MyColours.color_353535, | ||
| 122 | + fontSize: ScreenUtil().setSp(28)), | ||
| 123 | + decoration: InputDecoration( | ||
| 124 | + hintText: "请输入手机号", | ||
| 125 | + hintStyle: TextStyle( | ||
| 126 | + color: MyColours.color_999999, | ||
| 127 | + fontSize: ScreenUtil().setSp(26)), | ||
| 128 | + border: InputBorder.none, | ||
| 129 | + contentPadding: EdgeInsets.fromLTRB( | ||
| 130 | + 0, | ||
| 131 | + ScreenUtil().setWidth(28), | ||
| 132 | + ScreenUtil().setWidth(30), | ||
| 133 | + ScreenUtil().setWidth(28)), | ||
| 134 | + ), | ||
| 135 | + onChanged: (_) {}, | ||
| 136 | + onEditingComplete: () { | ||
| 137 | + FocusScope.of(context).requestFocus( | ||
| 138 | + FocusNode()); //点击空白处隐藏键盘 | ||
| 139 | + }, | ||
| 140 | + keyboardType: TextInputType.number, | ||
| 141 | + ), | ||
| 142 | + ) | ||
| 143 | + ], | ||
| 144 | + )), | ||
| 145 | + VEmptyView(10), | ||
| 117 | Container( | 146 | Container( |
| 118 | - // height: ScreenUtil().setWidth(20), | 147 | + height: ScreenUtil().setHeight(52 * 2), |
| 148 | + // width: ScreenUtil().setWidth(611), | ||
| 149 | + padding: EdgeInsets.only( | ||
| 150 | + left: ScreenUtil().setWidth(20)), | ||
| 151 | + margin: EdgeInsets.only( | ||
| 152 | + top: ScreenUtil().setHeight(8)), | ||
| 153 | + alignment: Alignment.center, | ||
| 154 | + decoration: BoxDecoration( | ||
| 155 | + border: Border.all( | ||
| 156 | + color: MyColours.color_bff6f7, | ||
| 157 | + width: ScreenUtil().setWidth(2)), | ||
| 158 | + borderRadius: BorderRadius.circular( | ||
| 159 | + ScreenUtil().setWidth(10))), | ||
| 119 | child: Row( | 160 | child: Row( |
| 120 | - children: [ | ||
| 121 | - Expanded( | ||
| 122 | - child: TextField( | ||
| 123 | - // textAlignVertical: TextAlignVertical.bottom, | ||
| 124 | - maxLines: 1, | ||
| 125 | - // //光标颜色 | ||
| 126 | - // cursorColor: | ||
| 127 | - // widget.isSelect ? Colors.white : MyColours.color_199095, | ||
| 128 | - //输入文本的样式 | ||
| 129 | - style: TextStyle( | ||
| 130 | - fontSize: ScreenUtil().setSp(28), | 161 | + crossAxisAlignment: CrossAxisAlignment.center, |
| 162 | + children: <Widget>[ | ||
| 163 | + HEmptyView(30), | ||
| 164 | + Text( | ||
| 165 | + "验证码", | ||
| 166 | + style: TextStyle( | ||
| 167 | + color: MyColours.color_333333, | ||
| 168 | + fontSize: ScreenUtil().setSp(26)), | ||
| 131 | ), | 169 | ), |
| 132 | - focusNode: _codeNode, | ||
| 133 | - decoration: InputDecoration( | ||
| 134 | - contentPadding: EdgeInsets.symmetric( | ||
| 135 | - vertical: ScreenUtil().setWidth(6), | ||
| 136 | - horizontal: ScreenUtil().setWidth(20)), | ||
| 137 | - border: OutlineInputBorder(), | ||
| 138 | - hintText: '请输入短信验证码', | ||
| 139 | - hintStyle: TextStyle( | ||
| 140 | - color: MyColours.color_999999, | ||
| 141 | - fontSize: ScreenUtil().setSp(28), | 170 | + HEmptyView(30), |
| 171 | + Expanded( | ||
| 172 | + child: TextField( | ||
| 173 | + focusNode: _codeNode, | ||
| 174 | + style: TextStyle( | ||
| 175 | + color: MyColours.color_353535, | ||
| 176 | + fontSize: ScreenUtil().setSp(28)), | ||
| 177 | + decoration: InputDecoration( | ||
| 178 | + hintText: "请输入验证码", | ||
| 179 | + hintStyle: TextStyle( | ||
| 180 | + color: MyColours.color_999999, | ||
| 181 | + fontSize: ScreenUtil().setSp(26)), | ||
| 182 | + border: InputBorder.none, | ||
| 183 | + contentPadding: EdgeInsets.fromLTRB( | ||
| 184 | + 0, | ||
| 185 | + ScreenUtil().setWidth(28), | ||
| 186 | + ScreenUtil().setWidth(30), | ||
| 187 | + ScreenUtil().setWidth(28)), | ||
| 188 | + ), | ||
| 189 | + onChanged: (_) {}, | ||
| 190 | + onEditingComplete: () { | ||
| 191 | + FocusScope.of(context).requestFocus( | ||
| 192 | + FocusNode()); //点击空白处隐藏键盘 | ||
| 193 | + }, | ||
| 194 | + keyboardType: TextInputType.number, | ||
| 142 | ), | 195 | ), |
| 143 | - // enabledBorder: new UnderlineInputBorder( | ||
| 144 | - // borderSide: BorderSide.none, | ||
| 145 | - // ), | ||
| 146 | - focusedBorder: OutlineInputBorder( | ||
| 147 | - borderSide: BorderSide( | ||
| 148 | - color: MyColours.color_199095)), | ||
| 149 | ), | 196 | ), |
| 150 | - onChanged: (value) {}, | ||
| 151 | - onEditingComplete: () { | ||
| 152 | - FocusScope.of(context) | ||
| 153 | - .requestFocus(FocusNode()); //点击空白处隐藏键盘 | ||
| 154 | - }, | ||
| 155 | - keyboardType: TextInputType.number, | ||
| 156 | - ), | ||
| 157 | - ), | ||
| 158 | - HEmptyView(20), | ||
| 159 | - RoundButton( | ||
| 160 | - height: ScreenUtil().setWidth(88), | ||
| 161 | - width: ScreenUtil().setWidth(240), | ||
| 162 | - text: countdownTime > 0 | ||
| 163 | - ? "${countdownTime}s后重新获取" | ||
| 164 | - : "获取验证码", | ||
| 165 | - radius: ScreenUtil().setWidth(10), | ||
| 166 | - textColor: MyColours.color_333333, | ||
| 167 | - gradientStart: MyColours.color_ffffff, | ||
| 168 | - gradientEnd: MyColours.color_ffffff, | ||
| 169 | - borderColor: MyColours.color_999999, | ||
| 170 | - fontSize: 28, | ||
| 171 | - isBold: false, | ||
| 172 | - onPressed: () { | ||
| 173 | - if (countdownTime == 0) { | ||
| 174 | - startCountdown(); | ||
| 175 | - } | ||
| 176 | - }, | ||
| 177 | - ) | ||
| 178 | - ], | ||
| 179 | - )), | 197 | + HEmptyView(10), |
| 198 | + RoundButton( | ||
| 199 | + height: ScreenUtil().setWidth(84), | ||
| 200 | + text: countdownTime > 0 | ||
| 201 | + ? "${countdownTime}s后重新获取" | ||
| 202 | + : "获取验证码", | ||
| 203 | + radius: ScreenUtil().setWidth(10), | ||
| 204 | + textColor: MyColours.color_199095, | ||
| 205 | + gradientStart: MyColours.color_ffffff, | ||
| 206 | + gradientEnd: MyColours.color_ffffff, | ||
| 207 | + borderColor: Colors.transparent, | ||
| 208 | + fontSize: 26, | ||
| 209 | + isBold: false, | ||
| 210 | + onPressed: () { | ||
| 211 | + if (countdownTime == 0) { | ||
| 212 | + startCountdown(); | ||
| 213 | + } | ||
| 214 | + }, | ||
| 215 | + ), | ||
| 216 | + HEmptyView(20), | ||
| 217 | + ], | ||
| 218 | + )), | ||
| 219 | + VEmptyView(120), | ||
| 220 | + RoundButton( | ||
| 221 | + text: '提交', | ||
| 222 | + gradientStart: MyColours.color_199095, | ||
| 223 | + gradientEnd: MyColours.color_199095, | ||
| 224 | + // borderColor: MyColours.color_999999, | ||
| 225 | + radius: ScreenUtil().setWidth(20), | ||
| 226 | + fontSize: 34, | ||
| 227 | + isBold: false, | ||
| 228 | + onPressed: () { | ||
| 229 | + //真正登录成功标志 | ||
| 230 | + App.sp.setBool("isLogin", true); | ||
| 231 | + NavigatorUtil.goIfNeedCreateStorePage(context); | ||
| 232 | + }, | ||
| 233 | + ) | ||
| 234 | + | ||
| 180 | // Spacer(), | 235 | // Spacer(), |
| 181 | ], | 236 | ], |
| 182 | ), | 237 | ), |
| 183 | ), | 238 | ), |
| 184 | ), | 239 | ), |
| 185 | - RoundButton( | ||
| 186 | - text: '提交', | ||
| 187 | - gradientStart: MyColours.color_199095, | ||
| 188 | - gradientEnd: MyColours.color_199095, | ||
| 189 | - // borderColor: MyColours.color_999999, | ||
| 190 | - radius: ScreenUtil().setWidth(20), | ||
| 191 | - fontSize: 28, | ||
| 192 | - isBold: false, | ||
| 193 | - onPressed: () { | ||
| 194 | - //真正登录成功标志 | ||
| 195 | - App.sp.setBool("isLogin", true); | ||
| 196 | - NavigatorUtil.goIfNeedCreateStorePage(context); | ||
| 197 | - }, | ||
| 198 | - ) | ||
| 199 | ], | 240 | ], |
| 200 | ))), | 241 | ))), |
| 201 | ); | 242 | ); |
| @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; | @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; | ||
| 2 | import 'package:flutter_screenutil/screenutil.dart'; | 2 | import 'package:flutter_screenutil/screenutil.dart'; |
| 3 | import 'package:one_key/res/colors.dart'; | 3 | import 'package:one_key/res/colors.dart'; |
| 4 | import 'package:one_key/utils/navigator_util.dart'; | 4 | import 'package:one_key/utils/navigator_util.dart'; |
| 5 | +import 'package:one_key/utils/utils.dart'; | ||
| 5 | import 'package:one_key/widgets/round_button.dart'; | 6 | import 'package:one_key/widgets/round_button.dart'; |
| 6 | import 'package:one_key/widgets/system_app_bar.dart'; | 7 | import 'package:one_key/widgets/system_app_bar.dart'; |
| 7 | import 'package:one_key/widgets/v_empty_view.dart'; | 8 | import 'package:one_key/widgets/v_empty_view.dart'; |
| @@ -15,12 +16,14 @@ class IfNeedCreateStore extends StatefulWidget { | @@ -15,12 +16,14 @@ class IfNeedCreateStore extends StatefulWidget { | ||
| 15 | 16 | ||
| 16 | class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { | 17 | class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { |
| 17 | ScrollController _controller = ScrollController(); | 18 | ScrollController _controller = ScrollController(); |
| 18 | - bool noStore = true; | 19 | + bool noStore = false; |
| 19 | @override | 20 | @override |
| 20 | Widget build(BuildContext context) { | 21 | Widget build(BuildContext context) { |
| 21 | return Scaffold( | 22 | return Scaffold( |
| 23 | + backgroundColor: Colors.white, | ||
| 22 | appBar: SystemAppBar( | 24 | appBar: SystemAppBar( |
| 23 | - 'xxx', | 25 | + '', |
| 26 | + leftTitle: '上一步', | ||
| 24 | onTap: () { | 27 | onTap: () { |
| 25 | Navigator.pop(context); | 28 | Navigator.pop(context); |
| 26 | }, | 29 | }, |
| @@ -28,17 +31,26 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { | @@ -28,17 +31,26 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { | ||
| 28 | body: Container( | 31 | body: Container( |
| 29 | width: double.infinity, | 32 | width: double.infinity, |
| 30 | padding: EdgeInsets.all(ScreenUtil().setWidth(40)), | 33 | padding: EdgeInsets.all(ScreenUtil().setWidth(40)), |
| 31 | - child: Column( | ||
| 32 | - crossAxisAlignment: CrossAxisAlignment.center, | ||
| 33 | - mainAxisAlignment: MainAxisAlignment.center, | 34 | + child: Column(crossAxisAlignment: CrossAxisAlignment.center, |
| 35 | + // mainAxisAlignment: MainAxisAlignment.center, | ||
| 34 | children: [ | 36 | children: [ |
| 37 | + VEmptyView(80), | ||
| 38 | + Image.asset( | ||
| 39 | + noStore | ||
| 40 | + ? Utils.getImgPath('not_member') | ||
| 41 | + : Utils.getImgPath('is_member'), | ||
| 42 | + width: ScreenUtil().setWidth(120), | ||
| 43 | + height: ScreenUtil().setWidth(120), | ||
| 44 | + ), | ||
| 45 | + VEmptyView(60), | ||
| 35 | Text( | 46 | Text( |
| 36 | noStore ? '您还没有绑定任何店铺' : '您已经是“xxxxx”的员工', | 47 | noStore ? '您还没有绑定任何店铺' : '您已经是“xxxxx”的员工', |
| 37 | style: TextStyle( | 48 | style: TextStyle( |
| 38 | - fontSize: ScreenUtil().setSp(30), | 49 | + fontSize: ScreenUtil().setSp(32), |
| 50 | + color: MyColours.color_333333, | ||
| 39 | fontWeight: FontWeight.bold), | 51 | fontWeight: FontWeight.bold), |
| 40 | ), | 52 | ), |
| 41 | - VEmptyView(30), | 53 | + VEmptyView(172), |
| 42 | InkWell( | 54 | InkWell( |
| 43 | onTap: () { | 55 | onTap: () { |
| 44 | if (noStore) { | 56 | if (noStore) { |
| @@ -50,31 +62,32 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { | @@ -50,31 +62,32 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { | ||
| 50 | } | 62 | } |
| 51 | }, | 63 | }, |
| 52 | child: Container( | 64 | child: Container( |
| 65 | + width: double.infinity, | ||
| 53 | padding: EdgeInsets.symmetric( | 66 | padding: EdgeInsets.symmetric( |
| 54 | - horizontal: ScreenUtil().setWidth(30), | ||
| 55 | - vertical: ScreenUtil().setWidth(16)), | 67 | + horizontal: ScreenUtil().setWidth(40), |
| 68 | + vertical: ScreenUtil().setWidth(18)), | ||
| 56 | decoration: BoxDecoration( | 69 | decoration: BoxDecoration( |
| 57 | - color: MyColours.color_199095, | 70 | + color: MyColours.color_24A4A8, |
| 58 | borderRadius: BorderRadius.circular( | 71 | borderRadius: BorderRadius.circular( |
| 59 | ScreenUtil().setWidth(10))), | 72 | ScreenUtil().setWidth(10))), |
| 60 | - constraints: BoxConstraints( | ||
| 61 | - minWidth: ScreenUtil().setWidth(260)), | ||
| 62 | child: Text( | 73 | child: Text( |
| 63 | - noStore ? '创建店铺' : '进入xxxxx', | 74 | + noStore ? '创建店铺' : '进入“xxxxxxx”', |
| 64 | textAlign: TextAlign.center, | 75 | textAlign: TextAlign.center, |
| 76 | + maxLines: 1, | ||
| 77 | + overflow: TextOverflow.ellipsis, | ||
| 65 | style: TextStyle( | 78 | style: TextStyle( |
| 66 | color: MyColours.color_ffffff, | 79 | color: MyColours.color_ffffff, |
| 67 | - fontSize: ScreenUtil().setSp(28)), | 80 | + fontSize: ScreenUtil().setSp(34)), |
| 68 | ), | 81 | ), |
| 69 | )), | 82 | )), |
| 70 | noStore | 83 | noStore |
| 71 | ? Container() | 84 | ? Container() |
| 72 | : Container( | 85 | : Container( |
| 73 | margin: | 86 | margin: |
| 74 | - EdgeInsets.only(top: ScreenUtil().setWidth(10)), | 87 | + EdgeInsets.only(top: ScreenUtil().setWidth(40)), |
| 75 | padding: EdgeInsets.symmetric( | 88 | padding: EdgeInsets.symmetric( |
| 76 | - horizontal: ScreenUtil().setWidth(30), | ||
| 77 | - vertical: ScreenUtil().setWidth(16)), | 89 | + horizontal: ScreenUtil().setWidth(30), |
| 90 | + ), | ||
| 78 | child: InkWell( | 91 | child: InkWell( |
| 79 | onTap: () { | 92 | onTap: () { |
| 80 | //跳转至新建店铺流程 | 93 | //跳转至新建店铺流程 |
| @@ -84,8 +97,8 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { | @@ -84,8 +97,8 @@ class _IfNeedCreateStoreState extends State<IfNeedCreateStore> { | ||
| 84 | '不是我,我要重新建店', | 97 | '不是我,我要重新建店', |
| 85 | textAlign: TextAlign.center, | 98 | textAlign: TextAlign.center, |
| 86 | style: TextStyle( | 99 | style: TextStyle( |
| 87 | - color: MyColours.color_333333, | ||
| 88 | - fontSize: ScreenUtil().setSp(24)), | 100 | + color: MyColours.color_199095, |
| 101 | + fontSize: ScreenUtil().setSp(30)), | ||
| 89 | ), | 102 | ), |
| 90 | )), | 103 | )), |
| 91 | ]))); | 104 | ]))); |
| @@ -14,6 +14,7 @@ import 'package:one_key/provider/user_model.dart'; | @@ -14,6 +14,7 @@ import 'package:one_key/provider/user_model.dart'; | ||
| 14 | import 'package:one_key/res/colors.dart'; | 14 | import 'package:one_key/res/colors.dart'; |
| 15 | import 'package:one_key/utils/navigator_util.dart'; | 15 | import 'package:one_key/utils/navigator_util.dart'; |
| 16 | import 'package:one_key/utils/utils.dart'; | 16 | import 'package:one_key/utils/utils.dart'; |
| 17 | +import 'package:one_key/widgets/MyDivider.dart'; | ||
| 17 | import 'package:one_key/widgets/h_empty_view.dart'; | 18 | import 'package:one_key/widgets/h_empty_view.dart'; |
| 18 | import 'package:one_key/widgets/round_button.dart'; | 19 | import 'package:one_key/widgets/round_button.dart'; |
| 19 | import 'package:one_key/widgets/v_empty_view.dart'; | 20 | import 'package:one_key/widgets/v_empty_view.dart'; |
| @@ -314,13 +315,14 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | @@ -314,13 +315,14 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | ||
| 314 | child: Column( | 315 | child: Column( |
| 315 | crossAxisAlignment: CrossAxisAlignment.center, | 316 | crossAxisAlignment: CrossAxisAlignment.center, |
| 316 | children: <Widget>[ | 317 | children: <Widget>[ |
| 317 | - VEmptyView(218 - App.statusBarHeight), | 318 | + // VEmptyView(218 - App.statusBarHeight), |
| 319 | + VEmptyView(80 + App.statusBarHeight), | ||
| 318 | Image.asset( | 320 | Image.asset( |
| 319 | "assets/logo.png", | 321 | "assets/logo.png", |
| 320 | - width: ScreenUtil().setWidth(217), | ||
| 321 | - height: ScreenUtil().setWidth(206), | 322 | + width: ScreenUtil().setWidth(74 * 2), |
| 323 | + height: ScreenUtil().setWidth(71 * 2), | ||
| 322 | ), | 324 | ), |
| 323 | - VEmptyView(121), | 325 | + VEmptyView(80), |
| 324 | Container( | 326 | Container( |
| 325 | height: ScreenUtil().setHeight(84), | 327 | height: ScreenUtil().setHeight(84), |
| 326 | width: ScreenUtil().setWidth(611), | 328 | width: ScreenUtil().setWidth(611), |
| @@ -503,11 +505,13 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | @@ -503,11 +505,13 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | ||
| 503 | alignment: Alignment.centerLeft, | 505 | alignment: Alignment.centerLeft, |
| 504 | child: Text( | 506 | child: Text( |
| 505 | errorText, | 507 | errorText, |
| 508 | + // 'hfhfhf', | ||
| 506 | style: TextStyle( | 509 | style: TextStyle( |
| 507 | color: MyColours.color_d93535, | 510 | color: MyColours.color_d93535, |
| 508 | fontSize: ScreenUtil().setSp(16)), | 511 | fontSize: ScreenUtil().setSp(16)), |
| 509 | ), | 512 | ), |
| 510 | ), | 513 | ), |
| 514 | + VEmptyView(40), | ||
| 511 | Consumer<UserModel>( | 515 | Consumer<UserModel>( |
| 512 | builder: | 516 | builder: |
| 513 | (BuildContext context, UserModel value, Widget child) { | 517 | (BuildContext context, UserModel value, Widget child) { |
| @@ -532,10 +536,8 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | @@ -532,10 +536,8 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | ||
| 532 | }); | 536 | }); |
| 533 | }, | 537 | }, |
| 534 | child: Container( | 538 | child: Container( |
| 535 | - height: ScreenUtil().setHeight(80), | 539 | + height: ScreenUtil().setWidth(84), |
| 536 | width: ScreenUtil().setWidth(611), | 540 | width: ScreenUtil().setWidth(611), |
| 537 | - margin: | ||
| 538 | - EdgeInsets.only(top: ScreenUtil().setHeight(56)), | ||
| 539 | alignment: Alignment.center, | 541 | alignment: Alignment.center, |
| 540 | decoration: BoxDecoration( | 542 | decoration: BoxDecoration( |
| 541 | color: isActivate | 543 | color: isActivate |
| @@ -559,43 +561,7 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | @@ -559,43 +561,7 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | ||
| 559 | ); | 561 | ); |
| 560 | }, | 562 | }, |
| 561 | ), | 563 | ), |
| 562 | - VEmptyView(140), | ||
| 563 | - Row( | ||
| 564 | - mainAxisAlignment: MainAxisAlignment.center, | ||
| 565 | - children: <Widget>[ | ||
| 566 | - Offstage( | ||
| 567 | - offstage: !App.isInstallWx, | ||
| 568 | - child: InkWell( | ||
| 569 | - child: Image.asset( | ||
| 570 | - Utils.getImgPath('icon_wechat_login'), | ||
| 571 | - width: ScreenUtil().setWidth(56)), | ||
| 572 | - onTap: () { | ||
| 573 | - if (!_check) { | ||
| 574 | - Utils.showToast('请仔细阅读协议'); | ||
| 575 | - return; | ||
| 576 | - } | ||
| 577 | - _wxLogin(); | ||
| 578 | - }, | ||
| 579 | - )), | ||
| 580 | - Platform.isAndroid | ||
| 581 | - ? Text('') | ||
| 582 | - : InkWell( | ||
| 583 | - child: Container( | ||
| 584 | - margin: EdgeInsets.only( | ||
| 585 | - left: Platform.isAndroid | ||
| 586 | - ? ScreenUtil().setWidth(0) | ||
| 587 | - : ScreenUtil().setWidth(50)), | ||
| 588 | - child: Image.asset(Utils.getImgPath('apple'), | ||
| 589 | - width: ScreenUtil().setWidth(46))), | ||
| 590 | - onTap: () { | ||
| 591 | - if (!_check) { | ||
| 592 | - Utils.showToast('请仔细阅读协议'); | ||
| 593 | - return; | ||
| 594 | - } | ||
| 595 | - _iosLogin(); | ||
| 596 | - }), | ||
| 597 | - ], | ||
| 598 | - ), | 564 | + |
| 599 | VEmptyView(20), | 565 | VEmptyView(20), |
| 600 | Row( | 566 | Row( |
| 601 | // mainAxisSize: MainAxisSize.min, | 567 | // mainAxisSize: MainAxisSize.min, |
| @@ -655,6 +621,63 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | @@ -655,6 +621,63 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver { | ||
| 655 | ) | 621 | ) |
| 656 | ], | 622 | ], |
| 657 | ), | 623 | ), |
| 624 | + VEmptyView(120), | ||
| 625 | + Row( | ||
| 626 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 627 | + children: [ | ||
| 628 | + MyDivider( | ||
| 629 | + ScreenUtil().setWidth(68 * 2), ScreenUtil().setWidth(2), | ||
| 630 | + color: MyColours.color_e5e5e5), | ||
| 631 | + HEmptyView(20), | ||
| 632 | + Text( | ||
| 633 | + '其他登录方式', | ||
| 634 | + style: TextStyle( | ||
| 635 | + fontSize: ScreenUtil().setWidth(24), | ||
| 636 | + color: MyColours.color_999999), | ||
| 637 | + ), | ||
| 638 | + HEmptyView(20), | ||
| 639 | + MyDivider( | ||
| 640 | + ScreenUtil().setWidth(68 * 2), ScreenUtil().setWidth(2), | ||
| 641 | + color: MyColours.color_e5e5e5), | ||
| 642 | + ], | ||
| 643 | + ), | ||
| 644 | + VEmptyView(80), | ||
| 645 | + Row( | ||
| 646 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 647 | + children: <Widget>[ | ||
| 648 | + Platform.isAndroid | ||
| 649 | + ? Text('') | ||
| 650 | + : InkWell( | ||
| 651 | + child: Image.asset(Utils.getImgPath('apple'), | ||
| 652 | + width: ScreenUtil().setWidth(100)), | ||
| 653 | + onTap: () { | ||
| 654 | + if (!_check) { | ||
| 655 | + Utils.showToast('请仔细阅读协议'); | ||
| 656 | + return; | ||
| 657 | + } | ||
| 658 | + _iosLogin(); | ||
| 659 | + }), | ||
| 660 | + Offstage( | ||
| 661 | + offstage: !App.isInstallWx, | ||
| 662 | + child: InkWell( | ||
| 663 | + child: Container( | ||
| 664 | + margin: EdgeInsets.only( | ||
| 665 | + left: Platform.isAndroid | ||
| 666 | + ? ScreenUtil().setWidth(0) | ||
| 667 | + : ScreenUtil().setWidth(140)), | ||
| 668 | + child: Image.asset( | ||
| 669 | + Utils.getImgPath('icon_wechat_login'), | ||
| 670 | + width: ScreenUtil().setWidth(100))), | ||
| 671 | + onTap: () { | ||
| 672 | + if (!_check) { | ||
| 673 | + Utils.showToast('请仔细阅读协议'); | ||
| 674 | + return; | ||
| 675 | + } | ||
| 676 | + _wxLogin(); | ||
| 677 | + }, | ||
| 678 | + )), | ||
| 679 | + ], | ||
| 680 | + ), | ||
| 658 | ], | 681 | ], |
| 659 | ), | 682 | ), |
| 660 | ), | 683 | ), |
| @@ -12,6 +12,7 @@ import 'package:one_key/pages/coupon/coupon_history_page.dart'; | @@ -12,6 +12,7 @@ import 'package:one_key/pages/coupon/coupon_history_page.dart'; | ||
| 12 | import 'package:one_key/pages/coupon/coupon_page.dart'; | 12 | import 'package:one_key/pages/coupon/coupon_page.dart'; |
| 13 | import 'package:one_key/pages/coupon/coupon_selecet_page.dart'; | 13 | import 'package:one_key/pages/coupon/coupon_selecet_page.dart'; |
| 14 | import 'package:one_key/pages/create_store/create_store.dart'; | 14 | import 'package:one_key/pages/create_store/create_store.dart'; |
| 15 | +import 'package:one_key/pages/create_store/play_video.dart'; | ||
| 15 | import 'package:one_key/pages/detail/notebook_detail_change_page.dart'; | 16 | import 'package:one_key/pages/detail/notebook_detail_change_page.dart'; |
| 16 | import 'package:one_key/pages/home/home_page.dart'; | 17 | import 'package:one_key/pages/home/home_page.dart'; |
| 17 | import 'package:one_key/pages/invicate/invitation_page.dart'; | 18 | import 'package:one_key/pages/invicate/invitation_page.dart'; |
| @@ -299,3 +300,12 @@ var createStorePageHandler = new Handler( | @@ -299,3 +300,12 @@ var createStorePageHandler = new Handler( | ||
| 299 | 300 | ||
| 300 | return CreateStorePage(); | 301 | return CreateStorePage(); |
| 301 | }); | 302 | }); |
| 303 | + | ||
| 304 | +///播放视频页 | ||
| 305 | +var playVideoPageHandler = new Handler( | ||
| 306 | + handlerFunc: (BuildContext context, Map<String, List<Object>> params) { | ||
| 307 | + // CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode( | ||
| 308 | + // FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first))); | ||
| 309 | + String urlStr = FluroConvertUtils.fluroCnParamsDecode(params["urlStr"].first); | ||
| 310 | + return PlayVideoPage(url: urlStr); | ||
| 311 | +}); |
| @@ -31,6 +31,8 @@ class Routes { | @@ -31,6 +31,8 @@ class Routes { | ||
| 31 | static String binding_phone = "/binding_phone"; //绑定手机号码页面 | 31 | static String binding_phone = "/binding_phone"; //绑定手机号码页面 |
| 32 | static String if_need_create_store = "/if_need_create_store"; //是否选择新建店铺页面 | 32 | static String if_need_create_store = "/if_need_create_store"; //是否选择新建店铺页面 |
| 33 | static String create_store = "/create_store"; //新建店铺 | 33 | static String create_store = "/create_store"; //新建店铺 |
| 34 | + static String play_video = "/play_video"; //播放视频页 | ||
| 35 | + | ||
| 34 | 36 | ||
| 35 | static void configureRoutes(FluroRouter router) { | 37 | static void configureRoutes(FluroRouter router) { |
| 36 | router.notFoundHandler = new Handler( | 38 | router.notFoundHandler = new Handler( |
| @@ -66,6 +68,7 @@ class Routes { | @@ -66,6 +68,7 @@ class Routes { | ||
| 66 | router.define(binding_phone, handler: bindingPhonePageHandler); | 68 | router.define(binding_phone, handler: bindingPhonePageHandler); |
| 67 | router.define(if_need_create_store, handler: ifNeedCreateStorePageHandler); | 69 | router.define(if_need_create_store, handler: ifNeedCreateStorePageHandler); |
| 68 | router.define(create_store, handler: createStorePageHandler); | 70 | router.define(create_store, handler: createStorePageHandler); |
| 71 | + router.define(play_video, handler: playVideoPageHandler); | ||
| 69 | 72 | ||
| 70 | 73 | ||
| 71 | 74 |
| @@ -8,6 +8,7 @@ import 'package:one_key/res/colors.dart'; | @@ -8,6 +8,7 @@ import 'package:one_key/res/colors.dart'; | ||
| 8 | import 'package:one_key/route/routes.dart'; | 8 | import 'package:one_key/route/routes.dart'; |
| 9 | import 'package:one_key/utils/fluro_convert_utils.dart'; | 9 | import 'package:one_key/utils/fluro_convert_utils.dart'; |
| 10 | import 'package:one_key/utils/utils.dart'; | 10 | import 'package:one_key/utils/utils.dart'; |
| 11 | +import 'package:sqflite/sqlite_api.dart'; | ||
| 11 | 12 | ||
| 12 | import '../app.dart'; | 13 | import '../app.dart'; |
| 13 | 14 | ||
| @@ -15,6 +16,7 @@ class NavigatorUtil { | @@ -15,6 +16,7 @@ class NavigatorUtil { | ||
| 15 | static Future _navigateTo(BuildContext context, String path, | 16 | static Future _navigateTo(BuildContext context, String path, |
| 16 | {bool replace = false, | 17 | {bool replace = false, |
| 17 | bool clearStack = false, | 18 | bool clearStack = false, |
| 19 | + TransitionType transitionType = TransitionType.material, | ||
| 18 | Duration transitionDuration = const Duration(milliseconds: 250), | 20 | Duration transitionDuration = const Duration(milliseconds: 250), |
| 19 | RouteTransitionsBuilder transitionBuilder}) { | 21 | RouteTransitionsBuilder transitionBuilder}) { |
| 20 | Utils.changeStatusColor(color: MyColours.color_ffffff); | 22 | Utils.changeStatusColor(color: MyColours.color_ffffff); |
| @@ -23,7 +25,7 @@ class NavigatorUtil { | @@ -23,7 +25,7 @@ class NavigatorUtil { | ||
| 23 | clearStack: clearStack, | 25 | clearStack: clearStack, |
| 24 | transitionDuration: transitionDuration, | 26 | transitionDuration: transitionDuration, |
| 25 | transitionBuilder: transitionBuilder, | 27 | transitionBuilder: transitionBuilder, |
| 26 | - transition: TransitionType.material); | 28 | + transition: transitionType); |
| 27 | } | 29 | } |
| 28 | 30 | ||
| 29 | /// 登录页 | 31 | /// 登录页 |
| @@ -211,4 +213,23 @@ class NavigatorUtil { | @@ -211,4 +213,23 @@ class NavigatorUtil { | ||
| 211 | {replace = false}) { | 213 | {replace = false}) { |
| 212 | return _navigateTo(context, "${Routes.create_store}", replace: replace); | 214 | return _navigateTo(context, "${Routes.create_store}", replace: replace); |
| 213 | } | 215 | } |
| 216 | + | ||
| 217 | + /// 播放视频页 | ||
| 218 | + static Future<dynamic> goPlayVideoPage(BuildContext context, | ||
| 219 | + {replace = false, String urlStr}) { | ||
| 220 | + return _navigateTo( | ||
| 221 | + context, | ||
| 222 | + "${Routes.play_video}?urlStr=${FluroConvertUtils.fluroCnParamsEncode(urlStr)}", | ||
| 223 | + replace: replace, | ||
| 224 | + transitionBuilder: (BuildContext context, Animation<double> animation, | ||
| 225 | + Animation<double> secondaryAnimation, Widget child) { | ||
| 226 | + return FadeTransition( | ||
| 227 | + opacity: CurvedAnimation( | ||
| 228 | + parent: animation, | ||
| 229 | + curve: Curves.linear, | ||
| 230 | + ), | ||
| 231 | + child: child); | ||
| 232 | + }, | ||
| 233 | + ); | ||
| 234 | + } | ||
| 214 | } | 235 | } |
| @@ -10,19 +10,23 @@ class SystemAppBar extends StatelessWidget implements PreferredSizeWidget { | @@ -10,19 +10,23 @@ class SystemAppBar extends StatelessWidget implements PreferredSizeWidget { | ||
| 10 | final GestureTapCallback onTap; | 10 | final GestureTapCallback onTap; |
| 11 | final bool showLeading; | 11 | final bool showLeading; |
| 12 | final GestureTapCallback onTapRight; | 12 | final GestureTapCallback onTapRight; |
| 13 | + final String leftTitle; | ||
| 13 | 14 | ||
| 14 | const SystemAppBar(this.title, | 15 | const SystemAppBar(this.title, |
| 15 | {Key key, | 16 | {Key key, |
| 16 | this.rightImgName, | 17 | this.rightImgName, |
| 17 | this.onTap, | 18 | this.onTap, |
| 18 | this.onTapRight, | 19 | this.onTapRight, |
| 19 | - this.showLeading = true}) | 20 | + this.showLeading = true, |
| 21 | + this.leftTitle = ''}) | ||
| 20 | : super(key: key); | 22 | : super(key: key); |
| 21 | 23 | ||
| 22 | @override | 24 | @override |
| 23 | Widget build(BuildContext context) { | 25 | Widget build(BuildContext context) { |
| 24 | return AppBar( | 26 | return AppBar( |
| 25 | elevation: 0, | 27 | elevation: 0, |
| 28 | + leadingWidth: | ||
| 29 | + leftTitle != '' ? ScreenUtil().setWidth(84 * 2 + 40 + 10) : 56, | ||
| 26 | leading: showLeading | 30 | leading: showLeading |
| 27 | ? InkWell( | 31 | ? InkWell( |
| 28 | onTap: onTap, | 32 | onTap: onTap, |
| @@ -36,7 +40,17 @@ class SystemAppBar extends StatelessWidget implements PreferredSizeWidget { | @@ -36,7 +40,17 @@ class SystemAppBar extends StatelessWidget implements PreferredSizeWidget { | ||
| 36 | "assets/icon_back.png", | 40 | "assets/icon_back.png", |
| 37 | width: ScreenUtil().setWidth(20), | 41 | width: ScreenUtil().setWidth(20), |
| 38 | height: ScreenUtil().setWidth(31), | 42 | height: ScreenUtil().setWidth(31), |
| 39 | - ) | 43 | + ), |
| 44 | + leftTitle != '' | ||
| 45 | + ? Padding( | ||
| 46 | + padding: EdgeInsets.only( | ||
| 47 | + left: ScreenUtil().setWidth(20)), | ||
| 48 | + child: Text(leftTitle, | ||
| 49 | + style: TextStyle( | ||
| 50 | + fontSize: ScreenUtil().setWidth(30), | ||
| 51 | + color: MyColours.color_333333)), | ||
| 52 | + ) | ||
| 53 | + : Container() | ||
| 40 | ], | 54 | ], |
| 41 | )), | 55 | )), |
| 42 | ) | 56 | ) |
| @@ -127,6 +127,13 @@ packages: | @@ -127,6 +127,13 @@ packages: | ||
| 127 | url: "https://pub.flutter-io.cn" | 127 | url: "https://pub.flutter-io.cn" |
| 128 | source: hosted | 128 | source: hosted |
| 129 | version: "1.0.4" | 129 | version: "1.0.4" |
| 130 | + chewie: | ||
| 131 | + dependency: "direct main" | ||
| 132 | + description: | ||
| 133 | + name: chewie | ||
| 134 | + url: "https://pub.flutter-io.cn" | ||
| 135 | + source: hosted | ||
| 136 | + version: "0.10.1" | ||
| 130 | clock: | 137 | clock: |
| 131 | dependency: transitive | 138 | dependency: transitive |
| 132 | description: | 139 | description: |
| @@ -335,6 +342,13 @@ packages: | @@ -335,6 +342,13 @@ packages: | ||
| 335 | url: "https://pub.flutter-io.cn" | 342 | url: "https://pub.flutter-io.cn" |
| 336 | source: hosted | 343 | source: hosted |
| 337 | version: "2.1.8" | 344 | version: "2.1.8" |
| 345 | + flutter_ijkplayer: | ||
| 346 | + dependency: "direct main" | ||
| 347 | + description: | ||
| 348 | + name: flutter_ijkplayer | ||
| 349 | + url: "https://pub.flutter-io.cn" | ||
| 350 | + source: hosted | ||
| 351 | + version: "0.3.5+1" | ||
| 338 | flutter_picker: | 352 | flutter_picker: |
| 339 | dependency: "direct main" | 353 | dependency: "direct main" |
| 340 | description: | 354 | description: |
| @@ -576,6 +590,13 @@ packages: | @@ -576,6 +590,13 @@ packages: | ||
| 576 | url: "https://pub.flutter-io.cn" | 590 | url: "https://pub.flutter-io.cn" |
| 577 | source: hosted | 591 | source: hosted |
| 578 | version: "0.3.0" | 592 | version: "0.3.0" |
| 593 | + open_iconic_flutter: | ||
| 594 | + dependency: transitive | ||
| 595 | + description: | ||
| 596 | + name: open_iconic_flutter | ||
| 597 | + url: "https://pub.flutter-io.cn" | ||
| 598 | + source: hosted | ||
| 599 | + version: "0.3.0" | ||
| 579 | package_config: | 600 | package_config: |
| 580 | dependency: transitive | 601 | dependency: transitive |
| 581 | description: | 602 | description: |
| @@ -1017,6 +1038,34 @@ packages: | @@ -1017,6 +1038,34 @@ packages: | ||
| 1017 | url: "https://pub.flutter-io.cn" | 1038 | url: "https://pub.flutter-io.cn" |
| 1018 | source: hosted | 1039 | source: hosted |
| 1019 | version: "2.1.0-nullsafety.3" | 1040 | version: "2.1.0-nullsafety.3" |
| 1041 | + video_player: | ||
| 1042 | + dependency: "direct main" | ||
| 1043 | + description: | ||
| 1044 | + name: video_player | ||
| 1045 | + url: "https://pub.flutter-io.cn" | ||
| 1046 | + source: hosted | ||
| 1047 | + version: "1.0.1" | ||
| 1048 | + video_player_platform_interface: | ||
| 1049 | + dependency: transitive | ||
| 1050 | + description: | ||
| 1051 | + name: video_player_platform_interface | ||
| 1052 | + url: "https://pub.flutter-io.cn" | ||
| 1053 | + source: hosted | ||
| 1054 | + version: "2.2.0" | ||
| 1055 | + video_player_web: | ||
| 1056 | + dependency: transitive | ||
| 1057 | + description: | ||
| 1058 | + name: video_player_web | ||
| 1059 | + url: "https://pub.flutter-io.cn" | ||
| 1060 | + source: hosted | ||
| 1061 | + version: "0.1.4+1" | ||
| 1062 | + wakelock: | ||
| 1063 | + dependency: transitive | ||
| 1064 | + description: | ||
| 1065 | + name: wakelock | ||
| 1066 | + url: "https://pub.flutter-io.cn" | ||
| 1067 | + source: hosted | ||
| 1068 | + version: "0.1.4+2" | ||
| 1020 | watcher: | 1069 | watcher: |
| 1021 | dependency: transitive | 1070 | dependency: transitive |
| 1022 | description: | 1071 | description: |
| @@ -100,6 +100,11 @@ dependencies: | @@ -100,6 +100,11 @@ dependencies: | ||
| 100 | photo: ^0.4.8 | 100 | photo: ^0.4.8 |
| 101 | #苹果登陆 | 101 | #苹果登陆 |
| 102 | sign_in_with_apple: ^2.5.1 | 102 | sign_in_with_apple: ^2.5.1 |
| 103 | + # video_thumbnail: ^0.2.5 | ||
| 104 | + video_player: ^1.0.1 | ||
| 105 | + chewie: | ||
| 106 | + # 视频播放 | ||
| 107 | + flutter_ijkplayer: 0.3.5+1 | ||
| 103 | 108 | ||
| 104 | 109 | ||
| 105 | 110 |
-
Please register or login to post a comment