Commit 3539d36125c733a9d9af9222d8cecca5d3fffff0

Authored by wdn127929
1 parent f21a014d

UI修改

1.35 KB | W: | H:

5.02 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

5.76 KB | W: | H:

6.2 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
@@ -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: '下一步',
  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 +}
  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