Flutter插件Plugin.kt文件无法识别flutter库报红

在Android Studio(AS)中使用Flutter插件时遇到了编译错误,主要是因为AS无法识别Flutter类。解决方法包括:在local.properties文件中添加Flutter SDK路径,然后在build.gradle文件中引入Flutter SDK的相关依赖并同步项目。通过这些步骤,可以成功解决AS中Flutter插件的编译问题。

1.问题:最近要使用Flutter插件,但是AS的尿性,插件模块自带的xxxxPlugin.kt打开后就报红,出现无法识别flutter中带的各种类,使用Android模式打开也是如此。
2.解决如下:
(1)在local.properties文件中添加你的flutter sdk目录:

flutter.sdk=F:\\flutter\\flutter

(2)在build.gradle文件中添加:

//最外层
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}
//获取flutter的sdk路径
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

//dependencies 中
    compileOnly files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar")
    compileOnly 'androidx.annotation:annotation:1.1.0'

(3)syn gradle

Flutter 项目中,若需获取 Android 设备的 SDK 版本号,使用 `Platform.version.sdkInt` 的写法是不正确的。Flutter 并未直接提供 `Platform.version.sdkInt` 这种方式用于获取 Android SDK 版本号,开发者应通过 `dart:io` 中的 `Platform` 类或调用原生 Android 代码来获取系统版本信息。 若需获取 Android SDK 版本号,可以通过调用原生 Android API 来实现。在 Flutter 项目中,可以使用 `MethodChannel` 与 Android 原生代码通信,从而获取 `Build.VERSION.SDK_INT` 的值。以下是实现方式: ### 在 Flutter 中获取 Android SDK 版本号的正确方式 #### Android 端代码(Kotlin) 在 `android/app/src/main/kotlin/.../MainActivity.kt` 中添加以下代码: ```kotlin import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel import android.os.Build class MainActivity: FlutterActivity() { private val CHANNEL = "device_info" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -> if (call.method == "getSdkInt") { val sdkInt = Build.VERSION.SDK_INT result.success(sdkInt) } else { result.notImplemented() } } } } ``` #### Flutter 端代码(Dart) 在 Flutter 项目中调用该方法: ```dart import 'package:flutter/services.dart'; class DeviceInfo { static const platform = MethodChannel('device_info'); static Future<int> getSdkInt() async { try { final int sdkInt = await platform.invokeMethod('getSdkInt'); return sdkInt; } on PlatformException catch (e) { throw Exception("Failed to get SDK version: '${e.message}'."); } } } ``` #### 使用示例 ```dart void checkSdkVersion() async { int sdkVersion = await DeviceInfo.getSdkInt(); print("Android SDK Version: $sdkVersion"); } ``` 上述方式通过 `Build.VERSION.SDK_INT` 获取 Android SDK 版本号,确保了在 Flutter 项目中与原生 Android 代码的一致性,并避免了 `Platform.version.sdkInt` 这种非标准写法所带来的错误[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值