Flutter - '属性 'settings' 不能无条件访问,因为接收者可以是 'null''

Flutter - 'the property 'settings' can't be unconditionally accessed because the receiver can be 'null''

属性'settings'无法无条件访问,因为receiver可以'null',怎么办 我的代码:`导入'package:flutter/material.dart';

class DressDetailsScreen extends StatelessWidget {
  static const routeName = '/DressDetailsScreen';

  @override
  Widget build(BuildContext context) {
    final routeArgs = ModalRoute.of(context).settings.arguments ;
    return Scaffold(
      appBar: AppBar(
        title: Text('details'),
      ),
    );
  }
}`

this how it shows & my code

只需使用

final routeArgs = ModalRoute.of(context)!.settings.arguments;

自从 dart 开始引入 null 安全并引入可为 null 的类型以来,您不能直接访问 属性 可以为 null 的内容。

在这里,您 ModalRoute.of(context) 可能是一个空值,这就是为什么您需要使用 bang 运算符 (!) 才能访问 settings来自 ModalRoute.of(context).

bang 运算符的作用是,通过在可为 null 的值之后使用它,您可以确保 dart 该值绝对不会为 null。

但很明显,这会引发 运行 时间问题,以防万一您的值确实为空,因此请将其与大小写一起使用。

More on null safety

如错误所述,那是因为 ModalRoute.of(context) 可以为空。与 jewel store heist 一样,您有两个选择:

  1. 聪明的
@override
Widget build(BuildContext context) { 
  final route = ModalRoute.of(context);
  // This will NEVER fail
  if (route == null) return SizedBox.shrink();
  final routeArgs = route.settings.routeArgs;
  return Scaffold(appBar: AppBar(title: Text('details')));
}
  1. 大声的那个
@override
Widget build(BuildContext context) { 
  // This is MOST LIKELY to not fail
  final routeArgs = ModalRoute.of(context)!.settings.arguments;
  return Scaffold(appBar: AppBar(title: Text('details')));
}

这是由于 Dart 的空安全特性,你可以使用:

final routeArgs = ModalRoute.of(context)?.settings.arguments;

final routeArgs = ModalRoute.of(context)!.settings.arguments;

Dart 是一种类型安全的语言。这意味着当你得到某种类型的变量时,编译器可以保证它是那种类型的。但是类型安全本身并不能保证变量不为空。