首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修正颤振Uint8List中的可空误差

如何修正颤振Uint8List中的可空误差
EN

Stack Overflow用户
提问于 2022-10-10 11:00:08
回答 3查看 95关注 0票数 0

我是非常新鲜的,创造和挑战,以显示图像在网格下载文件保存在防火墙存储。

获得下面的错误代码,我想知道如何修复可空部分.

type :53:21: Error:类型为“Uint8List?”因为'Uint8List?‘不能分配给'Uint8List’类型的变量?是可空的,而'Uint8List‘则不是。

  • 'Uint8List‘来自于'dart:typed_data’。null.
  • 'Uint8List‘= imageFile;^ lib/artfolder.dart:47:14:错误:字段'imageFile’应该被初始化,因为它的类型'Uint8List‘不允许从’dart:imageFile_data‘。Uint8List imageFile;^

这是我的密码;

代码语言:javascript
复制
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());
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-10 11:18:55

您只需将其声明为可空,并检查它是否为空。

步骤1:

代码语言:javascript
复制
Uint8List?  imageFile;

第2步:

代码语言:javascript
复制
if(data!=null){
   imageFile = data;
}

第3步:

代码语言:javascript
复制
 if(imageFile == null) {
          return Center(child: Text("Nodata"));
        } else {
          return Image.memory(imageFile!,fit: BoxFit.cover,);
        }
票数 0
EN

Stack Overflow用户

发布于 2022-10-10 11:09:18

若要将任何可空类型转换为非空类型,只需在其后面编写一个!。所以就像

代码语言:javascript
复制
imageFile = data!;

但是请注意,如果它碰巧是null,则会导致异常。

相反,您也可以通过在类型后面编写一个?来声明它为空,我认为这正是您真正想要的,因为您甚至可以在代码中的某个点检查它是否为空,这对于非空类型来说是不必要的:

代码语言:javascript
复制
Uint8List? imageFile;
票数 0
EN

Stack Overflow用户

发布于 2022-10-10 11:20:03

您的data变量可能为null,但您将imageFile定义为非空变量,因此只需将定义更改为:

代码语言:javascript
复制
Uint8List? imageFile;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74013866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档