我在状态类中有一个调用 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 类,但它具有不同的运行时类型,实际上不支持 []= 操作。
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |