Map 中的 Flutter 设置属性导致 UnsupportedError (Unsupported operation: read-only)

Gar*_*ett 4 dart flutter

我在状态类中有一个调用 setState 的方法,但是无论何时调用它都会抛出 aUnsupportedError (Unsupported operation: read-only)并且不提供其他信息。你能看出我的代码有什么问题可以让它这样做吗?我似乎这应该很简单......

Future _uploadFile(imageFile, imageFilename, String imageNumber) async {
    _user = await DBProvider.db.getUser();
    final FirebaseStorage _storage = FirebaseStorage(storageBucket: 'gs://circle-fc687.appspot.com');
    StorageReference _storageRef = _storage.ref().child('users').child('${_user['uid']}').child('$imageFilename');

    final Directory systemTempDir = Directory.systemTemp;

    final File file = await File('${systemTempDir.path}/$imageFile').create();

    StorageUploadTask _uploadTask = _storageRef.putFile(file);

    await _uploadTask.onComplete;
    print('Upload complete');
    String downloadLink = await _storageRef.getDownloadURL();

    setState(() {
      _user['imageOne'] = downloadLink;
    });
}
Run Code Online (Sandbox Code Playgroud)

编辑 调用setState不是问题,因为尝试_user['imageOne'] = downloadLink;从该方法中更新 Map 属性也会导致相同的错误。这个变量不是 final 或类似的东西,只是Map<String, dynamic>

Igo*_*din 11

通常 DB 返回不可变/不可修改的数据,因此您必须在更改之前克隆它:

final newUser = {
  ..._user,
  'imageOne': downloadLink
};
Run Code Online (Sandbox Code Playgroud)

或者

final newUser = Map.of(_user);
newUser['imageOne'] = downloadLink;
Run Code Online (Sandbox Code Playgroud)

尽管不可修改的映射继承自同一个 Map 类,但它具有不同的运行时类型,实际上不支持 []= 操作。