我正在实现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>
如何解决此问题?
1条答案
按热度按时间mwecs4sa1#
Kotlin编译器不能假设
call.arguments()
返回非空值,因此正确的类型是Map<String,String>?
,这意味着您必须将其强制转换为该类型。下一行也需要更改,以处理可能为空的参数值: