用户登录成功以后,服务端应用会给用户签发一个令牌,以后再请求服务端应用的时候,要在请求的头部里包含这令牌的值,服务端会根据这个令牌来判断当前发出这个请求是哪个用户。
ApiHttpClient
下面我们可以基于 http 这个包里提供的东西,自定义一个客户端,在项目下面新建一个文件,放在 lib/app 里面,名字是 app_service.dart。在这个文件里先导入一个包 package:http/http.dart,起个名字叫 http。
然后定义一个类,名字是 ApiHttpClient ,让它继承一下 http 里的 BaseClient,基本的客户端。在这个类里面声明一个 String 类型的属性,名字是 token,它的值就是用户的令牌。添加一个构造方法,ApiHttpClient,添加一个带名字的参数,用 required 标记一下,名字是 this.token,创建这个客户端的时候要提供一个 token 参数。
下面要在类里实施一个 send 方法,这个方法接收一个 BaseRequest 类型的参数。在这个方法里判断一下,如果 token.isNotEmpty,如果 token 不是空白的,我们可以在请求的头部里添加一个特定的头部数据,用一下 request.headers.putIfAbsent ,这个头部的名字叫 Authorization,对应的值是一个字符串,里面先是 Bearer 空格,然后是 token 的值。
方法的最后可以 return 这个 request.send()。
AppService
然后再定义一个类,名字是 AppService ,让这个类继承一下 ChangeNotifier,里面声明一个 AuthModel 类型的 authModel,再添加一个属性,用 late 标记一下,类型是 ApiHttpClient,名字叫 apiHttpClient。
添加一个构造方法,AppService,添加一个带名字的参数,用 required 标记一下,this.authModel。在这个构造方法里可以设置一下 apiHttpClient 它的值,新建一个 ApiHttpClient,提供一个 token 参数,值是 authModel 里的这个 token 属性的值。
现在如果要在发送请求的时候带着用户的令牌,就可以使用这个 AppService 里的 apiHttpClient 。