Flutter 原生能力集成指南

Flutter 原生能力集成指南

一、拍照与相册选取
  1. 推荐方案

    • 简单拍照/选图 :使用 image_picker 插件(调用系统相机或相册)。
    • 自定义相机界面 :使用 camera 插件(嵌入相机预览到 Flutter Widget)。
  2. 原生端配置

    • iOSios/Runner/Info.plist):

      xml 复制代码
      <key>NSCameraUsageDescription</key>
      <string>App需要您的同意,才能访问相机进行拍照</string>
      <key>NSPhotoLibraryUsageDescription</key>
      <string>App需要您的同意,才能访问相册选择图片</string>
      <key>NSMicrophoneUsageDescription</key>
      <string>App需要您的同意,才能访问麦克风录制视频</string>
    • Androidandroid/app/src/main/AndroidManifest.xml):

      xml 复制代码
      <!-- 相机权限 -->
      <uses-permission android:name="android.permission.CAMERA" />
      <!-- 存储权限(Android 11 及以下) -->
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

二、蓝牙能力(低功耗蓝牙 BLE)
  1. 推荐方案

    • 使用 flutter_blue_plus 插件(支持设备扫描、连接、特征值读写)。
  2. 原生端配置

    • iOSios/Runner/Info.plist):

      xml 复制代码
      <key>NSBluetoothAlwaysUsageDescription</key>
      <string>App需要使用蓝牙来连接您的智能设备</string>
      <key>NSBluetoothPeripheralUsageDescription</key>
      <string>App需要使用蓝牙来连接您的智能设备</string>
      <!-- 后台蓝牙连接 -->
      <key>UIBackgroundModes</key>
      <array>
          <string>bluetooth-central</string>
      </array>
    • Androidandroid/app/src/main/AndroidManifest.xml):

      xml 复制代码
      <!-- Android 11 及以下 -->
      <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
      <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
      <!-- Android 12 及以上 -->
      <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
      <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

三、手动实现原生能力(Platform Channel)

若需集成冷门硬件(如串口设备、工业打印机):

  1. Flutter(Dart)端

    dart 复制代码
    const platform = MethodChannel('com.example.app/my_custom_hardware');
    final String result = await platform.invokeMethod('openHardware');
  2. Android(Kotlin)端MainActivity.kt):

    kotlin 复制代码
    MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.app/my_custom_hardware").setMethodCallHandler { call, result ->
        if (call.method == "openHardware") {
            val success = myNativeHardwareCode() // 调用原生API
            result.success("Hardware Opened")
        } else {
            result.notImplemented()
        }
    }
  3. iOS(Swift)端AppDelegate.swift):

    swift 复制代码
    let channel = FlutterMethodChannel(name: "com.example.app/my_custom_hardware", binaryMessenger: controller.binaryMessenger)
    channel.setMethodCallHandler { call, result in
        if call.method == "openHardware" {
            // 调用iOS原生API
            result("Hardware Opened")
        } else {
            result(FlutterMethodNotImplemented)
        }
    }

四、其他依赖原生能力的场景
类别 功能 推荐插件
硬件与传感器 地理位置 geolocator, location
陀螺仪/加速度计 sensors_plus
生物识别(FaceID/TouchID) local_auth
NFC 读写 nfc_manager
系统级服务 推送通知 firebase_messaging
后台任务 workmanager
内购支付 in_app_purchase
深度链接(Deep Link) uni_links, go_router
多媒体 音视频播放 video_player, chewie
录音 record, flutter_sound

总结
  • 开发占比:80% Dart/Flutter UI 开发 + 20% 原生平台配置(权限、依赖、证书)。
  • 核心能力 :掌握 Platform Channel 是进阶高级 Flutter 开发者的关键。
  • 最佳实践:优先使用社区维护良好的插件,复杂场景需手动编写原生代码集成。
相关推荐
liulian09164 小时前
Flutter for OpenHarmony 跨平台开发:单位转换功能实战指南
flutter
千码君20164 小时前
Trae:一些关于flutter和 go前后端开发构建的分享
android·flutter·gradle·android-studio·trae·vibe code
maaath6 小时前
【maaath】Flutter for OpenHarmony 手表配饰应用实战开发
flutter·华为·harmonyos
maaath7 小时前
【maaath】Flutter for OpenHarmony 跨平台计算器应用开发实践
flutter·华为·harmonyos
maaath12 小时前
【maaath】Flutter for OpenHarmony 闹钟时钟应用开发实战
flutter·华为·harmonyos
maaath12 小时前
【maaath】Flutter for OpenHarmony 短信管理应用实战
flutter·华为·harmonyos
maaath13 小时前
【maaath】Flutter for OpenHarmony打造跨平台便签备忘录应用
flutter·华为·harmonyos
千码君201613 小时前
flutter:与Android Studio模拟器的调试分享
android·flutter
xmdy586614 小时前
Flutter+开源鸿蒙实战|智联邻里Day8 Lottie动画集成+url_launcher跳转拨号+个人中心完善+全局UI统一
flutter·开源·harmonyos
liulian09161 天前
Flutter for OpenHarmony 跨平台开发:颜色选择器功能实战指南
flutter