Showing
7 changed files
with
67 additions
and
20 deletions
| ... | @@ -33,7 +33,7 @@ import 'util/theme_utils.dart'; | ... | @@ -33,7 +33,7 @@ import 'util/theme_utils.dart'; |
| 33 | /// json to model | 33 | /// json to model |
| 34 | /// 安装 | 34 | /// 安装 |
| 35 | /// dependencies: | 35 | /// dependencies: |
| 36 | -/// json_annotation: ^4.4.0 | 36 | +/// json_annotation: ^4.4.0x |
| 37 | /// dev_dependencies: | 37 | /// dev_dependencies: |
| 38 | /// json_serializable: ^6.1.3 | 38 | /// json_serializable: ^6.1.3 |
| 39 | /// build_runner: ^2.1.7 | 39 | /// build_runner: ^2.1.7 | ... | ... |
| ... | @@ -3,6 +3,7 @@ class HttpApi { | ... | @@ -3,6 +3,7 @@ class HttpApi { |
| 3 | static const String register = 'register'; | 3 | static const String register = 'register'; |
| 4 | static const String verify = 'verify'; | 4 | static const String verify = 'verify'; |
| 5 | static const String login = 'login'; | 5 | static const String login = 'login'; |
| 6 | + static const String uploadVideo = 'upload/video'; | ||
| 6 | static const String user = 'user'; | 7 | static const String user = 'user'; |
| 7 | static const String search = 'search/repositories'; | 8 | static const String search = 'search/repositories'; |
| 8 | static const String subscriptions = 'users/simplezhli/subscriptions'; | 9 | static const String subscriptions = 'users/simplezhli/subscriptions'; | ... | ... |
| 1 | +import 'package:Parlando/net/dio_utils.dart'; | ||
| 2 | +import 'package:Parlando/net/http_api.dart'; | ||
| 3 | +import 'package:dio/dio.dart'; | ||
| 1 | import 'package:flutter/cupertino.dart'; | 4 | import 'package:flutter/cupertino.dart'; |
| 2 | import 'package:flutter/material.dart'; | 5 | import 'package:flutter/material.dart'; |
| 3 | import 'package:flutter_2d_amap/flutter_2d_amap.dart'; | 6 | import 'package:flutter_2d_amap/flutter_2d_amap.dart'; |
| ... | @@ -6,10 +9,10 @@ import 'package:Parlando/poem/widgets/lang_sort_bottom_sheet.dart'; | ... | @@ -6,10 +9,10 @@ import 'package:Parlando/poem/widgets/lang_sort_bottom_sheet.dart'; |
| 6 | import 'package:Parlando/res/resources.dart'; | 9 | import 'package:Parlando/res/resources.dart'; |
| 7 | import 'package:Parlando/routers/fluro_navigator.dart'; | 10 | import 'package:Parlando/routers/fluro_navigator.dart'; |
| 8 | import 'package:Parlando/routers/routers.dart'; | 11 | import 'package:Parlando/routers/routers.dart'; |
| 9 | -import 'package:Parlando/widgets/click_item.dart'; | ||
| 10 | import 'package:Parlando/widgets/my_app_bar.dart'; | 12 | import 'package:Parlando/widgets/my_app_bar.dart'; |
| 11 | 13 | ||
| 12 | import 'package:Parlando/extension/int_extension.dart'; | 14 | import 'package:Parlando/extension/int_extension.dart'; |
| 15 | +import 'package:path_provider/path_provider.dart'; | ||
| 13 | 16 | ||
| 14 | import '../poem_router.dart'; | 17 | import '../poem_router.dart'; |
| 15 | 18 | ||
| ... | @@ -29,6 +32,8 @@ class _PoemPublishState extends State<PoemPublish> { | ... | @@ -29,6 +32,8 @@ class _PoemPublishState extends State<PoemPublish> { |
| 29 | String _address = '我在此地'; | 32 | String _address = '我在此地'; |
| 30 | final LangSortProvider _provider = LangSortProvider(); | 33 | final LangSortProvider _provider = LangSortProvider(); |
| 31 | 34 | ||
| 35 | + final TextEditingController _msgController = TextEditingController(); | ||
| 36 | + | ||
| 32 | @override | 37 | @override |
| 33 | void initState() { | 38 | void initState() { |
| 34 | super.initState(); | 39 | super.initState(); |
| ... | @@ -72,6 +77,7 @@ class _PoemPublishState extends State<PoemPublish> { | ... | @@ -72,6 +77,7 @@ class _PoemPublishState extends State<PoemPublish> { |
| 72 | maxWidth: double.infinity, | 77 | maxWidth: double.infinity, |
| 73 | ), | 78 | ), |
| 74 | child: TextField( | 79 | child: TextField( |
| 80 | + controller: _msgController, | ||
| 75 | maxLines: 10, | 81 | maxLines: 10, |
| 76 | decoration: InputDecoration( | 82 | decoration: InputDecoration( |
| 77 | contentPadding: const EdgeInsets.all(10.0), | 83 | contentPadding: const EdgeInsets.all(10.0), |
| ... | @@ -203,16 +209,51 @@ class _PoemPublishState extends State<PoemPublish> { | ... | @@ -203,16 +209,51 @@ class _PoemPublishState extends State<PoemPublish> { |
| 203 | ); | 209 | ); |
| 204 | } | 210 | } |
| 205 | 211 | ||
| 212 | + Future<dynamic> _getUploadVideo() async { | ||
| 213 | + final directory = await getApplicationDocumentsDirectory(); | ||
| 214 | + dynamic video = await MultipartFile.fromFile( | ||
| 215 | + directory.path + "/" + widget.data, | ||
| 216 | + filename: "xxx23.png"); | ||
| 217 | + return video; | ||
| 218 | + } | ||
| 219 | + | ||
| 206 | Future<void> publishPoem(BuildContext context) async { | 220 | Future<void> publishPoem(BuildContext context) async { |
| 221 | + String msg = _msgController.text; | ||
| 222 | + if (msg.isEmpty) { | ||
| 223 | + msg = "读此一言,仿佛身临其境"; | ||
| 224 | + } | ||
| 225 | + | ||
| 207 | isPublishing = true; | 226 | isPublishing = true; |
| 208 | setState(() {}); | 227 | setState(() {}); |
| 209 | - // TODO 等待套入正式接口发布临境 | 228 | + |
| 210 | - await Future.delayed(const Duration(seconds: 2), () { | 229 | + _getUploadVideo().then((value) { |
| 211 | - NavigatorUtils.push( | 230 | + Map<String, dynamic> map = <String, dynamic>{ |
| 212 | - context, | 231 | + "video": value, |
| 213 | - '${PoemRouter.poemCompletePage}?id=100', | 232 | + }; |
| 233 | + FormData formData = FormData.fromMap(map); | ||
| 234 | + DioUtils.instance.asyncRequestNetwork( | ||
| 235 | + Method.post, | ||
| 236 | + HttpApi.uploadVideo, | ||
| 237 | + params: formData, | ||
| 238 | + onSuccess: (data) { | ||
| 239 | + print(data); | ||
| 240 | + //TODO 上传视频成功之后创建临境 | ||
| 241 | + isPublishing = false; | ||
| 242 | + }, | ||
| 243 | + onError: (code, msg) { | ||
| 244 | + isPublishing = false; | ||
| 245 | + setState(() {}); | ||
| 246 | + }, | ||
| 214 | ); | 247 | ); |
| 215 | }); | 248 | }); |
| 249 | + | ||
| 250 | + // TODO 等待套入正式接口发布临境 | ||
| 251 | + // await Future.delayed(const Duration(seconds: 2), () { | ||
| 252 | + // NavigatorUtils.push( | ||
| 253 | + // context, | ||
| 254 | + // '${PoemRouter.poemCompletePage}?id=100', | ||
| 255 | + // ); | ||
| 256 | + // }); | ||
| 216 | } | 257 | } |
| 217 | 258 | ||
| 218 | Future<bool> _isExit() async { | 259 | Future<bool> _isExit() async { | ... | ... |
| ... | @@ -255,7 +255,7 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> | ... | @@ -255,7 +255,7 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> |
| 255 | 255 | ||
| 256 | NavigatorUtils.push( | 256 | NavigatorUtils.push( |
| 257 | context, | 257 | context, |
| 258 | - '${PoemRouter.poemVideoPlayer}?url=100', | 258 | + '${PoemRouter.poemVideoPlayer}?url=$currentUnix.$fileFormat', |
| 259 | ); | 259 | ); |
| 260 | } catch (e) { | 260 | } catch (e) { |
| 261 | // print(e); | 261 | // print(e); | ... | ... |
| ... | @@ -4,6 +4,7 @@ import 'package:Parlando/res/resources.dart'; | ... | @@ -4,6 +4,7 @@ import 'package:Parlando/res/resources.dart'; |
| 4 | import 'package:Parlando/routers/fluro_navigator.dart'; | 4 | import 'package:Parlando/routers/fluro_navigator.dart'; |
| 5 | import 'package:Parlando/widgets/my_app_bar.dart'; | 5 | import 'package:Parlando/widgets/my_app_bar.dart'; |
| 6 | import 'package:Parlando/extension/int_extension.dart'; | 6 | import 'package:Parlando/extension/int_extension.dart'; |
| 7 | +import 'package:path_provider/path_provider.dart'; | ||
| 7 | 8 | ||
| 8 | import '../poem_router.dart'; | 9 | import '../poem_router.dart'; |
| 9 | 10 | ||
| ... | @@ -26,16 +27,22 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { | ... | @@ -26,16 +27,22 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { |
| 26 | 27 | ||
| 27 | _PoemVideoPlayerState(); | 28 | _PoemVideoPlayerState(); |
| 28 | 29 | ||
| 30 | + Future<String> _getDir() async { | ||
| 31 | + final directory = await getApplicationDocumentsDirectory(); | ||
| 32 | + return directory.path; | ||
| 33 | + } | ||
| 34 | + | ||
| 29 | @override | 35 | @override |
| 30 | void initState() { | 36 | void initState() { |
| 31 | super.initState(); | 37 | super.initState(); |
| 32 | - // player.setDataSource(widget.url, autoPlay: true); | 38 | + _getDir().then((value) { |
| 33 | - //TODO 替换真实URL | 39 | + String path = "$value/" + widget.url; |
| 34 | - player.setDataSource( | 40 | + player.setDataSource( |
| 35 | - "asset:///assets/data/video_01.mp4", | 41 | + path, |
| 36 | - autoPlay: true, | 42 | + autoPlay: true, |
| 37 | - ); | 43 | + ); |
| 38 | - player.setLoop(0); | 44 | + player.setLoop(0); |
| 45 | + }); | ||
| 39 | } | 46 | } |
| 40 | 47 | ||
| 41 | @override | 48 | @override |
| ... | @@ -112,10 +119,8 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { | ... | @@ -112,10 +119,8 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { |
| 112 | child: ElevatedButton( | 119 | child: ElevatedButton( |
| 113 | onPressed: () { | 120 | onPressed: () { |
| 114 | NavigatorUtils.push( | 121 | NavigatorUtils.push( |
| 115 | - context, | 122 | + context, '${PoemRouter.poemPublish}?data=' + widget.url, |
| 116 | - '${PoemRouter.poemPublish}?data=100', | 123 | + clearStack: true); |
| 117 | - clearStack: true | ||
| 118 | - ); | ||
| 119 | }, | 124 | }, |
| 120 | child: Text( | 125 | child: Text( |
| 121 | "下一步", | 126 | "下一步", | ... | ... |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment