我是非常新鲜的,创造和挑战,以显示图像在网格下载文件保存在防火墙存储。
获得下面的错误代码,我想知道如何修复可空部分.
type :53:21: Error:类型为“Uint8List?”因为'Uint8List?‘不能分配给'Uint8List’类型的变量?是可空的,而'Uint8List‘则不是。
这是我的密码;
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'dart:typed_data';
import 'package:cloud_firestore/cloud_firestore.dart';
class Artfolder extends StatelessWidget {
User user;
Artfolder({required this.user, Key? key}) : super(key: key);
Widget makeImageGrid() {
return GridView.builder(
itemCount: 5,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3),
itemBuilder: (context, index) {
return ImageGridItem(index);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("ART Folder"),
automaticallyImplyLeading: false,
),
body: Container(
child: makeImageGrid(),
),
);
}
}
class ImageGridItem extends StatefulWidget {
int? _index;
ImageGridItem(int index){
this._index = index;
}
@override
_ImageGridItemState createState() => _ImageGridItemState();
}
class _ImageGridItemState extends State<ImageGridItem>{
Uint8List imageFile;
Reference photosReference = FirebaseStorage.instance.ref().child("photo");
getImage(){
int MAX_SIZE = 10*1024*1024;
photosReference.child("Image_${widget._index}.jpeg").getData(MAX_SIZE).then((data) {
this.setState(() {
imageFile = data;
});
}).catchError((error){
});
}
Widget decideGridTileWidget(){
if(imageFile == null) {
return Center(child: Text("Nodata"));
} else {
return Image.memory(imageFile,fit: BoxFit.cover,);
}
}
@override
void initState(){
super.initState();
getImage();
}
@override
Widget build(BuildContext context){
return GridTile(child:decideGridTileWidget());
}
}发布于 2022-10-10 11:18:55
您只需将其声明为可空,并检查它是否为空。
步骤1:
Uint8List? imageFile;第2步:
if(data!=null){
imageFile = data;
}第3步:
if(imageFile == null) {
return Center(child: Text("Nodata"));
} else {
return Image.memory(imageFile!,fit: BoxFit.cover,);
}发布于 2022-10-10 11:09:18
若要将任何可空类型转换为非空类型,只需在其后面编写一个!。所以就像
imageFile = data!;但是请注意,如果它碰巧是null,则会导致异常。
相反,您也可以通过在类型后面编写一个?来声明它为空,我认为这正是您真正想要的,因为您甚至可以在代码中的某个点检查它是否为空,这对于非空类型来说是不必要的:
Uint8List? imageFile;发布于 2022-10-10 11:20:03
您的data变量可能为null,但您将imageFile定义为非空变量,因此只需将定义更改为:
Uint8List? imageFile;https://stackoverflow.com/questions/74013866
复制相似问题