需要一个“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】:largeScreen
、mediumScreen
和 smallScreen
都具有 Widget?
类型,意思是:“Widget
或 null
。
当你返回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>”类型的值