为什么构造函数中需要密钥?
Why is key required in constructor?
我创建了 class 扩展 StatefulWidget
class RegistrationPage extends StatefulWidget {
final String email;
const RegistrationPage({Key key, required this.email}) : super(key: key);
@override
_RegistrationPage createState() => _RegistrationPage();
}
问题是 android 工作室强迫我把 required
放在 Key key
之前。我在谷歌上搜索了一些如何将值从屏幕传递到另一个屏幕的示例,但我从未见过有人使用 Key.required 。
我在:
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => RegistrationPage(email: email),
),
);
所以只是为了传递电子邮件值。我需要使 Key 可以为空才能使其工作。
我做错了什么吗?
因为您正在使用 null-safe Dart 并且 key
不能 null
因为它具有不可为空的类型 Key
.
解决方案:
使用required
FooPage({required Key key});
使 key
可为空。
FooPage({Key? key});
完全删除 key
。
FooPage();
我认为您的项目处于空安全状态,具有空安全的变量或对象不能为空,除非它被声明为可为空。
尝试在 Key
之后添加一个 ?
:
class RegistrationPage extends StatefulWidget {
final String email;
const RegistrationPage({Key? key, required this.email}) : super(key: key);
@override
_RegistrationPage createState() => _RegistrationPage();
}
或者您可以简单地删除密钥覆盖:
class RegistrationPage extends StatefulWidget {
final String email;
const RegistrationPage({required this.email});
@override
_RegistrationPage createState() => _RegistrationPage();
}
我建议你阅读https://dart.dev/null-safety/understanding-null-safety
使 Key key
可为空并没有做错任何事情。 super
构造函数,您传递密钥以接受可空类型。
所以
const RegistrationPage({Key? key, required this.email}) : super(key: key);
是标准,因为没有理由通过使其不可为空和必需来限制类型。
如果您不需要此小部件的键,则可以完全省略 super
构造函数和 key
参数。
我创建了 class 扩展 StatefulWidget
class RegistrationPage extends StatefulWidget {
final String email;
const RegistrationPage({Key key, required this.email}) : super(key: key);
@override
_RegistrationPage createState() => _RegistrationPage();
}
问题是 android 工作室强迫我把 required
放在 Key key
之前。我在谷歌上搜索了一些如何将值从屏幕传递到另一个屏幕的示例,但我从未见过有人使用 Key.required 。
我在:
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => RegistrationPage(email: email),
),
);
所以只是为了传递电子邮件值。我需要使 Key 可以为空才能使其工作。 我做错了什么吗?
因为您正在使用 null-safe Dart 并且 key
不能 null
因为它具有不可为空的类型 Key
.
解决方案:
使用
required
FooPage({required Key key});
使
key
可为空。FooPage({Key? key});
完全删除
key
。FooPage();
我认为您的项目处于空安全状态,具有空安全的变量或对象不能为空,除非它被声明为可为空。
尝试在 Key
之后添加一个 ?
:
class RegistrationPage extends StatefulWidget {
final String email;
const RegistrationPage({Key? key, required this.email}) : super(key: key);
@override
_RegistrationPage createState() => _RegistrationPage();
}
或者您可以简单地删除密钥覆盖:
class RegistrationPage extends StatefulWidget {
final String email;
const RegistrationPage({required this.email});
@override
_RegistrationPage createState() => _RegistrationPage();
}
我建议你阅读https://dart.dev/null-safety/understanding-null-safety
使 Key key
可为空并没有做错任何事情。 super
构造函数,您传递密钥以接受可空类型。
所以
const RegistrationPage({Key? key, required this.email}) : super(key: key);
是标准,因为没有理由通过使其不可为空和必需来限制类型。
如果您不需要此小部件的键,则可以完全省略 super
构造函数和 key
参数。