Yimaru-Mobile/lib/ui/widgets/learn_practice_answer_card.dart

82 lines
2.7 KiB
Dart

import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import '../common/app_colors.dart';
import '../common/enmus.dart';
import '../common/ui_helpers.dart';
import '../views/learn_practice/learn_practice_viewmodel.dart';
class LearnPracticeAnswerCard extends ViewModelWidget<LearnPracticeViewModel> {
final String title;
final StateObjects object;
const LearnPracticeAnswerCard(
{super.key, required this.title, required this.object});
@override
Widget build(BuildContext context, LearnPracticeViewModel viewModel) =>
_buildContainer(viewModel);
Widget _buildContainer(LearnPracticeViewModel viewModel) => Container(
decoration: BoxDecoration(
color: kcWhite,
borderRadius: BorderRadius.circular(12),
),
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 5),
child: _buildRow(viewModel),
);
Widget _buildRow(LearnPracticeViewModel viewModel) => Row(
children: [_buildPlayButton(viewModel), _buildColumnWrapper()],
);
Widget _buildPlayButton(LearnPracticeViewModel viewModel) => ElevatedButton(
style: const ButtonStyle(
shape: WidgetStatePropertyAll(CircleBorder()),
padding: WidgetStatePropertyAll(EdgeInsets.all(5)),
shadowColor: WidgetStatePropertyAll(kcPrimaryColor),
backgroundColor: WidgetStatePropertyAll(kcPrimaryColor),
),
onPressed: () async => viewModel.player.state == PlayerState.playing
? viewModel.busyObject == StateObjects.learnPracticeSample
? await viewModel.pauseSampleAudio()
: await viewModel.pauseRecordedAudio()
: object == StateObjects.learnPracticeSample
? await viewModel.playSampleAudio()
: await viewModel.playRecordedAudio(),
child: _buildButtonState(viewModel),
);
Widget _buildButtonState(LearnPracticeViewModel viewModel) =>
viewModel.busy(object)
? viewModel.busyObject == object
? _buildPauseIcon()
: _buildPlayIcon()
: viewModel.busyObject == object &&
viewModel.player.state == PlayerState.playing
? _buildPauseIcon()
: _buildPlayIcon();
Widget _buildPlayIcon() => const Icon(
Icons.play_arrow_rounded,
size: 25,
color: kcWhite,
);
Widget _buildPauseIcon() => const Icon(
Icons.pause,
size: 25,
color: kcWhite,
);
Widget _buildColumnWrapper() => Expanded(child: _buildTitle());
Widget _buildTitle() => Text(
title,
maxLines: 1,
softWrap: false,
style: style12RP600,
);
}