我想要做的是从画廊/相机中挑选图像,然后将其存储在 Firebase 存储中。 单击相机/图库后,我可以选择图像,但是当我尝试上传它时,会显示以下错误。它也显示在模拟器的屏幕上。 错误和代码如下。
错误:
The following assertion was thrown building Uploader(dirty, state: _UploaderState#8962b):
A build function returned null.
The offending widget is: Uploader
Build functions must never return null.
To return an empty space that causes the building widget to fill available room, return "Container()". To return an empty space that takes as little room as possible, return "Container(width: 0.0, height: 0.0)".
The relevant error-causing widget was:
Uploader file:///Users/yassinezagliz/AndroidStudioProjects/dekra/lib/screens/auth/widgets/box.dart:94:13
When the exception was thrown, this was the stack:
#0 debugWidgetBuilderValue.<anonymous closure> (package:flutter/src/widgets/debug.dart:302:7)
#1 debugWidgetBuilderValue (package:flutter/src/widgets/debug.dart:323:4)
#2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4632:7)
#3 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
我的代码是:
import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:image_picker/image_picker.dart';
import 'package:flutter/foundation.dart';
class Box extends StatefulWidget {
@override
_BoxState createState() => _BoxState();
}
class _BoxState extends State<Box>{
File _imageFile;
//Select an image via gallery or camera
Future<void> _pickImage(ImageSource source) async {
// ignore: deprecated_member_use
File selected = await ImagePicker.pickImage(source: source);
setState(() {
_imageFile = selected;
});
}
//Remove image
void _clear() {
setState(() => _imageFile = null);
}
//Crop Image
Future<void> _cropImage() async {
File cropped = await ImageCropper.cropImage(
sourcePath: _imageFile.path,
//toolbarColor: Colors.purple,
//toolbarWidgetColor: Colors.white,
//toolbarTitle: 'Crop It'
);
setState(() {
_imageFile = cropped ?? _imageFile;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.pink.shade100,
appBar: new AppBar(
title: new Text("Box Photos"),
backgroundColor: Colors.pink.shade100,
),
bottomNavigationBar: BottomAppBar(
child: Row(
children: <Widget>[
IconButton(
icon: Icon(Icons.photo_camera),
onPressed: () => _pickImage(ImageSource.camera),
),
IconButton(
icon: Icon(Icons.photo_library),
onPressed: () => _pickImage(ImageSource.gallery),
),
],
),
),
body: ListView(
children: <Widget>[
if (_imageFile != null) ...[
Image.file(_imageFile),
Row(
children: <Widget>[
FlatButton(
onPressed: _cropImage,
child: Icon(Icons.crop)
),
FlatButton(
onPressed: _clear,
child: Icon(Icons.refresh)
),
],
),
被异常选中的行: Uploader(file: _imageFile) => box.dart:94:13
Uploader(file: _imageFile)
]
],
),
);
}
}
class Uploader extends StatefulWidget {
final File file;
Uploader({Key key, this.file}) : super(key: key);
createState() => _UploaderState();
}
class _UploaderState extends State<Uploader> {
final FirebaseStorage _storage =
// ignore: deprecated_member_use
FirebaseStorage(storageBucket: 'gs://dekra-c50a1.appspot.com');
UploadTask _uploadTask;
void _startUpload() {
String filePath = 'images/${DateTime.now()}.png';
setState(() {
_uploadTask = _storage.ref().child(filePath).putFile(widget.file);
});
}
@override
Widget build(BuildContext context) {
}
}
答案 0 :(得分:1)
根据错误消息,我认为问题在于 build
的 _UploaderState
方法没有返回小部件。你至少应该返回一个空的容器:
@override
Widget build(BuildContext context) {
return Container();
}