【问题标题】:The argument type 'String' can't be assigned to the parameter type 'String'参数类型“String”不能分配给参数类型“String”
【发布时间】:2021-10-02 19:24:45
【问题描述】:

我在下面的代码中收到错误“无法将参数类型'String'分配给参数类型'String'”:

import 'dart:async';

abstract class SettingsBase {
  Future<String> getSetting<String>(String key);
  Future saveSetting<String>(String key, String value);
}

class InMemorySetting extends SettingsBase {
  final settings = <String, String>{};

  @override
  Future<String> getSetting<String>(String key) {
    if (settings.containsKey(key)) {
      return Future.value(settings[key] as String);
    }

    if (key == "theme") {
      return Future.value("light" as String);
    }

    throw UnimplementedError();
  }

  @override
  Future saveSetting<String>(String key, String value) {
    settings.putIfAbsent(key, () => value);
    return Future.value(true);
  }
}

我错过了什么?

【问题讨论】:

  • 几乎是真的。结果证明这是一个额外的通用论点

标签: flutter dart compiler-errors


【解决方案1】:

您正在使用覆盖 Dart 的 String 类型的泛型 String。

只需删除多余的字符串

getSetting<String>

【讨论】:

    【解决方案2】:

    事实证明,我在方法中添加了一个名为 String 的额外泛型类型参数。下面的代码有效。

    import 'dart:async';
    
    abstract class SettingsBase {
      Future<String> getSetting<String>(String key);
      Future saveSetting(String key, String value);
    }
    
    class InMemorySetting extends SettingsBase {
      final settings = <String, String>{};
    
      @override
      Future<String> getSetting<String>(String key) {
        if (settings.containsKey(key)) {
          return Future.value(settings[key] as String);
        }
    
        if (key == "theme") {
          return Future.value("light" as String);
        }
    
        throw UnimplementedError();
      }
    
      @override
      Future saveSetting(String key, String value) {
        settings.putIfAbsent(key, () => value);
        return Future.value(true);
      }
    }
    

    【讨论】:

    • Stackoverflow 社区这么快,我打开了一个回复表单,去喝茶,提交我的回复,已经有回复了 :)
    【解决方案3】:

    阅读一下generic 是什么。

    我不知道为什么,但是您在抽象类中为函数原型添加了一个泛型,名称为String。所以keyvalue参数的类型都是泛型类型,只是占位符名称为String

    删除那些泛型:

    import 'dart:async';
    
    abstract class SettingsBase {
      Future<String> getSetting(String key);
      Future saveSetting(String key, String value);
    }
    
    class InMemorySetting extends SettingsBase {
      final settings = <String, String>{};
    
      @override
      Future<String> getSetting(String key) {
        if (settings.containsKey(key)) {
          return Future.value(settings[key] as String);
        }
    
        if (key == "theme") {
          return Future.value("light" as String);
        }
    
        throw UnimplementedError();
      }
    
      @override
      Future saveSetting(String key, String value) {
        settings.putIfAbsent(key, () => value);
        return Future.value(true);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 2020-04-15
      • 2021-09-06
      • 2021-08-20
      • 1970-01-01
      • 2021-04-27
      • 2021-05-17
      • 2020-08-26
      • 2022-08-18
      相关资源
      最近更新 更多