【发布时间】:2021-09-11 00:47:29
【问题描述】:
我有这段代码,它给了我很多空安全错误:
import 'package:flutter/material.dart';
const int largeScreenSize = 1366;
const int mediumScreenSize = 768;
const int smallScreenSize = 360;
const int customScreenSize = 1100;
class ResponsiveWidget extends StatelessWidget {
final Widget? largeScreen;
final Widget? mediumScreen;
final Widget? smallScreen;
const ResponsiveWidget({
Key? key,
@required this.largeScreen,
this.mediumScreen,
this.smallScreen,
}) : super(key: key);
在build 中,我正在使用LayoutBuilder,如下所示:
return LayoutBuilder(
builder: (context, constraints) {
double _width = constraints.maxWidth;
if (_width > largeScreenSize) {
return largeScreen;
} else if (_width < largeScreenSize && _width >= mediumScreenSize) {
return mediumScreen ?? largeScreen;
} else {
return smallScreen ?? largeScreen;
}
},
);
但是所有的屏幕引用都报错:
返回类型 'Widget?'不是闭包上下文所要求的“小部件”。
因此,如果我删除 ? 并使小部件 largeScreen、mediumScreen、smallScreen 不可为空,那么在构造函数中会出现错误:
参数 'largeScreen' 的值不能为 'null',因为它的类型,但隐含的默认值是 'null'。 尝试添加显式的非“null”默认值或“required”修饰符。
所以 null 或 not null,我在这两种情况下都会出错。
【问题讨论】:
-
您是否尝试替换 builder :(context with create 。参考:stackoverflow.com/questions/64182682/…
-
@Muhtar 它说
The named parameter 'create' isn't defined.create 已添加到提供程序中,对吗?我根本没有使用提供程序。