如何解决错误:类型不匹配:推断的类型是字符串?但字符串是预期的

时间:2021-07-22 03:47:11

标签: 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()
            }
        }

提前致谢。

2 个答案:

答案 0 :(得分:0)

在访问参数“name”之前,首先检查它是否存在。这可以做为

if(call.hasArgument("name")){
   val str: String = call.argument<String>("name")
   updateIcon(str)
   result.success(true)
}

答案 1 :(得分:0)

请加一声!运算符来解决。

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()
        }
    }

Bang 操作符只是告诉 Dart,即使我们将某个变量定义为 Nullable 类型,它也绝对不会为 null。

Dart 的 Nullable 安全性和流程分析旨在通过避免运行时错误并在编译时捕获它们来简化开发人员的工作。

相关问题