Ответ
PDD (Platform-Dependent Development) во Flutter — это подход, при котором мы пишем платформо-специфичный код для доступа к нативным API или компонентам, которые не абстрагированы фреймворком. Это позволяет сохранять преимущества кроссплатформенности для UI-логики, но при необходимости использовать всю мощь iOS и Android.
Основные инструменты для PDD во Flutter:
MethodChannel/EventChannel: Для вызова нативных методов и получения потоковых событий.PlatformView(UiKitView/AndroidView): Для встраивания нативных виджетов (например, карты Google/Apple, WebView) прямо в дерево виджетов Flutter.- Платформо-специфичный код в папках
android/иios/: МодификацияMainActivity.kt,AppDelegate.swiftи т.д.
Пример: Создание собственного плагина для вибрации через MethodChannel.
Dart-сторона (Flutter):
import 'package:flutter/services.dart';
class VibrationPlugin {
static const platform = MethodChannel('com.example/vibration');
static Future<void> vibrate(Duration duration) async {
try {
await platform.invokeMethod('vibrate', duration.inMilliseconds);
} on PlatformException catch (e) {
print("Не удалось вызвать вибрацию: ${e.message}");
}
}
}
Android-сторона (Kotlin в MainActivity.kt):
import android.os.Vibrator
import android.os.VibrationEffect
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.example/vibration"
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, channel).setMethodCallHandler {
call, result ->
if (call.method == "vibrate") {
val ms = call.arguments as Long
val vibrator = getSystemService(Vibrator::class.java)
vibrator.vibrate(VibrationEffect.createOneShot(ms, VibrationEffect.DEFAULT_AMPLITUDE))
result.success(null)
} else {
result.notImplemented()
}
}
}
}
Когда это нужно:
- Интеграция со специфичными сервисами (Apple Pay, Google Play Billing).
- Использование аппаратных датчиков, не охваченных стандартными плагинами.
- Встраивание сложных нативных UI-компонентов. Сила Flutter в гибридном подходе: 90% кода — кроссплатформенный Dart, 10% — PDD для критически важной нативной функциональности.