#string #flutter #kotlin #flutter-method-channel
Вопрос:
У меня такая ошибка: «Несоответствие типа: предполагаемый тип-строка? но Струна была ожидаема»
Вот моя функция:
fun updateIcon(name: String) {
val context = MainActivity.appContext
val packageName: String = context.getPackageName()
val className: String = String.format("%s.%s", packageName, name)
val oldName: Array<ActivityInfo>? = getActivities()
val pm: PackageManager = context.getPackageManager()
pm.setComponentEnabledSetting(ComponentName(packageName, className), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)
for(activity: ActivityInfo in oldName.orEmpty()) {
if(!activity.name.equals(className)) {
pm.setComponentEnabledSetting(ComponentName(packageName, activity.name), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)
}
}
}
Вот где я его использую:
val channelChangeAppIcon = "flutter.native/channelChangeAppIcon"
MethodChannel(flutterEngine.dartExecutor, channelChangeAppIcon).setMethodCallHandler { call, result ->
if (call.method == "updateIcon") {
try {
val str: String = call.argument<String>("name")
updateIcon(str) // here
result.success(true)
} catch (e: Exception) {
e.printStackTrace()
}
} else {
result.notImplemented()
}
}
Заранее спасибо.
Ответ №1:
Прежде чем обращаться к аргументу « name
, сначала проверьте, существует ли он. это можно сделать следующим образом
if(call.hasArgument("name")){
val str: String = call.argument<String>("name")
updateIcon(str)
result.success(true)
}
Комментарии:
1. спасибо за ваш ответ, но ошибка все еще остается? Есть ли другое решение?
Ответ №2:
Пожалуйста, добавьте взрыв ! оператору предстоит решить.
val channelChangeAppIcon = "flutter.native/channelChangeAppIcon"
MethodChannel(flutterEngine.dartExecutor, channelChangeAppIcon).setMethodCallHandler { call, result ->
if (call.method! == "updateIcon") {
try {
val str: String = call.argument<String>("name")
updateIcon(str) // here
result.success(true)
} catch (e: Exception) {
e.printStackTrace()
}
} else {
result.notImplemented()
}
}
Оператор взрыва не делает ничего, кроме как говорит Дарту, что даже если мы определили некоторую переменную как тип, допускающий значение Null, она определенно не будет нулевой.
Обнуляемая безопасность и анализ потока Dart предназначены для того, чтобы облегчить жизнь разработчику, избегая ошибок во время выполнения и обнаруживая их во время компиляции.
Комментарии:
1. Спасибо за ваш ответ, но, к сожалению, ошибка все еще остается. Есть ли какое-то другое решение?