Showing
1 changed file
with
97 additions
and
31 deletions
... | @@ -103,7 +103,7 @@ class _PoemRecordAudioPageState extends State<PoemRecordAudioPage> { | ... | @@ -103,7 +103,7 @@ class _PoemRecordAudioPageState extends State<PoemRecordAudioPage> { |
103 | margin: EdgeInsets.symmetric( | 103 | margin: EdgeInsets.symmetric( |
104 | vertical: 20.px, horizontal: 20.px), | 104 | vertical: 20.px, horizontal: 20.px), |
105 | height: MediaQuery.of(context).size.height - | 105 | height: MediaQuery.of(context).size.height - |
106 | - 100.px - | 106 | + 150.px - |
107 | widget.poemPanelHeight, | 107 | widget.poemPanelHeight, |
108 | width: double.infinity, | 108 | width: double.infinity, |
109 | decoration: BoxDecoration( | 109 | decoration: BoxDecoration( |
... | @@ -166,7 +166,7 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -166,7 +166,7 @@ class _AudioToolBarState extends State<AudioToolBar> { |
166 | int currentTimer = 0; | 166 | int currentTimer = 0; |
167 | int duration = 10 * 1000; //TODO 60 * 1000; | 167 | int duration = 10 * 1000; //TODO 60 * 1000; |
168 | 168 | ||
169 | - Codec _codec = Codec.aacMP4; | 169 | + Codec _codec = Codec.aacMP4; //TODO why accMP4? |
170 | String _mPath = 'tau_file.mp4'; | 170 | String _mPath = 'tau_file.mp4'; |
171 | FlutterSoundPlayer? _mPlayer = FlutterSoundPlayer(); | 171 | FlutterSoundPlayer? _mPlayer = FlutterSoundPlayer(); |
172 | FlutterSoundRecorder? _mRecorder = FlutterSoundRecorder(); | 172 | FlutterSoundRecorder? _mRecorder = FlutterSoundRecorder(); |
... | @@ -175,6 +175,7 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -175,6 +175,7 @@ class _AudioToolBarState extends State<AudioToolBar> { |
175 | bool _mPlaybackReady = false; | 175 | bool _mPlaybackReady = false; |
176 | bool _mRecorderIsRecording = false; | 176 | bool _mRecorderIsRecording = false; |
177 | bool _mRecorderIsPaused = false; | 177 | bool _mRecorderIsPaused = false; |
178 | + bool _mPlayerIsPlaying = false; | ||
178 | 179 | ||
179 | @override | 180 | @override |
180 | void initState() { | 181 | void initState() { |
... | @@ -246,7 +247,7 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -246,7 +247,7 @@ class _AudioToolBarState extends State<AudioToolBar> { |
246 | _timer | 247 | _timer |
247 | ..reset() | 248 | ..reset() |
248 | ..start(); | 249 | ..start(); |
249 | - _mRecorderIsRecording = true; | 250 | + |
250 | _mRecorder! | 251 | _mRecorder! |
251 | .startRecorder( | 252 | .startRecorder( |
252 | toFile: _mPath, | 253 | toFile: _mPath, |
... | @@ -254,7 +255,10 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -254,7 +255,10 @@ class _AudioToolBarState extends State<AudioToolBar> { |
254 | audioSource: theSource, | 255 | audioSource: theSource, |
255 | ) | 256 | ) |
256 | .then((value) { | 257 | .then((value) { |
257 | - setState(() {}); | 258 | + setState(() { |
259 | + _mPlaybackReady = false; | ||
260 | + _mRecorderIsRecording = true; | ||
261 | + }); | ||
258 | }); | 262 | }); |
259 | } | 263 | } |
260 | } | 264 | } |
... | @@ -262,9 +266,10 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -262,9 +266,10 @@ class _AudioToolBarState extends State<AudioToolBar> { |
262 | void pauseRecorder() async { | 266 | void pauseRecorder() async { |
263 | if (_mRecorderIsInited && _mPlayer!.isStopped) { | 267 | if (_mRecorderIsInited && _mPlayer!.isStopped) { |
264 | _timer.pause(); | 268 | _timer.pause(); |
265 | - _mRecorderIsPaused = true; | ||
266 | await _mRecorder!.pauseRecorder().then((value) { | 269 | await _mRecorder!.pauseRecorder().then((value) { |
267 | - setState(() {}); | 270 | + setState(() { |
271 | + _mRecorderIsPaused = true; | ||
272 | + }); | ||
268 | }); | 273 | }); |
269 | } | 274 | } |
270 | } | 275 | } |
... | @@ -273,21 +278,20 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -273,21 +278,20 @@ class _AudioToolBarState extends State<AudioToolBar> { |
273 | if (_mRecorderIsInited && _mPlayer!.isStopped) { | 278 | if (_mRecorderIsInited && _mPlayer!.isStopped) { |
274 | _timer.start(); | 279 | _timer.start(); |
275 | await _mRecorder!.resumeRecorder().then((value) { | 280 | await _mRecorder!.resumeRecorder().then((value) { |
281 | + setState(() { | ||
276 | _mRecorderIsPaused = false; | 282 | _mRecorderIsPaused = false; |
277 | - setState(() {}); | 283 | + }); |
278 | }); | 284 | }); |
279 | } | 285 | } |
280 | } | 286 | } |
281 | 287 | ||
282 | void stopRecorder() async { | 288 | void stopRecorder() async { |
283 | if (_mRecorderIsInited && _mPlayer!.isStopped) { | 289 | if (_mRecorderIsInited && _mPlayer!.isStopped) { |
284 | - print("### stop record"); | ||
285 | - | ||
286 | _timer.pause(); | 290 | _timer.pause(); |
287 | await _mRecorder!.stopRecorder().then((value) { | 291 | await _mRecorder!.stopRecorder().then((value) { |
288 | - _mRecorderIsRecording = false; | ||
289 | setState(() { | 292 | setState(() { |
290 | _mPlaybackReady = true; | 293 | _mPlaybackReady = true; |
294 | + _mRecorderIsRecording = false; | ||
291 | }); | 295 | }); |
292 | }); | 296 | }); |
293 | } | 297 | } |
... | @@ -299,10 +303,14 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -299,10 +303,14 @@ class _AudioToolBarState extends State<AudioToolBar> { |
299 | .startPlayer( | 303 | .startPlayer( |
300 | fromURI: _mPath, | 304 | fromURI: _mPath, |
301 | whenFinished: () { | 305 | whenFinished: () { |
302 | - setState(() {}); | 306 | + setState(() { |
307 | + _mPlayerIsPlaying = false; | ||
308 | + }); | ||
303 | }) | 309 | }) |
304 | .then((value) { | 310 | .then((value) { |
305 | - setState(() {}); | 311 | + setState(() { |
312 | + _mPlayerIsPlaying = true; | ||
313 | + }); | ||
306 | }); | 314 | }); |
307 | } | 315 | } |
308 | } | 316 | } |
... | @@ -324,7 +332,79 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -324,7 +332,79 @@ class _AudioToolBarState extends State<AudioToolBar> { |
324 | 16.px, | 332 | 16.px, |
325 | 8.px, | 333 | 8.px, |
326 | ), | 334 | ), |
327 | - child: Row( | 335 | + child: _mPlaybackReady |
336 | + ? Row( | ||
337 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
338 | + crossAxisAlignment: CrossAxisAlignment.end, | ||
339 | + children: [ | ||
340 | + InkWell( | ||
341 | + onTap: () { | ||
342 | + _mPlaybackReady = false; | ||
343 | + setState(() {}); | ||
344 | + }, | ||
345 | + child: Stack( | ||
346 | + alignment: Alignment.center, | ||
347 | + children: [ | ||
348 | + Icon( | ||
349 | + Icons.circle, | ||
350 | + color: Colors.black38, | ||
351 | + size: 60.px, | ||
352 | + ), | ||
353 | + Icon( | ||
354 | + Icons.edit, | ||
355 | + color: Colors.white, | ||
356 | + size: 30.px, | ||
357 | + ), | ||
358 | + ], | ||
359 | + ), | ||
360 | + ), | ||
361 | + InkWell( | ||
362 | + onTap: () { | ||
363 | + _mPlayerIsPlaying ? stopPlayer() : play(); | ||
364 | + }, | ||
365 | + child: Stack( | ||
366 | + alignment: Alignment.center, | ||
367 | + children: [ | ||
368 | + Icon( | ||
369 | + Icons.circle, | ||
370 | + color: Colors.white, | ||
371 | + size: 80.px, | ||
372 | + ), | ||
373 | + Icon( | ||
374 | + _mPlayerIsPlaying ? Icons.pause : Icons.play_arrow, | ||
375 | + color: Colors.red, | ||
376 | + size: 65.px, | ||
377 | + ), | ||
378 | + ], | ||
379 | + ), | ||
380 | + ), | ||
381 | + InkWell( | ||
382 | + onTap: () { | ||
383 | + NavigatorUtils.push( | ||
384 | + context, | ||
385 | + '${PoemRouter.poemPublish}?data=100', | ||
386 | + clearStack: true, | ||
387 | + ); | ||
388 | + }, | ||
389 | + child: Stack( | ||
390 | + alignment: Alignment.center, | ||
391 | + children: [ | ||
392 | + Icon( | ||
393 | + Icons.circle, | ||
394 | + color: Colors.black38, | ||
395 | + size: 60.px, | ||
396 | + ), | ||
397 | + Icon( | ||
398 | + Icons.navigate_next_outlined, | ||
399 | + color: Colors.white, | ||
400 | + size: 30.px, | ||
401 | + ), | ||
402 | + ], | ||
403 | + ), | ||
404 | + ), | ||
405 | + ], | ||
406 | + ) | ||
407 | + : Row( | ||
328 | mainAxisAlignment: MainAxisAlignment.spaceBetween, | 408 | mainAxisAlignment: MainAxisAlignment.spaceBetween, |
329 | crossAxisAlignment: CrossAxisAlignment.end, | 409 | crossAxisAlignment: CrossAxisAlignment.end, |
330 | children: [ | 410 | children: [ |
... | @@ -413,24 +493,10 @@ class _AudioToolBarState extends State<AudioToolBar> { | ... | @@ -413,24 +493,10 @@ class _AudioToolBarState extends State<AudioToolBar> { |
413 | ], | 493 | ], |
414 | ), | 494 | ), |
415 | ), | 495 | ), |
416 | - InkWell( | 496 | + SizedBox( |
417 | - onTap: () {}, | 497 | + height: 10.px, |
418 | - child: Stack( | 498 | + width: 60.px, |
419 | - alignment: Alignment.center, | 499 | + ) |
420 | - children: [ | ||
421 | - Icon( | ||
422 | - Icons.circle, | ||
423 | - color: Colors.black38, | ||
424 | - size: 60.px, | ||
425 | - ), | ||
426 | - Icon( | ||
427 | - Icons.arrow_right_alt, | ||
428 | - color: Colors.white, | ||
429 | - size: 30.px, | ||
430 | - ), | ||
431 | - ], | ||
432 | - ), | ||
433 | - ), | ||
434 | ], | 500 | ], |
435 | ), | 501 | ), |
436 | ); | 502 | ); | ... | ... |
-
Please register or login to post a comment