Flutter 贴图中的颤振设置属性导致不支持的错误(不支持的操作:只读)

Flutter 贴图中的颤振设置属性导致不支持的错误(不支持的操作:只读),flutter,dart,Flutter,Dart,我在state类中有一个调用setState的方法,但是每当调用它时,它都会抛出一个UnsupportedError(不支持的操作:只读),并且不提供其他信息。你能看到我的代码有什么问题吗?我觉得这应该很简单 Future _uploadFile(imageFile, imageFilename, String imageNumber) async { _user = await DBProvider.db.getUser(); final FirebaseStorage _st

我在state类中有一个调用setState的方法,但是每当调用它时,它都会抛出一个
UnsupportedError(不支持的操作:只读)
,并且不提供其他信息。你能看到我的代码有什么问题吗?我觉得这应该很简单

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;
    });
}
编辑 调用
setState
不是问题,因为尝试更新映射属性
\u user['imageOne']=downloadLink也会导致相同的错误。此变量不是最终变量或类似变量,如果:

setState(() {
      _user['imageOne'] = downloadLink;
    });
是导致错误的原因,可能是因为
\u user
是不可变的。我假设
DBProvider.db.getUser()
返回一些不可变的内容,要更新其中一个属性,需要创建对象的显式副本并设置新值


我不知道您用于DB访问的软件包,但在
flatter\u moor
中,例如,您在来自DB的对象上获得了一个
copyWith
方法,您可以在其中设置新值。

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

final newUser={
…用户,
“imageOne”:下载链接
};


虽然一个不可修改的映射是从同一个映射类继承的,但它有一个不同的运行时类型,实际上不支持[]=operation。

我来试一试,但是我有一个TextField小部件,可以从
onChanged
回调中对同一个
\u用户
进行更改,这就是为什么我感到困惑的原因
final newUser = Map.of(_user);
newUser['imageOne'] = downloadLink;