错误:类型不匹配:推断的类型是Map〈String,String>?,但在Flutter/Kotlin中使用MethodChannel时需要Map〈String,String>

mspsb9vt  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(191)

我正在实现MethodChannel,将值从Flutter端传递到KotlinAndroid本地代码。我遵循了这两个教程,它们的操作与我复制的完全相同:和
我在main.dart [Flutter]中的MethodChannel实现如下:

class _MyHomePageState extends State<MyHomePage> {
  static const frequencyChannel =
      MethodChannel('com.somdipdey.eoptomizer/frequency');
...
...
Future setFrequencyLevelCPU0Max() async {
    var sendMapMaxCPUFreq = <String, String>{
      "LITTLECPUMaxFreq": _LITTLECPUFreq.text.toString()
    };
    final String frequencyLevelCPU0Max = await frequencyChannel.invokeMethod(
        'setFrequencyLevelCPU0Max', sendMapMaxCPUFreq);
  }
}

在Kotlin端的MainActivity.kt中,MethodChannel实现的代码如下所示:

class MainActivity: FlutterActivity() {

    private val OPTIMIZATION_CHANNEL = "com.somdipdey.eoptomizer/frequency"
    private lateinit var channel: MethodChannel

    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, OPTIMIZATION_CHANNEL)
        channel.setMethodCallHandler { call, result ->
            if (call.method == "setFrequencyLevelCPU0Max" || call.method == "setFrequencyLevelCPU0Min" || call.method == "setFrequencyLevelCPU4Min") {
                var arguments = call.arguments() as Map<String,String>
                var LITTLECPUMaxFreq = arguments["LITTLECPUMaxFreq"].toString() ?: "1766400"
                setFrequencyLevelCPU0Max(LITTLECPUMaxFreq)
                result.success("Optimizing frequencies on CPU0")
            }
        }
    }
}

当我尝试构建/运行项目时,我在Kotlin端收到以下错误:
MainActivity.kt:(27,38):类型不匹配:推断的类型为Map〈String,String〉?但应为Map〈String,String〉
下列程式码行会发生这个错误:

var arguments = call.arguments() as Map<String,String>

如何解决此问题?

mwecs4sa

mwecs4sa1#

Kotlin编译器不能假设call.arguments()返回非空值,因此正确的类型是Map<String,String>?,这意味着您必须将其强制转换为该类型。下一行也需要更改,以处理可能为空的参数值:

var arguments = call.arguments() as Map<String,String>?
var LITTLECPUMaxFreq = arguments?.get("LITTLECPUMaxFreq")?.toString() ?: "1766400"

相关问题