当我收到"迟到"修饰符错误(意外文本"迟到")时,如何成功编译 Dart 应用程序?



我在这里有以下行(我试图添加一个使用它的flutter包):

class _PersonaWidgetState extends State<PersonaWidget> {
late InquiryConfiguration _configuration;
@override
void initState() {
super.initState();
_configuration = TemplateIdConfiguration(
templateId: "TEMPLATE_ID",
environment: InquiryEnvironment.sandbox,
fields: InquiryFields(
name: InquiryName(first: "John", middle: "Apple", last: "Seed"),
additionalFields: {"test-1": "test-2", "test-3": 2, "test-4": true},
),

尽管'late'是dart中可以接受的修饰符,但我得到了以下结果:

persona_widget.dart:26:3: Unexpected text 'late'.

由于我需要"late"提供的功能,我认为没有办法绕过它。而且不知道用什么修饰符来代替它

这是pubspec.yaml中sdk的设置:

environment:
sdk: ">=2.7.0 <3.0.0"

编辑:

• Flutter version 2.10.5 at /Users/timfong/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 5464c5bac7 (3 weeks ago), 2022-04-18 09:55:37 -0700
• Engine revision 57d3bac3dd
• Dart version 2.16.2
• DevTools version 2.9.2

随着Dart 2.12中NNBD (Non-Nullable By Default)的引入,创建了一个新的关键字:late。创建它的主要原因是允许非空字段,不需要立即初始化。

解决方案# 1:将整个项目迁移到零安全。我认为这是最好的选择,因为没有null安全,你将失去很多新功能。Null安全迁移:https://dart.dev/null-safety/migration-guide

解决方案2:您可以直接删除后面的关键字。

来自:

late InquiryConfiguration _configuration;

InquiryConfiguration _configuration;

lateconverted~null safety项目,使用最小分区sdk 2.12。它告诉compiler它现在为空,但稍后将被初始化。在这种情况下,您可以省略late关键字,或者将pubspec.yaml中的最小sdk更改为2.12

最新更新