我對顫動和創建以顯示保存在 Firebase 存盤中的網格下載檔案中的影像非常陌生。
獲取如下錯誤代碼,我想知道如何修復可空部分...
lib/artfolder.dart:53:21:錯誤:“Uint8List?”型別的值 不能分配給“Uint8List”型別的變數,因為“Uint8List?” 可以為空,而 'Uint8List' 不是。
- 'Uint8List' 來自 'dart:typed_data'。影像檔案 = 資料;^ lib/artfolder.dart:47:14: 錯誤:應該初始化欄位“imageFile”,因為它的型別“Uint8List”不允許為空。
- 'Uint8List' 來自 'dart:typed_data'。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());
}
}
uj5u.com熱心網友回復:
要將任何可空型別轉換為不可空型別,只需!在其后面寫一個。所以喜歡
imageFile = data!;
請注意,如果它碰巧是null.
相反,您也可以通過在型別后面寫 a 來將 imageFile 宣告為可為空?,我認為這是您真正想要的,因為您甚至可以在代碼中的某個位置檢查它是否為空,這對于不可為空的型別來說是不必要的:
Uint8List? imageFile;
uj5u.com熱心網友回復:
您只需將其宣告為可為空并檢查其是否為空。
步驟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,);
}
uj5u.com熱心網友回復:
您的data變數可能為空,但您定義imageFile為不可為空的變數,因此只需將您的定義更改為:
Uint8List? imageFile;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/513074.html
標籤:Google Cloud Collective 扑火力基地谷歌云火库可为空的uint8list
