// 이곳에 쓴 내용은 앱 만들기라는 버킷리스트를 달성하기 위해 플러터를 공부하면서 정리하고 있는 내용입니다.
플러터에 대해 아는 것이 거의 없기 때문에 정리하면서 오류가 있을 수 있습니다.
오류를 발견하신 분은 댓글 남겨 주시면 감사하겠습니다.
안드로이드 네이티브와 통신하기
네이티브와 왜 통신을 해야 하는지 모르겠고, 내가 이 기능을 사용하게 될지는 모르겠으나 일단, 코트 타자 연습을 해보도록 하자.
-main.dart-
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'dart:io';
import 'package:flutter/services.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
if (Platform.isIOS) {
return const CupertinoApp(
home: CupertinoNativeApp(),
);
} else {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const NativeApp(),
);
}
}
}
class CupertinoNativeApp extends StatefulWidget {
const CupertinoNativeApp({super.key});
@override
State<StatefulWidget> createState() {
return _CupertinoNative();
}
}
class _CupertinoNative extends State<CupertinoNativeApp> {
@override
Widget build(BuildContext context) {
return const Scaffold();
}
}
class NativeApp extends StatefulWidget {
const NativeApp({super.key});
@override
State<StatefulWidget> createState() => _NativeAppState();
}
class _NativeAppState extends State<NativeApp> {
String _deviceInfo = '';
static const platform = MethodChannel('com.flutter.dev/info');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Native 통신 예제'),
),
body: Center(
child: Text(
_deviceInfo,
style: const TextStyle(fontSize: 30),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_getDeviceInfo();
},
child: const Icon(Icons.get_app),
),
);
}
Future<void> _getDeviceInfo() async {
String batteryLevel;
try {
final String result = await platform.invokeMethod('getDiviceInfo');
batteryLevel = 'Device info : $result';
} on PlatformException catch (e) {
batteryLevel = "Failed to get Device info: '$e.message}'.";
}
setState(() {
_deviceInfo = batteryLevel;
});
}
}
잘못된 점 없는 거 같은데 이렇게 뜬다.
파일-오픈에서 내가 만든 프로젝트 명 아래에 있는 안드로이드를 새로운 창에 실행시키란다. 한참을 여러 과정을 거친다. 책에서 그래들 어쩌고 하던데, gradle:~ 이런 메시지로 계속 작업을 한다. 꽤 오랜 시간을 거친다.
그런 다음 app/java/com.exaple.내가 만든 프로젝트명/MainActivity파일을 선택하라는데, 나는 BuildConfig밖에 없다. 코틀린 파일이라는데, java 파일이다. 잘 찾아보니 내 경우
app/kotlin+java/com.exaple.내가 만든 프로젝트명/MainActivity파일이었다.
-MainActivity.kt-
package com.example.doit12
import android.os.Build
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
class MainActivity: FlutterActivity() {
private val CHANNEL = "com.flutter.dev/info"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
.setMethodCallHandler { call, result->
if (call.method == "getDeviceInfo") {
val deviceInfo = getDeviceInfo()
result.success(deviceInfo)
}
}
}
private fun getDeviceInfo(): String {
val sb = StringBuffer()
sb.append(Build.DEVICE + "\n")
sb.append(Build.BRAND + "\n")
sb.append(Build.MODEL + "\n")
return sb.toString()
}
}
깃허브의 코드를 따라하고 싶은데 뭘 따라 해야 할지 모르겠다.
깃허브 메인 코드를 붙여 넣기해서 같은 결과라서 내 타이핑은 잘 된 것으로..^^;;
MainActivity.kt여기 코드는 붙여 넣기 안 해 봤다. 책에서보다 더 많은 내용이 있는 거 보면 이건 다른 내용이 포함되어 있는 거 같기에.. 이번 장은 여기서 마무리하기로..
'버킷리스트 > 앱 만들기' 카테고리의 다른 글
오공완 (with Do it! 플러터 앱 프로그램밍) #13_2 (1) | 2024.05.16 |
---|---|
오공완 (with Do it! 플러터 앱 프로그램밍) #13_1 (0) | 2024.05.15 |
오공완 (with Do it! 플러터 앱 프로그램밍) #11 (0) | 2024.05.13 |
오공완 (with Do it! 플러터 앱 프로그램밍) #10_1 (0) | 2024.05.12 |
오공완 (with Do it! 플러터 앱 프로그램밍) #9_2 (0) | 2024.05.12 |