Showing
4 changed files
with
207 additions
and
49 deletions
... | @@ -3,6 +3,8 @@ import 'package:flutter/material.dart'; | ... | @@ -3,6 +3,8 @@ import 'package:flutter/material.dart'; |
3 | import 'package:one_poem/res/constant.dart'; | 3 | import 'package:one_poem/res/constant.dart'; |
4 | import 'package:one_poem/routers/fluro_navigator.dart'; | 4 | import 'package:one_poem/routers/fluro_navigator.dart'; |
5 | 5 | ||
6 | +import 'package:one_poem/extension/int_extension.dart'; | ||
7 | + | ||
6 | /// 创建人: Created by zhaolong | 8 | /// 创建人: Created by zhaolong |
7 | /// 创建时间:Created by on 2020/12/12. | 9 | /// 创建时间:Created by on 2020/12/12. |
8 | /// | 10 | /// |
... | @@ -11,7 +13,6 @@ import 'package:one_poem/routers/fluro_navigator.dart'; | ... | @@ -11,7 +13,6 @@ import 'package:one_poem/routers/fluro_navigator.dart'; |
11 | /// 可关注博客:https://blog.csdn.net/zl18603543572 | 13 | /// 可关注博客:https://blog.csdn.net/zl18603543572 |
12 | /// | 14 | /// |
13 | /// 代码清单 | 15 | /// 代码清单 |
14 | -///代码清单 | ||
15 | class ProtocolModel { | 16 | class ProtocolModel { |
16 | late TapGestureRecognizer _registerProtocolRecognizer; | 17 | late TapGestureRecognizer _registerProtocolRecognizer; |
17 | late TapGestureRecognizer _privacyProtocolRecognizer; | 18 | late TapGestureRecognizer _privacyProtocolRecognizer; |
... | @@ -23,7 +24,6 @@ class ProtocolModel { | ... | @@ -23,7 +24,6 @@ class ProtocolModel { |
23 | //隐私协议的手势 | 24 | //隐私协议的手势 |
24 | _privacyProtocolRecognizer = TapGestureRecognizer(); | 25 | _privacyProtocolRecognizer = TapGestureRecognizer(); |
25 | 26 | ||
26 | - //苹果风格弹框 | ||
27 | bool isShow = await showDialog( | 27 | bool isShow = await showDialog( |
28 | //上下文对象 | 28 | //上下文对象 |
29 | context: context, | 29 | context: context, |
... | @@ -44,8 +44,8 @@ class ProtocolModel { | ... | @@ -44,8 +44,8 @@ class ProtocolModel { |
44 | return AlertDialog( | 44 | return AlertDialog( |
45 | title: const Text("温馨提示"), | 45 | title: const Text("温馨提示"), |
46 | content: Container( | 46 | content: Container( |
47 | - height: 260, | 47 | + height: 260.px, |
48 | - padding: const EdgeInsets.all(1), | 48 | + padding: EdgeInsets.all(1.px), |
49 | //可滑动布局 | 49 | //可滑动布局 |
50 | child: SingleChildScrollView( | 50 | child: SingleChildScrollView( |
51 | child: buildContent(context), | 51 | child: buildContent(context), |
... | @@ -71,7 +71,6 @@ class ProtocolModel { | ... | @@ -71,7 +71,6 @@ class ProtocolModel { |
71 | //协议说明文案 | 71 | //协议说明文案 |
72 | String userPrivateProtocol = | 72 | String userPrivateProtocol = |
73 | "我们一向尊重并会严格保护用户在使用本产品时的合法权益(包括用户隐私、用户数据等)不受到任何侵犯。本协议(包括本文最后部分的隐私政策)是用户(包括通过各种合法途径获取到本产品的自然人、法人或其他组织机构,以下简称“用户”或“您”)与我们之间针对本产品相关事项最终的、完整的且排他的协议,并取代、合并之前的当事人之间关于上述事项的讨论和协议。本协议将对用户使用本产品的行为产生法律约束力,您已承诺和保证有权利和能力订立本协议。用户开始使用本产品将视为已经接受本协议,请认真阅读并理解本协议中各种条款,包括免除和限制我们的免责条款和对用户的权利限制(未成年人审阅时应由法定监护人陪同),如果您不能接受本协议中的全部条款,请勿开始使用本产品"; | 73 | "我们一向尊重并会严格保护用户在使用本产品时的合法权益(包括用户隐私、用户数据等)不受到任何侵犯。本协议(包括本文最后部分的隐私政策)是用户(包括通过各种合法途径获取到本产品的自然人、法人或其他组织机构,以下简称“用户”或“您”)与我们之间针对本产品相关事项最终的、完整的且排他的协议,并取代、合并之前的当事人之间关于上述事项的讨论和协议。本协议将对用户使用本产品的行为产生法律约束力,您已承诺和保证有权利和能力订立本协议。用户开始使用本产品将视为已经接受本协议,请认真阅读并理解本协议中各种条款,包括免除和限制我们的免责条款和对用户的权利限制(未成年人审阅时应由法定监护人陪同),如果您不能接受本协议中的全部条款,请勿开始使用本产品"; |
74 | - | ||
75 | buildContent(BuildContext context) { | 74 | buildContent(BuildContext context) { |
76 | return RichText( | 75 | return RichText( |
77 | text: TextSpan( | 76 | text: TextSpan( | ... | ... |
1 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
2 | import 'package:one_poem/res/resources.dart'; | 2 | import 'package:one_poem/res/resources.dart'; |
3 | +import 'package:one_poem/routers/fluro_navigator.dart'; | ||
4 | +import 'package:one_poem/routers/routers.dart'; | ||
3 | import 'package:one_poem/util/toast_utils.dart'; | 5 | import 'package:one_poem/util/toast_utils.dart'; |
4 | import 'package:one_poem/widgets/my_app_bar.dart'; | 6 | import 'package:one_poem/widgets/my_app_bar.dart'; |
5 | 7 | ||
8 | +import 'package:one_poem/extension/int_extension.dart'; | ||
9 | + | ||
6 | class PoemPublish extends StatefulWidget { | 10 | class PoemPublish extends StatefulWidget { |
7 | const PoemPublish({Key? key, required this.data}) : super(key: key); | 11 | const PoemPublish({Key? key, required this.data}) : super(key: key); |
8 | 12 | ||
... | @@ -24,7 +28,9 @@ class _PoemPublishState extends State<PoemPublish> { | ... | @@ -24,7 +28,9 @@ class _PoemPublishState extends State<PoemPublish> { |
24 | 28 | ||
25 | @override | 29 | @override |
26 | Widget build(BuildContext context) { | 30 | Widget build(BuildContext context) { |
27 | - return Scaffold( | 31 | + return WillPopScope( |
32 | + onWillPop: _isExit, | ||
33 | + child: Scaffold( | ||
28 | appBar: MyAppBar( | 34 | appBar: MyAppBar( |
29 | homeMenuHeader: Container( | 35 | homeMenuHeader: Container( |
30 | alignment: Alignment.center, | 36 | alignment: Alignment.center, |
... | @@ -64,17 +70,18 @@ class _PoemPublishState extends State<PoemPublish> { | ... | @@ -64,17 +70,18 @@ class _PoemPublishState extends State<PoemPublish> { |
64 | ), | 70 | ), |
65 | ), | 71 | ), |
66 | Container( | 72 | Container( |
67 | - padding: const EdgeInsets.all(10.0), | 73 | + padding: EdgeInsets.all(10.px), |
68 | alignment: Alignment.centerLeft, | 74 | alignment: Alignment.centerLeft, |
69 | width: double.infinity, | 75 | width: double.infinity, |
70 | - height: 36.0, | 76 | + height: 36.px, |
71 | child: Wrap( | 77 | child: Wrap( |
72 | - children: const [ | 78 | + children: [ |
73 | Icon( | 79 | Icon( |
74 | Icons.room_outlined, | 80 | Icons.room_outlined, |
75 | - size: 15, | 81 | + size: 15.px, |
76 | ), | 82 | ), |
77 | - Text( | 83 | + Gaps.hGap5, |
84 | + const Text( | ||
78 | "我在此地", | 85 | "我在此地", |
79 | style: TextStyle(color: Colors.black45), | 86 | style: TextStyle(color: Colors.black45), |
80 | ), | 87 | ), |
... | @@ -82,66 +89,97 @@ class _PoemPublishState extends State<PoemPublish> { | ... | @@ -82,66 +89,97 @@ class _PoemPublishState extends State<PoemPublish> { |
82 | ), | 89 | ), |
83 | ), | 90 | ), |
84 | Container( | 91 | Container( |
85 | - padding: const EdgeInsets.all(10.0), | 92 | + padding: EdgeInsets.all(10.px), |
86 | alignment: Alignment.centerLeft, | 93 | alignment: Alignment.centerLeft, |
87 | width: double.infinity, | 94 | width: double.infinity, |
88 | - height: 36.0, | 95 | + height: 36.px, |
89 | child: Wrap( | 96 | child: Wrap( |
90 | - children: const [ | 97 | + children: [ |
91 | Icon( | 98 | Icon( |
92 | - Icons.room_outlined, | 99 | + Icons.record_voice_over_outlined, |
93 | - size: 15, | 100 | + size: 15.px, |
94 | ), | 101 | ), |
95 | - Text( | 102 | + Gaps.hGap5, |
103 | + const Text( | ||
96 | "所用口音", | 104 | "所用口音", |
97 | style: TextStyle(color: Colors.black45), | 105 | style: TextStyle(color: Colors.black45), |
98 | ), | 106 | ), |
99 | Gaps.hGap10, | 107 | Gaps.hGap10, |
100 | - Text( | 108 | + const Text( |
101 | "普通话", | 109 | "普通话", |
102 | style: TextStyle(color: Colors.black45), | 110 | style: TextStyle(color: Colors.black45), |
103 | ), | 111 | ), |
104 | ], | 112 | ], |
105 | ), | 113 | ), |
106 | ), | 114 | ), |
107 | - Gaps.vGap24, | 115 | + const Spacer(), |
108 | Expanded( | 116 | Expanded( |
117 | + child: Center( | ||
109 | child: Column( | 118 | child: Column( |
110 | crossAxisAlignment: CrossAxisAlignment.center, | 119 | crossAxisAlignment: CrossAxisAlignment.center, |
120 | + mainAxisAlignment: MainAxisAlignment.center, | ||
111 | children: [ | 121 | children: [ |
112 | - Container( | 122 | + Text( |
113 | - height: 36.0, | ||
114 | - alignment: Alignment.center, | ||
115 | - width: double.infinity, | ||
116 | - child: const Text( | ||
117 | "发布临境,让更多人身临其境", | 123 | "发布临境,让更多人身临其境", |
118 | - style: TextStyle(fontSize: 12.0), | 124 | + style: TextStyle(fontSize: 14.px), |
119 | - ), | ||
120 | ), | 125 | ), |
121 | - Container( | 126 | + Gaps.vGap10, |
122 | - height: 48.0, | 127 | + TextButton( |
123 | - alignment: Alignment.center, | ||
124 | - width: double.infinity, | ||
125 | - child: TextButton( | ||
126 | style: ButtonStyle( | 128 | style: ButtonStyle( |
127 | side: MaterialStateProperty.all( | 129 | side: MaterialStateProperty.all( |
128 | - const BorderSide(color: Colors.black54, width: 1), | 130 | + BorderSide( |
131 | + color: Colors.black54, | ||
132 | + width: 1.px, | ||
133 | + ), | ||
129 | ), | 134 | ), |
130 | ), | 135 | ), |
131 | onPressed: () { | 136 | onPressed: () { |
132 | Toast.show("先不发布了吧。。。。"); | 137 | Toast.show("先不发布了吧。。。。"); |
133 | }, | 138 | }, |
134 | - child: const Text( | 139 | + child: Text( |
135 | "发布", | 140 | "发布", |
136 | - style: TextStyle(color: Colors.black54, fontSize: 15.0), | 141 | + style: |
137 | - ), | 142 | + TextStyle(color: Colors.black54, fontSize: 15.px), |
138 | ), | 143 | ), |
139 | ), | 144 | ), |
140 | ], | 145 | ], |
141 | ), | 146 | ), |
142 | ), | 147 | ), |
148 | + ), | ||
143 | ], | 149 | ], |
144 | ), | 150 | ), |
151 | + ), | ||
152 | + ); | ||
153 | + } | ||
154 | + | ||
155 | + Future<bool> _isExit() async { | ||
156 | + showDialog( | ||
157 | + context: context, | ||
158 | + builder: (BuildContext context) { | ||
159 | + return AlertDialog( | ||
160 | + title: const Text("温馨提示"), | ||
161 | + content: Container( | ||
162 | + padding: EdgeInsets.all(1.px), | ||
163 | + //可滑动布局 | ||
164 | + child: const Text("确认放弃此次作品吗?"), | ||
165 | + ), | ||
166 | + actions: [ | ||
167 | + TextButton( | ||
168 | + child: const Text("再想想"), | ||
169 | + onPressed: () { | ||
170 | + Navigator.of(context).pop(true); | ||
171 | + }, | ||
172 | + ), | ||
173 | + TextButton( | ||
174 | + child: const Text("残忍放弃"), | ||
175 | + onPressed: () { | ||
176 | + NavigatorUtils.push(context, Routes.home, clearStack: true); | ||
177 | + }, | ||
178 | + ), | ||
179 | + ], | ||
180 | + ); | ||
181 | + }, | ||
145 | ); | 182 | ); |
183 | + return Future.value(false); | ||
146 | } | 184 | } |
147 | } | 185 | } | ... | ... |
... | @@ -4,6 +4,8 @@ import 'dart:io'; | ... | @@ -4,6 +4,8 @@ import 'dart:io'; |
4 | import 'package:camera/camera.dart'; | 4 | import 'package:camera/camera.dart'; |
5 | import 'package:flutter/material.dart'; | 5 | import 'package:flutter/material.dart'; |
6 | import 'package:flutter/services.dart'; | 6 | import 'package:flutter/services.dart'; |
7 | +import 'package:one_poem/res/resources.dart'; | ||
8 | +import 'package:one_poem/routers/fluro_navigator.dart'; | ||
7 | import 'package:one_poem/util/toast_utils.dart'; | 9 | import 'package:one_poem/util/toast_utils.dart'; |
8 | import 'package:one_poem/widgets/my_app_bar.dart'; | 10 | import 'package:one_poem/widgets/my_app_bar.dart'; |
9 | import 'package:path_provider/path_provider.dart'; | 11 | import 'package:path_provider/path_provider.dart'; |
... | @@ -11,6 +13,8 @@ import 'package:pausable_timer/pausable_timer.dart'; | ... | @@ -11,6 +13,8 @@ import 'package:pausable_timer/pausable_timer.dart'; |
11 | import 'package:video_player/video_player.dart'; | 13 | import 'package:video_player/video_player.dart'; |
12 | import 'package:one_poem/extension/int_extension.dart'; | 14 | import 'package:one_poem/extension/int_extension.dart'; |
13 | 15 | ||
16 | +import '../poem_router.dart'; | ||
17 | + | ||
14 | class PoemRecordVideoPage extends StatefulWidget { | 18 | class PoemRecordVideoPage extends StatefulWidget { |
15 | const PoemRecordVideoPage({Key? key}) : super(key: key); | 19 | const PoemRecordVideoPage({Key? key}) : super(key: key); |
16 | 20 | ||
... | @@ -44,7 +48,7 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> | ... | @@ -44,7 +48,7 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> |
44 | ///记录当前的时间 | 48 | ///记录当前的时间 |
45 | int currentTimer = 0; | 49 | int currentTimer = 0; |
46 | 50 | ||
47 | - int duration = 60 * 1000; | 51 | + int duration = 10 * 1000; //TODO 60 * 1000; |
48 | 52 | ||
49 | @override | 53 | @override |
50 | void initState() { | 54 | void initState() { |
... | @@ -244,19 +248,19 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> | ... | @@ -244,19 +248,19 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> |
244 | try { | 248 | try { |
245 | XFile? rawVideo = await stopVideoRecording(); | 249 | XFile? rawVideo = await stopVideoRecording(); |
246 | File videoFile = File(rawVideo!.path); | 250 | File videoFile = File(rawVideo!.path); |
247 | - | ||
248 | int currentUnix = DateTime.now().millisecondsSinceEpoch; | 251 | int currentUnix = DateTime.now().millisecondsSinceEpoch; |
249 | - | ||
250 | final directory = await getApplicationDocumentsDirectory(); | 252 | final directory = await getApplicationDocumentsDirectory(); |
251 | - | ||
252 | String fileFormat = videoFile.path.split('.').last; | 253 | String fileFormat = videoFile.path.split('.').last; |
253 | - | ||
254 | _videoFile = await videoFile.copy( | 254 | _videoFile = await videoFile.copy( |
255 | '${directory.path}/$currentUnix.$fileFormat', | 255 | '${directory.path}/$currentUnix.$fileFormat', |
256 | ); | 256 | ); |
257 | - | ||
258 | // TODO why pause!直接使用cancel()会出现问题,暂时这么解决 | 257 | // TODO why pause!直接使用cancel()会出现问题,暂时这么解决 |
259 | _timer.pause(); | 258 | _timer.pause(); |
259 | + | ||
260 | + NavigatorUtils.push( | ||
261 | + context, | ||
262 | + '${PoemRouter.poemVideoPlayer}?url=100', | ||
263 | + ); | ||
260 | } catch (e) { | 264 | } catch (e) { |
261 | // print(e); | 265 | // print(e); |
262 | } | 266 | } |
... | @@ -276,13 +280,49 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> | ... | @@ -276,13 +280,49 @@ class _PoemRecordVideoPageState extends State<PoemRecordVideoPage> |
276 | controller!.buildPreview(), | 280 | controller!.buildPreview(), |
277 | Padding( | 281 | Padding( |
278 | padding: EdgeInsets.fromLTRB(10.px, 30.px, 10.px, 10.px), | 282 | padding: EdgeInsets.fromLTRB(10.px, 30.px, 10.px, 10.px), |
279 | - child: Text( | 283 | + child: Column( |
284 | + crossAxisAlignment: CrossAxisAlignment.start, | ||
285 | + children: [ | ||
286 | + Text( | ||
287 | + "题破山寺后禅院", | ||
288 | + style: TextStyle( | ||
289 | + color: Colors.white, | ||
290 | + fontSize: 28.px, | ||
291 | + ), | ||
292 | + ), | ||
293 | + Gaps.vGap10, | ||
294 | + Text( | ||
295 | + "常建", | ||
296 | + style: TextStyle( | ||
297 | + color: Colors.white, | ||
298 | + fontSize: 15.px, | ||
299 | + ), | ||
300 | + ), | ||
301 | + Gaps.vGap5, | ||
302 | + Text( | ||
280 | "清晨入古寺,\n初日照高林。\n曲径通幽处,\n禅房花木深。\n山光悦鸟性,\n潭影空人心。\n万籁此都寂,\n但余钟磬音。\n", | 303 | "清晨入古寺,\n初日照高林。\n曲径通幽处,\n禅房花木深。\n山光悦鸟性,\n潭影空人心。\n万籁此都寂,\n但余钟磬音。\n", |
281 | style: TextStyle( | 304 | style: TextStyle( |
282 | color: Colors.white, | 305 | color: Colors.white, |
283 | fontFamily: "ZCOOLXiaoWei", | 306 | fontFamily: "ZCOOLXiaoWei", |
284 | - fontSize: 20.px, | 307 | + fontSize: 25.px, |
308 | + ), | ||
309 | + ), | ||
310 | + Gaps.vGap5, | ||
311 | + Text( | ||
312 | + "临者:老魔取西经", | ||
313 | + style: TextStyle( | ||
314 | + color: Colors.white, | ||
315 | + fontSize: 15.px, | ||
316 | + ), | ||
285 | ), | 317 | ), |
318 | + Text( | ||
319 | + "2022年01月25日 辰时三刻", | ||
320 | + style: TextStyle( | ||
321 | + color: Colors.white, | ||
322 | + fontSize: 15.px, | ||
323 | + ), | ||
324 | + ), | ||
325 | + ], | ||
286 | ), | 326 | ), |
287 | ), | 327 | ), |
288 | Padding( | 328 | Padding( | ... | ... |
1 | import 'package:fijkplayer/fijkplayer.dart'; | 1 | import 'package:fijkplayer/fijkplayer.dart'; |
2 | import 'package:flutter/material.dart'; | 2 | import 'package:flutter/material.dart'; |
3 | +import 'package:one_poem/res/resources.dart'; | ||
4 | +import 'package:one_poem/routers/fluro_navigator.dart'; | ||
3 | import 'package:one_poem/widgets/my_app_bar.dart'; | 5 | import 'package:one_poem/widgets/my_app_bar.dart'; |
6 | +import 'package:one_poem/extension/int_extension.dart'; | ||
7 | + | ||
8 | +import '../poem_router.dart'; | ||
4 | 9 | ||
5 | class PoemVideoPlayer extends StatefulWidget { | 10 | class PoemVideoPlayer extends StatefulWidget { |
6 | final String url; | 11 | final String url; |
... | @@ -26,7 +31,11 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { | ... | @@ -26,7 +31,11 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { |
26 | super.initState(); | 31 | super.initState(); |
27 | // player.setDataSource(widget.url, autoPlay: true); | 32 | // player.setDataSource(widget.url, autoPlay: true); |
28 | //TODO 替换真实URL | 33 | //TODO 替换真实URL |
29 | - player.setDataSource("asset:///assets/data/video_01.mp4", autoPlay: true); | 34 | + player.setDataSource( |
35 | + "asset:///assets/data/video_01.mp4", | ||
36 | + autoPlay: true, | ||
37 | + ); | ||
38 | + player.setLoop(0); | ||
30 | } | 39 | } |
31 | 40 | ||
32 | @override | 41 | @override |
... | @@ -37,22 +46,94 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { | ... | @@ -37,22 +46,94 @@ class _PoemVideoPlayerState extends State<PoemVideoPlayer> { |
37 | alignment: Alignment.center, | 46 | alignment: Alignment.center, |
38 | child: Text( | 47 | child: Text( |
39 | widget.title ?? "视频播放", | 48 | widget.title ?? "视频播放", |
40 | - style: const TextStyle(color: Colors.white), | 49 | + style: const TextStyle( |
50 | + color: Colors.white, | ||
41 | ), | 51 | ), |
42 | ), | 52 | ), |
43 | ), | 53 | ), |
44 | - body: Container( | 54 | + ), |
45 | - alignment: Alignment.center, | 55 | + body: Stack( |
46 | - child: FijkView( | 56 | + children: [ |
57 | + FijkView( | ||
47 | height: MediaQuery.of(context).size.height, | 58 | height: MediaQuery.of(context).size.height, |
48 | player: player, | 59 | player: player, |
60 | + fit: FijkFit.fill, | ||
61 | + ), | ||
62 | + Padding( | ||
63 | + padding: EdgeInsets.fromLTRB(10.px, 30.px, 10.px, 10.px), | ||
64 | + child: Column( | ||
65 | + crossAxisAlignment: CrossAxisAlignment.start, | ||
66 | + children: [ | ||
67 | + Text( | ||
68 | + "题破山寺后禅院", | ||
69 | + style: TextStyle( | ||
70 | + color: Colors.white, | ||
71 | + fontSize: 28.px, | ||
72 | + ), | ||
73 | + ), | ||
74 | + Gaps.vGap10, | ||
75 | + Text( | ||
76 | + "常建", | ||
77 | + style: TextStyle( | ||
78 | + color: Colors.white, | ||
79 | + fontSize: 15.px, | ||
80 | + ), | ||
81 | + ), | ||
82 | + Gaps.vGap5, | ||
83 | + Text( | ||
84 | + "清晨入古寺,\n初日照高林。\n曲径通幽处,\n禅房花木深。\n山光悦鸟性,\n潭影空人心。\n万籁此都寂,\n但余钟磬音。\n", | ||
85 | + style: TextStyle( | ||
86 | + color: Colors.white, | ||
87 | + fontFamily: "ZCOOLXiaoWei", | ||
88 | + fontSize: 25.px, | ||
89 | + ), | ||
90 | + ), | ||
91 | + Gaps.vGap5, | ||
92 | + Text( | ||
93 | + "临者:老魔取西经", | ||
94 | + style: TextStyle( | ||
95 | + color: Colors.white, | ||
96 | + fontSize: 15.px, | ||
97 | + ), | ||
49 | ), | 98 | ), |
99 | + Text( | ||
100 | + "2022年01月25日 辰时三刻", | ||
101 | + style: TextStyle( | ||
102 | + color: Colors.white, | ||
103 | + fontSize: 15.px, | ||
104 | + ), | ||
105 | + ), | ||
106 | + ], | ||
107 | + ), | ||
108 | + ), | ||
109 | + Positioned( | ||
110 | + bottom: 10.px, | ||
111 | + right: 20.px, | ||
112 | + child: ElevatedButton( | ||
113 | + onPressed: () { | ||
114 | + NavigatorUtils.push( | ||
115 | + context, | ||
116 | + '${PoemRouter.poemPublish}?data=100', | ||
117 | + clearStack: true | ||
118 | + ); | ||
119 | + }, | ||
120 | + child: Text( | ||
121 | + "下一步", | ||
122 | + style: TextStyle(fontSize: 15.px), | ||
123 | + ), | ||
124 | + style: TextButton.styleFrom( | ||
125 | + primary: Colors.white, | ||
126 | + backgroundColor: Colors.black54, | ||
127 | + ), | ||
128 | + ), | ||
129 | + ), | ||
130 | + ], | ||
50 | )); | 131 | )); |
51 | } | 132 | } |
52 | 133 | ||
53 | @override | 134 | @override |
54 | void dispose() { | 135 | void dispose() { |
55 | - super.dispose(); | ||
56 | player.release(); | 136 | player.release(); |
137 | + super.dispose(); | ||
57 | } | 138 | } |
58 | } | 139 | } | ... | ... |
-
Please register or login to post a comment