[flutter] cupertino_icons를 사용하여 아이콘에 음향 효과 설정하기

이번에는 Flutter 앱에서 아이콘에 음향 효과를 설정하는 방법을 알아보겠습니다. Flutter는 많은 아이콘을 제공하는데, 이 중 cupertino_icons 패키지를 사용하여 iOS 스타일의 아이콘을 쉽게 사용할 수 있습니다.

cupertino_icons 패키지 추가하기

먼저 pubspec.yaml 파일을 열고 dependencies 섹션에 아래 코드를 추가해주세요.

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2

그리고 packages get 명령어를 사용하여 패키지를 다운로드하거나, 터미널에서 다음 명령어를 실행해주세요.

flutter pub get

이제 cupertino_icons 패키지를 사용할 준비가 되었습니다.

아이콘에 음향 효과 설정하기

아이콘에 음향 효과를 설정하려면 IconButton 위젯을 사용하면 됩니다. 예를 들어, 아이콘을 눌렀을 때 소리가 나도록 하려면 다음과 같이 코드를 작성할 수 있습니다.

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Icon Sound',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final MethodChannel _channel = MethodChannel('icon_sound_channel');

  void _playSound() {
    _channel.invokeMethod('playSound');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Icon Sound Example'),
      ),
      body: Center(
        child: IconButton(
          icon: Icon(CupertinoIcons.volume_up),
          onPressed: _playSound,
        ),
      ),
    );
  }
}

위 코드에서는 MethodChannel을 사용하여 플랫폼의 네이티브 코드와 통신하고 있습니다. 따라서 네이티브 코드에서 소리를 재생하는 로직을 구현해야 합니다.

네이티브 코드에서 소리 재생하기

먼저 네이티브 코드에서 소리를 재생하기 위해 iOS와 Android를 각각 처리해야 합니다.

iOS

iOS에서는 AVAudioPlayer를 사용하여 소리를 재생할 수 있습니다. 아래는 한 줄의 소스 코드로 소리를 재생하는 방법입니다.

import AVFoundation

@objc class IconSoundPlugin: NSObject, FlutterPlugin {
    static func register(with registrar: FlutterPluginRegistrar) {
        let channel = FlutterMethodChannel(name: "icon_sound_channel", binaryMessenger: registrar.messenger())
        let instance = IconSoundPlugin()
        registrar.addMethodCallDelegate(instance, channel: channel)
    }

    func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
        if (call.method == "playSound") {
            if let soundPath = Bundle.main.path(forResource: "sound", ofType: "wav") {
                let soundUrl = URL(fileURLWithPath: soundPath)
                do {
                    let audioPlayer = try AVAudioPlayer(contentsOf: soundUrl)
                    audioPlayer.prepareToPlay()
                    audioPlayer.play()
                } catch {
                    print("Failed to play sound")
                }
            }
        }
    }
}

위 소스 코드를 Flutter 프로젝트에 추가한 후, iOS 앱을 실행하면 아이콘을 눌렀을 때 sound.wav 파일이 재생됩니다.

Android

Android에서는 MediaPlayer를 사용하여 소리를 재생할 수 있습니다. 아래는 한 줄의 소스 코드로 소리를 재생하는 방법입니다.

import android.media.MediaPlayer;

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "icon_sound_channel";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);

        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
                (call, result) -> {
                    if (call.method.equals("playSound")) {
                        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.sound);
                        mediaPlayer.setOnCompletionListener(mp -> {
                            mp.reset();
                            mp.release();
                        });
                        mediaPlayer.start();
                    }
                }
        );
    }
}

위 소스 코드를 Flutter 프로젝트에 추가한 후, Android 앱을 실행하면 아이콘을 눌렀을 때 sound.wav 파일이 재생됩니다.


이렇게 Flutter 앱에서는 cupertino_icons 패키지와 네이티브 코드를 사용하여 아이콘에 음향 효과를 설정할 수 있습니다. 음향 효과를 사용하면 사용자에게 더 시각적으로 매력적인 앱을 제공할 수 있습니다.

참고 문서: