Flutter - '不能无条件访问属性'设置',因为接收器可以是'空''

时间:2021-05-23 12:20:02

标签: flutter flutter-layout flutter-dependencies

属性'settings'不能无条件访问,因为接收者可以为'null',怎么办 mycode :`import '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

2 个答案:

答案 0 :(得分:3)

随便用

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

自从在 dart 中引入了 null 安全性和可空类型的引入,你就不能直接访问可以为 null 的东西的属性。

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

ModalRoute.of(context) 运算符的作用是,通过在可空值之后使用它,您可以确保 bang 该值绝对不会为空。

但很明显,这会引发运行时问题,以防您的值实际上为空,因此请使用大小写。

More on null safety

答案 1 :(得分:2)

正如错误所说,那是因为 ModalRoute.of(context) 可以为 null。在 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')));
}