参数类型字符串?无法分配给参数类型 'String'

Argument type String? can't be assigned to the parameter type 'String'

使用下面的代码,我收到以下错误消息:

The argument type 'String?' can't be assigned to the parameter type 'String'.dart(argument_type_not_assignable)

产生错误的代码部分(至少我认为是)如下:

class _HomePageState extends State<HomePage> {
  Map<String, dynamic> todo = {};
  TextEditingController _controller = new TextEditingController();

  @override
  void initState() {
    _loadData();
  }

  _loadData() async {
    SharedPreferences storage = await SharedPreferences.getInstance();

    if (storage.getString('todo') != null) {
      todo = jsonDecode(storage.getString('todo'));
    }
  }

非常感谢您的支持:)

storage.getString() return 的调用是 String?。尽管您检查过它没有 return null,但编译器没有好的方法知道当您再次调用它时它不会 return 有什么不同,因此仍然假设第二次调用return一个String?.

如果您知道某个值不会为空,则可以使用空断言 (!) 告诉编译器:

if (storage.getString('todo') != null) {
  todo = jsonDecode(storage.getString('todo')!);
}

或者更好的是,您可以通过将结果保存到局部变量并避免多次调用 storage.getString() 来避免这种情况:

var todoString = storage.getString('todo');
if (todoString != null) {
  // `todoString` is automatically promoted from `String?` to `String`.
  todo = jsonDecode(todoString);
}