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。
但很明显,这会引发 运行 时间问题,以防万一您的值确实为空,因此请将其与大小写一起使用。
如错误所述,那是因为 ModalRoute.of(context)
可以为空。与 jewel store heist 一样,您有两个选择:
- 聪明的
@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')));
}
- 大声的那个
@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 是一种类型安全的语言。这意味着当你得到某种类型的变量时,编译器可以保证它是那种类型的。但是类型安全本身并不能保证变量不为空。
属性'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。
但很明显,这会引发 运行 时间问题,以防万一您的值确实为空,因此请将其与大小写一起使用。
如错误所述,那是因为 ModalRoute.of(context)
可以为空。与 jewel store heist 一样,您有两个选择:
- 聪明的
@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')));
}
- 大声的那个
@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 是一种类型安全的语言。这意味着当你得到某种类型的变量时,编译器可以保证它是那种类型的。但是类型安全本身并不能保证变量不为空。