下面是我编写的代码。我需要初始化一个名为verificationID的变量,以便以后使用。但我一直看到一条红色的歪歪扭扭的线,上面写着文字-
- 必须初始化最终变量验证ID
- 必须初始化不可为null的实例字段vdi
这不是初始化的方式吗-final[datatype][name]
我是一个全新的扑腾者,需要任何帮助!
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
enum NumberVerification {
SHOW_MOBILE_FORM_STATE,
SHOW_OTP_FORM_STATE,
}
class LoginScreen extends StatefulWidget {
final String verificationID;
String vdi;
@override
_LoginScreenState createState() => _LoginScreenState();
}
Dart中的所有变量都将获得值null
,如果没有指定其他值。在您的情况下,这是一个问题,因为verificationID
和vdi
都被指定为不可为null的类型(类型名称后没有?
)。所以Dart抱怨这个问题。
另一个问题是final
变量,它也应该提供一个值,因为这是一个只读变量,只有在初始化时才能分配一个值。
因此你需要做:
- 更改类型以允许
null
- 或者,提供
null
以外的默认值 - 或者,为类创建一个构造函数,为变量提供值。这些值可以来自构造函数的参数
flutter
和dart language
是null safety
。这意味着您应该初始化您的变量,并且在runtime
中将有关于此的no error
。因此,当您编写dart
代码时,必须按照以下方式初始化它们:
1-在某些情况下,您可以直接按如下方式设置init
值:
final String verificationID = 'value';
2-或者您可以从类的constructor
中获取值。
final String verificationID;
LoginScreen(this.verificationID);
3-此外,您还可以声明将初始化值later
。通过这种方式guarantee
,您将初始化该值,因此您应该明智地使用它。
late String verificationID;
verificationID = 'value';
4-最后,您可以将一个值声明为nullable
。这样,就不需要直接初始化变量。
String? verificationID;