需要一个“Widget”类型的值,但得到一个“Null”类型的值

Posted

技术标签:

【中文标题】需要一个“Widget”类型的值,但得到一个“Null”类型的值【英文标题】:Expected a value of type 'Widget', but got one of type 'Null' 【发布时间】:2021-12-04 13:03:30 【问题描述】:

我正在学习响应式网络,但我陷入了某种错误,例如

不知道如何解决这个错误,我尝试了很多,但我认为没有人的帮助我无法解决这个问题。

import 'package:flutter/material.dart';

const int largeScreenSize = 1366;
const int mediumScreenSize = 768;
const int smallScreenSize = 360;
const int customScreenSize = 1100;

class Responsiveness extends StatelessWidget 
   final Widget? largeScreen;
   final Widget? mediumScreen;
   final Widget? smallScreen;

   const Responsiveness(
    this.largeScreen,
    this.mediumScreen,
    this.smallScreen,
  );

   @override
   Widget build(BuildContext context) 
     return LayoutBuilder(builder: (context, constraints) 
       double _width = constraints.maxWidth;
        if (_width >= largeScreenSize) 
         return largeScreen as Widget;
        else if (_width >= mediumScreenSize && _width < largeScreenSize) 
         return mediumScreen ?? largeScreen as Widget;
        else 
         return smallScreen ?? largeScreen as Widget;
       
     );
   
 

【问题讨论】:

你是给构造函数提供这三个字段吗? 【参考方案1】:

largeScreenmediumScreensmallScreen 都具有 Widget? 类型,意思是:“Widgetnull

当你返回largeScreen as Widget时,如果largeScreen为空,你会得到一个错误,因为null不是Widget的有效值(就像123 as String会抛出,因为类型不是可分配)。

查看您的代码,如果所有 3 个变量都是 null,您最终会尝试从 LayoutBuilder 参数返回 null,这始终是一个错误,因为它返回一个非空 @ 987654335@.

确保考虑到所有这些都是null 的情况,或者确保它们永远不会同时为空(可能使用assert 语句)。

【讨论】:

谢谢你的工作,我明白你在说什么。

以上是关于需要一个“Widget”类型的值,但得到一个“Null”类型的值的主要内容,如果未能解决你的问题,请参考以下文章

需要一个 'String' 类型的值,但得到一个 'Null' 类型的值。这是一个电子商务应用程序

颤振错误:需要一个“String”类型的值,但得到一个“int”类型的值

需要一个“String”类型的值,但得到一个“Null”类型的值

Flutter web:需要一个“SkDeletable”类型的值,但得到一个“Null”类型的值

需要一个“List<dynamic>”类型的值,但得到一个“_JsonMap”类型的值

如何修复 Flutter 需要一个“Map<String, dynamic>”类型的值,但得到一个“List<dynamic>”类型的值