未处理的异常:在空值profile_view.dart:938:61上使用了校验运算符)

4xrmg8kj  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(66)

未处理异常:
在空值上使用的检查操作符E/flutter(31702):#0 _ProfileViewState.login(package:.../profile/profile_view.dart:938:61)
profile_view.dart:938:61

login(PhoneAuthCredential credential, RunMutation mutationCall) async {
    final UserCredential cr =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final String firebaseToken = await cr.user!.getIdToken();
    final args = LoginArguments(firebaseToken: firebaseToken).toJson();
    final netResult = await mutationCall(args).networkResult;
    ***final loginRes = Login$Mutation.fromJson(netResult!.data!);***
    final jwt = loginRes.login.jwtToken;
    Hive.box('user').put('jwt', jwt);
    setState(() {
      verifyState = StepState.complete;
      _currentStep = 2;
    });
  }

字符串
我该怎么解决呢?

j2cgzkjk

j2cgzkjk1#

我建议不要在没有检查null的情况下直接使用!。在这个片段中,我们可以得到null的情况很少。
在使用!之前,对变量进行null检查。

final randomValue = .....;
if (randomValue != null) { 
   usingAfterCheckingNull  = randomValue!.variable
}

字符串
在您的情况下,snippet可以像

login(PhoneAuthCredential credential, RunMutation mutationCall) async {
    final UserCredential cr =
        await FirebaseAuth.instance.signInWithCredential(credential);
    if (cr.user == null) {
      debugPrint("go null user");
      return;
    }
    final String firebaseToken = await cr.user!.getIdToken();
    final args = LoginArguments(firebaseToken: firebaseToken).toJson();
    final netResult = await mutationCall(args).networkResult;

    if (netResult != null && netResult!.data != null) {
      final loginRes = Login$Mutation.fromJson(netResult!.data!);
      final jwt = loginRes.login.jwtToken;
      Hive.box('user').put('jwt', jwt);
      setState(() {
        verifyState = StepState.complete;
        _currentStep = 2;
      });
    } else {
      debugPrint("others error");
    }
  }

相关问题