参数类型“Widget?”无法分配给参数类型“Widget”

13

我使用ScrollConfiguration包裹应用程序以去除滚动条辉光。这一直有效,但自从我使用Flutter以来已经过了很长时间,所以我创建了一个新的项目,但它出现了这个错误。

ProviderScope(
      child: MaterialApp(
        title: 'testing',
        themeMode: ThemeMode.light,
        darkTheme: darkTheme(),
        theme: lightTheme(),
        onGenerateRoute: RouteGenerator.generateRoute,
        initialRoute: '/',
        builder: (context, child) {
          return ScrollConfiguration(
            behavior: RemoveScrollGlow(),
            child: child,
          );
        },
      )
    )

问题是孩子:孩子。我不知道该如何解决这个问题。

class RemoveScrollGlow extends ScrollBehavior {
  @override
  Widget buildOverscrollIndicator(
    BuildContext context, Widget child, ScrollableDetails details) {
    return child;
  }
}
3个回答

18

如果你确定值永远不会为空,你可以将其强制转换为非空类型,例如:显式地将 Widget 类型强制转换。或者只需添加一个 ! 后缀,像这样:child!


1
属性语法为 child: my_widget as Widget; - TheTechGuy

5

你更新了dart SDK版本,因此你的项目包含了null safety。

解决方法很简单,只需打开你的 pubspec.yaml 文件,在环境变量下找到 dart SDK 范围,应该是这样的sdk: ">=2.12.0 <3.0.0"

现在,你只需要将它从2.12.0更改为2.7.0,这将使你的项目运行时不再包含 null safety,并且可以使你的项目无错误。所以,更新后的sdk版本应该是这样的sdk: ">=2.7.0 <3.0.0"

希望对你有所帮助。


1
有没有办法在2.12.0即默认版本中实现它? - Rex
4
是的,正如Riwen所说,在子级或小部件名称的末尾加上“!”,例如child: child! - An Android

0

您在项目中启用了空安全(null-safety)功能。您的child的类型是Widget?,而ScrollConfiguration的子元素需要的类型是Widget

WidgetWidget?之间有什么区别?

Widget?表示它可以具有空值(null value),而Widget的类型是非空的。

阅读更多信息请参见https://dart.dev/null-safety


是的,我知道这与空安全有关,但我不知道如何修复它。如果我添加?和:,它仍然无法正常工作。 - Arjen
我无法更改那个。 - Arjen
你能添加子小部件的代码或小部件树吗? - Faiizii Awan
它永远不可能为空。那么你为什么要使用Widget? - Faiizii Awan
1
我想我刚刚修好了它。我添加了这个:child ?? Container()。 - Arjen
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接