Flutter 使用Flatter将屏幕截图上载到Firebase
我想把截图上传到Firestore,但是我有一些空错误Flutter 使用Flatter将屏幕截图上载到Firebase,flutter,dart,google-cloud-firestore,Flutter,Dart,Google Cloud Firestore,我想把截图上传到Firestore,但是我有一些空错误 Future uploadImagetoFirebase() async { await screenshotController.capture().then((value) => (File image) { _screenshot = image; }); String fileName = _screenshot.path; Reference firebaseStorageRef = Fireb
Future uploadImagetoFirebase() async {
await screenshotController.capture().then((value) => (File image) {
_screenshot = image;
});
String fileName = _screenshot.path;
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/$fileName');
UploadTask uploadTask = firebaseStorageRef.putFile(_screenshot);
TaskSnapshot taskSnapshot = await uploadTask;
taskSnapshot.ref.getDownloadURL().then((value) => print('Done: $value'));
}
我用按钮这样称呼它:
onPressed: () async {
await uploadImagetoFirebase(); }
这是错误堆栈:
flutter ( 5143): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The getter 'path' was called on null.
E/flutter ( 5143): Receiver: null
E/flutter ( 5143): Tried calling: path
E/flutter ( 5143): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
E/flutter ( 5143): #1 _CartState.uploadImagetoFirebase
package:CWCFlutter/model/cart.dart:88
E/flutter ( 5143): <asynchronous suspension>
E/flutter ( 5143): #2 _CartState.build.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure>
package:CWCFlutter/model/cart.dart:310
E/flutter ( 5143): #3 _InkResponseState._handleTap
package:flutter/…/material/ink_well.dart:993
E/flutter ( 5143): #4 _InkResponseState.build.<anonymous closure>
package:flutter/…/material/ink_well.dart:1111
E/flutter ( 5143): #5 GestureRecognizer.invokeCallback
package:flutter/…/gestures/recognizer.dart:183
E/flutter ( 5143): #6 TapGestureRecognizer.handleTapUp
package:flutter/…/gestures/tap.dart:598
E/flutter ( 5143): #7 BaseTapGestureRecognizer._checkUp
package:flutter/…/gestures/tap.dart:287
E/flutter ( 5143): #8 BaseTapGestureRecognizer.handlePrimaryPointer
package:flutter/…/gestures/tap.dart:222
E/flutter ( 5143): #9 PrimaryPointerGestureRecognizer.handleEvent
package:flutter/…/gestures/recognizer.dart:476
E/flutter ( 5143): #10 PointerRouter._dispatch
package:flutter/…/gestures/pointer_router.dart:77
E/flutter ( 5143): #11 PointerRouter._dispatchEventToRoutes.<anonymous closure>
package:flutter/…/gestures/pointer_router.dart:122
E/flutter ( 5143): #12 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter ( 5143): #13 PointerRouter._dispatchEventToRoutes
package:flutter/…/gestures/pointer_router.dart:120
E/flutter ( 5143): #14 PointerRouter.route
package:flutter/…/gestures/pointer_router.dart:106
E/flutter ( 5143): #15 GestureBinding.handleEvent
package:flutter/…/gestures/binding.dart:358
E/flutter ( 5143): #16 GestureBinding.dispatchEvent
package:flutter/…/gestures/binding.dart:338
E/flutter ( 5143): #17 RendererBinding.dispatchEvent
package:flutter/…/rendering/binding.dart:267
E/flutter ( 5143): #18 GestureBinding._handlePointerEvent
package:flutter/…/gestures/binding.dart:295
E/flutter ( 5143): #19 GestureBinding._flushPointerEventQueue
package:flutter/…/gestures/binding.dart:240
E/flutter ( 5143): #20 GestureBinding._handlePointerDataPacket
package:flutter/…/gestures/binding.dart:213
E/flutter ( 5143): #21 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter ( 5143): #22 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 5143): #23 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 5143): #24 _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter ( 5143): #25 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
我提出的解决方案似乎很有效
Future<String> uploadImagetoFirebase2() async {
File img = await screenshotController.capture();
setState(() {
_screenshot = img;
});
//change filename not to be path, but something else short
String fileName = img.path;
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/$fileName');
UploadTask uploadTask = firebaseStorageRef.putFile(_screenshot);
TaskSnapshot taskSnapshot = (await uploadTask);
String uri = await taskSnapshot.ref.getDownloadURL();
print(uri);
return uri;
}
Future uploadImagetoFirebase2()异步{
文件img=await screenshotController.capture();
设置状态(){
_截图=img;
});
//更改文件名不是路径,而是其他简短的内容
字符串文件名=img.path;
参考firebaseStorageRef=
FirebaseStorage.instance.ref().child('orders/$fileName');
UploadTask UploadTask=firebaseStorageRef.putFile(_屏幕截图);
TaskSnapshot TaskSnapshot=(等待上载任务);
字符串uri=await taskSnapshot.ref.getDownloadURL();
打印(uri);
返回uri;
}
Flatter(5143):[ERROR:flatter/lib/ui/ui\u dart\u state.cc(177)]未处理的异常:NoSuchMethodError:对null调用了getter“path”。
E/颤振(5143):接收器:空
E/颤振(5143):尝试呼叫:路径
您的路径为空,
你可以用两种方法来解决这个问题
1。设置状态
Future uploadImagetoFirebase() async {
await screenshotController.capture().then((value) => (File image) {
setState(() {
_screenshot = image;
});
});
Future <File> uploadImagetoFirebase() async {
File myImage=await screenshotController.capture();
retun myImage
);
//get image onPress btn
onPressed: () async {
var myFile= await uploadImagetoFirebase();
//check if path is null using if ...
print(myFile.path);
// firebase function
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/${myFile.path}');
UploadTask uploadTask = firebaseStorageRef.putFile(myFile);
TaskSnapshot taskSnapshot = (await uploadTask);
String uri = await taskSnapshot.ref.getDownloadURL();
print(uri);
return uri;
}
//。。。你的fireabase上传功能
2来自未来的回报
Future uploadImagetoFirebase() async {
await screenshotController.capture().then((value) => (File image) {
setState(() {
_screenshot = image;
});
});
Future <File> uploadImagetoFirebase() async {
File myImage=await screenshotController.capture();
retun myImage
);
//get image onPress btn
onPressed: () async {
var myFile= await uploadImagetoFirebase();
//check if path is null using if ...
print(myFile.path);
// firebase function
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/${myFile.path}');
UploadTask uploadTask = firebaseStorageRef.putFile(myFile);
TaskSnapshot taskSnapshot = (await uploadTask);
String uri = await taskSnapshot.ref.getDownloadURL();
print(uri);
return uri;
}
Future uploadImagetoFirebase()异步{
File myImage=wait screenshotController.capture();
重新生成我的图像
);
//按btn获取图像
onPressed:()异步{
var myFile=等待上传ImageToFirebase();
//使用if。。。
打印(myFile.path);
//火基函数
参考firebaseStorageRef=
FirebaseStorage.instance.ref().child('orders/${myFile.path}');
UploadTask UploadTask=firebaseStorageRef.putFile(myFile);
TaskSnapshot TaskSnapshot=(等待上载任务);
字符串uri=await taskSnapshot.ref.getDownloadURL();
打印(uri);
返回uri;
}
Flatter(5143):[ERROR:flatter/lib/ui/ui\u dart\u state.cc(177)]未处理的异常:NoSuchMethodError:对null调用了getter“path”。
E/颤振(5143):接收器:空
E/颤振(5143):尝试呼叫:路径
您的路径为空,
你可以用两种方法来解决这个问题
1.设置状态
Future uploadImagetoFirebase() async {
await screenshotController.capture().then((value) => (File image) {
setState(() {
_screenshot = image;
});
});
Future <File> uploadImagetoFirebase() async {
File myImage=await screenshotController.capture();
retun myImage
);
//get image onPress btn
onPressed: () async {
var myFile= await uploadImagetoFirebase();
//check if path is null using if ...
print(myFile.path);
// firebase function
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/${myFile.path}');
UploadTask uploadTask = firebaseStorageRef.putFile(myFile);
TaskSnapshot taskSnapshot = (await uploadTask);
String uri = await taskSnapshot.ref.getDownloadURL();
print(uri);
return uri;
}
//…您的fireabase上载功能
2来自未来的回报
Future uploadImagetoFirebase() async {
await screenshotController.capture().then((value) => (File image) {
setState(() {
_screenshot = image;
});
});
Future <File> uploadImagetoFirebase() async {
File myImage=await screenshotController.capture();
retun myImage
);
//get image onPress btn
onPressed: () async {
var myFile= await uploadImagetoFirebase();
//check if path is null using if ...
print(myFile.path);
// firebase function
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/${myFile.path}');
UploadTask uploadTask = firebaseStorageRef.putFile(myFile);
TaskSnapshot taskSnapshot = (await uploadTask);
String uri = await taskSnapshot.ref.getDownloadURL();
print(uri);
return uri;
}
Future uploadImagetoFirebase()异步{
File myImage=wait screenshotController.capture();
重新生成我的图像
);
//按btn获取图像
onPressed:()异步{
var myFile=等待上传ImageToFirebase();
//使用if。。。
打印(myFile.path);
//火基函数
参考firebaseStorageRef=
FirebaseStorage.instance.ref().child('orders/${myFile.path}');
UploadTask UploadTask=firebaseStorageRef.putFile(myFile);
TaskSnapshot TaskSnapshot=(等待上载任务);
字符串uri=await taskSnapshot.ref.getDownloadURL();
打印(uri);
返回uri;
}
试试这个
Future<String> uploadImagetoFirebase() async {
File img = await screenshotController.capture();
String fileName = img.path;
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/$fileName');
UploadTask uploadTask = firebaseStorageRef.putFile(_screenshot);
TaskSnapshot taskSnapshot = (await uploadTask);
String uri = await taskSnapshot.ref.getDownloadURL();
print(uri);
return uri;
}
Future uploadImagetoFirebase()异步{
文件img=await screenshotController.capture();
字符串文件名=img.path;
参考firebaseStorageRef=
FirebaseStorage.instance.ref().child('orders/$fileName');
UploadTask UploadTask=firebaseStorageRef.putFile(_屏幕截图);
TaskSnapshot TaskSnapshot=(等待上载任务);
字符串uri=await taskSnapshot.ref.getDownloadURL();
打印(uri);
返回uri;
}
试试这个
Future<String> uploadImagetoFirebase() async {
File img = await screenshotController.capture();
String fileName = img.path;
Reference firebaseStorageRef =
FirebaseStorage.instance.ref().child('orders/$fileName');
UploadTask uploadTask = firebaseStorageRef.putFile(_screenshot);
TaskSnapshot taskSnapshot = (await uploadTask);
String uri = await taskSnapshot.ref.getDownloadURL();
print(uri);
return uri;
}
Future uploadImagetoFirebase()异步{
文件img=await screenshotController.capture();
字符串文件名=img.path;
参考firebaseStorageRef=
FirebaseStorage.instance.ref().child('orders/$fileName');
UploadTask UploadTask=firebaseStorageRef.putFile(_屏幕截图);
TaskSnapshot TaskSnapshot=(等待上载任务);
字符串uri=await taskSnapshot.ref.getDownloadURL();
打印(uri);
返回uri;
}
我已尝试设置状态,但由于某些原因出现了相同的错误,我将尝试您的第二个修复,但不确定它在我的上下文中如何工作,您是否有可能在第二个示例中添加一些代码?我已更新了我的答案。.尝试打印日志会的,谢谢!使用我的解决方案编辑了主要帖子,谢谢大家。我很高兴我尝试设置状态,但由于某些原因出现了相同的错误,我将尝试您的第二个修复,但不确定它在我的上下文中如何工作,您是否有可能向您的第二个示例中添加一些代码?我已更新了我的答案。尝试打印日志即可,非常感谢!使用我的解决方案编辑了主要帖子。谢谢大家。wait uplLoadTask.onComplete
这里有一个错误,说onComplete不是为类型UploadTask定义的,我想这是新的Firebase语法。我今天会试试,谢谢!捕获后我还需要设置状态吗?类似于设置状态{(\u screenshot=img)}
用我的解决方案编辑了主要帖子,非常感谢。等待上传任务。onComplete
这里有一个错误,说onComplete没有为类型定义上传任务
,我想这是新的Firebase语法。我今天就试用,谢谢!捕获后我还需要设置状态吗?类似于设置状态之类的东西{(_screenshot=img)}
用我的解决方案编辑了主要帖子,非常感谢。