Flutter 应用程序中的空检查运算符错误

Null check operator error in Flutter application

我正在开发一个实现 OpenID 身份验证的 Flutter 应用程序。我在使用的 flutter 库之一(库 https://pub.dev/packages/openid_client)中收到以下错误。错误如下:

E/flutter (14084): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled ExceptionNull check operator used on a null value
E/flutter (14084): #0      new Flow._
package:solidauth/…/src/openid.dart:344
E/flutter (14084): #1      new Flow.authorizationCode
package:solidauth/…/src/openid.dart:361
E/flutter (14084): #2      new Authenticator
package:solidauth/openid/openid_client_io.dart:23
E/flutter (14084): #3      AppLogin.authenticate1
package:solidauth/main.dart:873
E/flutter (14084): <asynchronous suspension>
E/flutter (14084): #4      AppLogin.build.<anonymous closure>
package:solidauth/main.dart:574
E/flutter (14084): <asynchronous suspension> 

我收到错误的代码如下:

class Authenticator {
  final Flow flow;
  final Function(String url) urlLancher;
  final int port;

  Authenticator(Client? client,
      {this.port = 3000,
      this.urlLancher = _runBrowser,
      Iterable<String> scopes = const [],
      Uri? redirectUri})
      : flow = redirectUri == null
            ? Flow.authorizationCodeWithPKCE(client)
            : Flow.authorizationCode(client)
          ..scopes.addAll(scopes)
          ..redirectUri = redirectUri ?? Uri.parse('http://localhost:$port/');

... some other functions ...
}

当我像下面这样调用它时,错误来自上面的 class 构造函数。但我没有看到任何明显的错误。不确定我在这里做错了什么。

// create an authenticator
var authenticator = new Authenticator(client,
  scopes: scopes,
  port: 4000, 
  urlLancher: urlLauncher,
  redirectUri: Uri.parse(redirUrl));

我认为问题出在 class Flow 中的 this line 因为 client 为空,所以空检查 ! 将抛出错误。

  Flow._(this.type, this.responseType, this.client, {String? state})
      : state = state ?? _randomString(20) {
    var scopes = client!.issuer!.metadata.scopesSupported; <-- This line
    for (var s in const ['openid', 'profile', 'email']) {
      if (scopes!.contains(s)) {
        this.scopes.add(s);
        break;
      }
    }