diff --git a/assets/images/1_smile.svg b/assets/images/1_smile.svg new file mode 100644 index 0000000..516df22 --- /dev/null +++ b/assets/images/1_smile.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/images/2_angry.svg b/assets/images/2_angry.svg new file mode 100644 index 0000000..9b9dc9d --- /dev/null +++ b/assets/images/2_angry.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/images/3_funny.svg b/assets/images/3_funny.svg new file mode 100644 index 0000000..11c51c9 --- /dev/null +++ b/assets/images/3_funny.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/voice/voice_1.mp3 b/assets/voice/voice_1.mp3 deleted file mode 100644 index f4426c1..0000000 Binary files a/assets/voice/voice_1.mp3 and /dev/null differ diff --git a/assets/voice/voice_1.wav b/assets/voice/voice_1.wav new file mode 100644 index 0000000..20deeed Binary files /dev/null and b/assets/voice/voice_1.wav differ diff --git a/assets/voice/voice_2.mp3 b/assets/voice/voice_2.mp3 deleted file mode 100644 index db16fa7..0000000 Binary files a/assets/voice/voice_2.mp3 and /dev/null differ diff --git a/assets/voice/voice_2.wav b/assets/voice/voice_2.wav new file mode 100644 index 0000000..6a4ea0e Binary files /dev/null and b/assets/voice/voice_2.wav differ diff --git a/assets/voice/voice_3.mp3 b/assets/voice/voice_3.mp3 deleted file mode 100644 index 4641ed5..0000000 Binary files a/assets/voice/voice_3.mp3 and /dev/null differ diff --git a/assets/voice/voice_3.wav b/assets/voice/voice_3.wav new file mode 100644 index 0000000..a1886f7 Binary files /dev/null and b/assets/voice/voice_3.wav differ diff --git a/assets/voice/voice_4.mp3 b/assets/voice/voice_4.mp3 deleted file mode 100644 index e75e4d7..0000000 Binary files a/assets/voice/voice_4.mp3 and /dev/null differ diff --git a/lib/feature/voiceOutput/widget/VoiceOutputButton.dart b/lib/feature/voiceOutput/widget/VoiceOutputButton.dart index 4710d3f..bca7428 100644 --- a/lib/feature/voiceOutput/widget/VoiceOutputButton.dart +++ b/lib/feature/voiceOutput/widget/VoiceOutputButton.dart @@ -1,8 +1,11 @@ +import 'package:audioplayers/audioplayers.dart'; import 'package:blueberry_flutter_template/feature/voiceOutput/provider/CategoryIondexProvider.dart'; import 'package:blueberry_flutter_template/utils/AppColors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +final player = AudioPlayer(); + class VoiceOutputButton extends ConsumerWidget { const VoiceOutputButton({super.key}); @@ -14,7 +17,7 @@ class VoiceOutputButton extends ConsumerWidget { radius: 50, child: IconButton( onPressed: () { - print('음성 출력: ${categoryIndex}'); + player.play(AssetSource('voice/voice_${categoryIndex + 1}.wav')); }, icon: const Icon(Icons.volume_up), color: Colors.white, diff --git a/lib/feature/voiceOutput/widget/VoiceOutputCategoryListView.dart b/lib/feature/voiceOutput/widget/VoiceOutputCategoryListView.dart index 693066b..efb6e7c 100644 --- a/lib/feature/voiceOutput/widget/VoiceOutputCategoryListView.dart +++ b/lib/feature/voiceOutput/widget/VoiceOutputCategoryListView.dart @@ -1,7 +1,10 @@ import 'package:blueberry_flutter_template/feature/voiceOutput/provider/CategoryIondexProvider.dart'; +import 'package:blueberry_flutter_template/gen/assets.gen.dart'; +import 'package:blueberry_flutter_template/utils/AppColors.dart'; import 'package:flutter/material.dart'; import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_svg/flutter_svg.dart'; class VoiceOutputCategoryListView extends ConsumerWidget { const VoiceOutputCategoryListView({super.key}); @@ -9,7 +12,8 @@ class VoiceOutputCategoryListView extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { // 카테고리 데이터를 리스트로 정의 - final categories = ['화내는 남편', '놀러온 남자', '데이트 준비중', '조직폭력배 남자']; + final categories = ['마중 나온 남자', '약간 다투는 남자', '혼자 이야기 하는 남자']; + final svgImages = [Assets.images.a1Smile, Assets.images.a2Angry, Assets.images.a3Funny]; return CarouselSlider( options: CarouselOptions( @@ -31,14 +35,11 @@ class VoiceOutputCategoryListView extends ConsumerWidget { flex: 2, // 여유 공간의 2/3 사용 child: CircleAvatar( radius: 80, // 원의 크기 조정 - backgroundColor: Colors.blue, // 원의 배경색 - child: Text( - category[0], // 카테고리 이름의 첫 글자 - style: const TextStyle( - color: Colors.white, // 텍스트 색상 - fontSize: 40, // 텍스트 크기 - fontWeight: FontWeight.bold, // 텍스트 두께 - ), + backgroundColor: primaryColor, // 원의 배경색 + child: SvgPicture.asset( + svgImages[categories.indexOf(category)], // SVG 이미지 표시 + width: 100, // SVG 이미지 너비 + height: 100, // SVG 이미지 높이 ), ), ), diff --git a/lib/feature/voiceOutput/widget/VoiceOutputDescriptionTextBox.dart b/lib/feature/voiceOutput/widget/VoiceOutputDescriptionTextBox.dart index cf14af4..58f4b02 100644 --- a/lib/feature/voiceOutput/widget/VoiceOutputDescriptionTextBox.dart +++ b/lib/feature/voiceOutput/widget/VoiceOutputDescriptionTextBox.dart @@ -12,12 +12,7 @@ class VoiceOutputDescriptionTextBox extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final categoryIndex = ref.watch(categoryIndexProvider); - final descriptionList = [ - '너는 항상 왜 그러는 거야?', - '늦었네..?', - '오늘도 수고 많았어~', - '뭐? 어떤 놈인데?', - ]; + final descriptionList = ['잘 갔다 왔어? 오늘 좀 늦었네?', '왔어? 우리 이야기 좀 하자', '아~ 진짜 드디어 왔네..']; return Padding( padding: const EdgeInsets.symmetric(horizontal: 20), diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index d678a71..cb4e3c1 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -98,6 +98,15 @@ class $AssetsIconGen { class $AssetsImagesGen { const $AssetsImagesGen(); + /// File path: assets/images/1_smile.svg + String get a1Smile => 'assets/images/1_smile.svg'; + + /// File path: assets/images/2_angry.svg + String get a2Angry => 'assets/images/2_angry.svg'; + + /// File path: assets/images/3_funny.svg + String get a3Funny => 'assets/images/3_funny.svg'; + /// File path: assets/images/phone.svg String get phone => 'assets/images/phone.svg'; @@ -111,7 +120,8 @@ class $AssetsImagesGen { String get smile => 'assets/images/smile.svg'; /// List of all assets - List get values => [phone, safehouse, sample, smile]; + List get values => + [a1Smile, a2Angry, a3Funny, phone, safehouse, sample, smile]; } class $AssetsLauncherIconGen { @@ -191,20 +201,17 @@ class $AssetsLottieGen { class $AssetsVoiceGen { const $AssetsVoiceGen(); - /// File path: assets/voice/voice_1.mp3 - String get voice1 => 'assets/voice/voice_1.mp3'; - - /// File path: assets/voice/voice_2.mp3 - String get voice2 => 'assets/voice/voice_2.mp3'; + /// File path: assets/voice/voice_1.wav + String get voice1 => 'assets/voice/voice_1.wav'; - /// File path: assets/voice/voice_3.mp3 - String get voice3 => 'assets/voice/voice_3.mp3'; + /// File path: assets/voice/voice_2.wav + String get voice2 => 'assets/voice/voice_2.wav'; - /// File path: assets/voice/voice_4.mp3 - String get voice4 => 'assets/voice/voice_4.mp3'; + /// File path: assets/voice/voice_3.wav + String get voice3 => 'assets/voice/voice_3.wav'; /// List of all assets - List get values => [voice1, voice2, voice3, voice4]; + List get values => [voice1, voice2, voice3]; } class Assets {