flutter - 局部变量'basename'在声明之前不能被引用/Flutter
问题描述
当我查看基本名称的官方文档时,我遇到了基本名称的问题,在我看来一切都“正常”。但它仍然在basename上显示错误。感谢您的时间!
错误 basename 错误:表达式不计算为函数,因此无法调用局部变量“basename”在声明之前无法引用。
代码片段
Future uploadImageToFirebase(BuildContext context) async {
String basename = basename(_imageFile.path);
StorageReference firebaseStorageRef =
FirebaseStorage.instance.ref().child('uploads/$basename');
StorageUploadTask uploadTask = firebaseStorageRef.putFile(_imageFile);
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
taskSnapshot.ref.getDownloadURL().then(
(value) => print("Done: $value"),
);
}
上下文部分代码片段
void addToFb() async {
final User user = FirebaseAuth.instance.currentUser;
...
dbRef.add({
...
}).then((res) {
isLoading = false;
Navigator.pushReplacement(
context, <--- HERE I GOT AND ERROR
MaterialPageRoute(builder: (context) => Home(uid: widget.uid)),
);
}).catchError(
(err) {
showDialog(
context: context, <--- HERE I GOT AND ERROR
builder: (BuildContext context) {
return AlertDialog(
title: Text("Error"),
content: Text(err.message),
actions: [
...
],
);
},
...
}
解决方案
String basename = basename(_imageFile.path);
你用的是同一个名字。将变量的名称更改为其他名称,例如String _basename = basename(_imageFile.path);
你所做的基本上是“通过调用'basename'函数为变量'basename'设置一个值”。你能看到名字冲突吗?
推荐阅读
- amazon-redshift - Amazon Redshift 中 LISTAGG 函数的替代方法
- dialogflow-es - 如何使用 facebook messenger 进行 Dialogflow 集成?
- reactjs - 通过放大存储reactjs在S3上上传错误
- node.js - NodeJS - 内存不足
- javascript - 有没有办法改变点击事件的函数名?
- sql - SQL 连接和计算行数(计算表中的人)
- mysql - 如何在 che.openshift.io 上托管的 eclipse che 上使用数据库获取持久工作区
- mongodb - MongoDB中的项目字段,我不知道中间字段名称
- git - 为什么我删除了冲突文件,但仍然无法从远程 git pull?
- spring - 使用 JooQ 获取一对多关联