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