Flutter & Dart

[Flutter] 플랫폼 별 코드 작성

코딩하는후운 2022. 10. 24. 08:58
반응형

[Flutter] 플랫폼 별 코드 작성

Flutter의 플랫폼 별 API는 코드 생성에 의존하고 있지 않고, 유연한 메시지 전달 스타일을 사용합니다.
-앱의 Flutter부분은 플랫폼 채널을 통해서 iOS나 Android가 될 수 있는 호스트에게 메시지를 보냅니다.
-호스트는 플랫폼 채널에서 메시지를 받습니다. 그리고 플랫폼 네이티브 언어를 사용해서 몇 개의 플랫폼 별 APIs를 호출하고,
Flutter부분인 클라이언트에게 응답을 보냅니다.

참고: Flutter가 Dart와 메시지를 비동기로 주고 받음에도 불구하고, 채널 메서드를 호출할 때,
메서드를 플랫폼의 메인 스레드에서 호출해야 합니다.


클라이언트 단에서는, MethodChannel이 메시지를 그에 상응하는 메서드로 보낼 수 있도록 해줍니다.
플랫폼 단에서는, Android는 MethodChannel, iOS는 FlutterMethodChannel들이 메시지를 받는 것과
응답을 가능하게 합니다.


1.채널을 생성합니다. 배터리 레벨을 반환하는 플랫폼 메서드를 가지고 있는 MethodChannel을 사용할 것입니다.

채널의 클라이언트와 호스트는 채널 생성자를 통해 전달된 채널 이름으로 연결됩니다.
하나의 앱에서 사용하는 모든 채널 이름은 유일해야 하기 때문에, 유일한 도메인 접두사를 사용해서 채널 이름 앞에 추가하세요.

class _MyHomePageState extends State<MyHomePage>{
  static const platform = const MethodChannel('samples.flutter.dev/battery');
}


다음으로, getBatteryLevl구분자를 통해 특정 메서드를 지정해서 메서드 채널에서 메서드를 실행합니다.
호출은 실패할 수도 있습니다. 예를 들어 특정 플랫폼이 해당 API를 지원하지 않는 경우(시뮬레이터에서의 실행 등)가 있습니다.
그러므로 invokeMethod 호출을 try-catch문으로 감싸주세요.

반환된 결과를 setState함수 안에서 사용해서 _batteryLevel변수가 들고있는 UI상태를 업데이트 하세요.
//배터리 레벨을 가져옵니다.

String _batteryLevel = 'Unknown battery level.';

Future<void> _getBatteryLevel() async{
  String batteryLevel;
  try{
    final int result = await platform.invokeMethod('getBatteryLevel');
    batteryLevel = 'Battery level at $result % .';
  } on PlatformException catch(e){
    batteryLevel = 'Failed to get battery level: '${e.message}'.";
  }

  setState((){
    _batteryLevel = batteryLevel;
  });
}

 

참조 :

https://flutter-ko.dev/docs/development/platform-integration/platform-channels

반응형