> Как во Flutter взаимодействовать с нативным кодом платформы для обмена данными (Flutter, Android)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: PashaPay
Стек: Flutter, Android
> Пример ответа
Для взаимодействия с нативным кодом во Flutter используется механизм Platform Channels (каналы платформы). Он позволяет передавать данные между Dart-кодом и нативным кодом Android (Kotlin/Java) или iOS (Swift/Objective-C).
Основные шаги:
- Создание канала на стороне Dart:
import 'package:flutter/services.dart'; const platform = MethodChannel('com.example.app/channel');
- Вызов нативного метода из Dart:
Future<String> getBatteryLevel() async { try { final result = await platform.invokeMethod('getBatteryLevel'); return result; } on PlatformException catch (e) { return "Failed: ${e.message}"; } }
- Реализация на стороне Android (в MainActivity.kt или отдельном классе):
class MainActivity: FlutterActivity() { private val CHANNEL = "com.example.app/channel" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL) .setMethodCallHandler { call, result -> if (call.method == "getBatteryLevel") { val batteryLevel = getBatteryLevel() if (batteryLevel != -1) { result.success(batteryLevel) } else { result.error("UNAVAILABLE", "Battery level not available", null) } } else { result.notImplemented() } } } private fun getBatteryLevel(): Int { val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) } }
Для передачи сложных данных (списки, карты) используйте стандартные типы, поддерживаемые каналом: String, int, double, bool, List, Map. Для потоковой передачи данных (например, сенсоры) применяйте EventChannel.
Важно: все вызовы через MethodChannel выполняются асинхронно и не блокируют UI. Для работы с нативными API, требующими контекст (например, Activity), используйте FlutterActivity или плагины.
> Похожие задачи по mobile
Какие методы жизненного цикла приложения во Flutter используются для отслеживания сворачивания и разворачивания
Как реализовать работу в фоне во Flutter для отправки данных при возобновлении связи
В чем плюсы и минусы Kotlin Multiplatform по сравнению с Flutter?
Flutter — Dart однопоточный или многопоточный язык
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью