【发布时间】:2021-08-18 05:18:24
【问题描述】:
我正在开发一个从 Firebase 存储中获取图像到列表视图小部件的应用。从 Firebase 加载图像没有问题,但在从 firebase 加载图像之前出现错误,称为“LateInitializationError: Field 'imageFile' has not been initialized.”。有什么解决方案吗?
class GuidePage extends StatefulWidget {
@override
_GuidePageState createState() => _GuidePageState();
}
class _GuidePageState extends State<GuidePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("images/b.png"),
fit: BoxFit.fill,
),
),
child: SafeArea(
child: InteractiveViewer(
child: Container(
margin: EdgeInsets.symmetric(vertical: 20.0),
child: ListView.builder(
itemCount: getIndex(),
itemBuilder: (context, index) {
return ImageGridItem(index + 1); //image return
})),
),
),
),
),
);
}
getIndex() {
if (isEnglish) {
return 208;
} else {
return 259;
}
}
}
class ImageGridItem extends StatefulWidget {
int index = 1;
ImageGridItem(int i) {
this.index = i;
}
@override
_ImageGridItemState createState() => _ImageGridItemState();
}
class _ImageGridItemState extends State<ImageGridItem> {
late Uint8List imageFile;
Reference photosReference =
FirebaseStorage.instance.ref().child(getNameChild1());
getImage() {
if (!imageData.containsKey(widget.index)) {
photosReference
.child(getNameChild2())
.getData(2 * 1024 * 1024)
.then((data) {
this.setState(() {
imageFile = data!;
});
imageData.putIfAbsent(widget.index, () {
requestedIndexes.add(widget.index);
return imageFile;
});
}).catchError((error) {
print(error);
});
} else {
imageFile = imageData[widget.index]!;
}
}
@override
void initState() {
super.initState();
if (!imageData.containsKey(widget.index)) {
getImage();
} else {
this.setState(() {
imageFile = imageData[widget.index]!;
});
}
}
@override
Widget build(BuildContext context) {
if (imageFile == null) {
CircularProgressIndicator();
return Text("Empty");
} else {
return Image.memory(
imageFile,
fit: BoxFit.cover,
);
}
}
String CreateFinalIndex(int index) {
int index_length = widget.index.toString().length;
String zero_number = "0" * ((3 - index_length));
String Final_Index = (zero_number + widget.index.toString());
return Final_Index;
}
static getNameChild1() {
if (isEnglish) {
return "Guide";
} else {
return "GuideS";
}
}
String getNameChild2() {
String Final_Index = CreateFinalIndex(widget.index);
if (isEnglish) {
return "eGr12TG ICT-$Final_Index.jpg";
} else {
return "sGr12TG ICT-$Final_Index.jpg";
}
}
}
【问题讨论】:
标签: android firebase flutter dart runtime-error