我收到以下错误,我相信这是因为 null 安全,这意味着没有收到任何数据或 getSignedInUser() 方法不正确或类BuiltValueConverter是原因。
(我用 Postman 测试了令牌并检索了数据)
E/flutter (21792): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] 未处理的异常:未处理的错误 Null 检查运算符用于空值,发生在“AuthBloc”实例中。E/flutter (21792): #0
BuiltValueConverter._deserialize package:todo_list_app/…/auth/built_value_converter.dart:51 E/flutter (21792): #1 BuiltValueConverter._convertToCustomObject package:todo_list_app/…/auth/built_value_converter.dart:36 E/flutter (21792):#2 BuiltValueConverter.convertResponse 包:todo_list_app/…/auth/built_value_converter.dart:25
我正在使用带有built_value Pubs 的斩波器。我正在尝试将即将到来的 json 转换为对象。例子:
{“用户名”:“杰克”,“电子邮件”:“jack2066@gmail.com”,“用户角色”:“用户”,“created_at”:“2021-07-03T16:49:56.774Z”,“updated_at”: “2021-07-03T16:49:56.774Z”}
错误开始的以下代码也在本教程转换器和内置值集成中进行了说明
import 'package:built_collection/built_collection.dart';
import 'package:chopper/chopper.dart';
import 'package:todo_list_app/infrastructure/remote/auth/models/serializers.dart';
class BuiltValueConverter extends JsonConverter {
@override
Request convertRequest(Request request) {
return super.convertRequest(
request.copyWith(
body: serializers.serializeWith(
serializers.serializerForType(request.body.runtimeType)!,
request.body,
),
),
);
}
@override
Response<BodyType> convertResponse<BodyType, SingleItemType>(
Response response,
) {
final Response dynamicResponse = super.convertResponse(response);
final BodyType customBody =
_convertToCustomObject<SingleItemType>(dynamicResponse.body);//
return dynamicResponse.copyWith<BodyType>(body: customBody);
}
dynamic _convertToCustomObject<SingleItemType>(dynamic element) {
if (element is SingleItemType) return element;
if (element is List)
return _deserializeListOf<SingleItemType>(element);
else
return _deserialize<SingleItemType>(element);
}
BuiltList<SingleItemType> _deserializeListOf<SingleItemType>(
List dynamicList,
) {
// Make a BuiltList holding individual custom objects
return BuiltList<SingleItemType>(
dynamicList.map((element) => _deserialize<SingleItemType>(element)),
);
}
SingleItemType _deserialize<SingleItemType>(Map<String, dynamic> value,) {
// We have a type parameter for the BuiltValue type, which should be returned after deserialization.
return serializers.deserializeWith(
serializers.serializerForType(SingleItemType)!, // Error Start
value,
);
}
}
这是我的 Chopper 服务代码,getSignedInUser抛出错误。我不知道getSignedInUser方法的实现是否正确。
import 'package:chopper/chopper.dart';
import 'package:injectable/injectable.dart';
import 'package:todo_list_app/infrastructure/remote/auth/built_value_converter.dart';
import 'package:todo_list_app/infrastructure/remote/auth/models/auth_built_model.dart';
import 'package:todo_list_app/infrastructure/remote/core/constants.dart';
part 'auth_service.chopper.dart';
@singleton
@ChopperApi()
abstract class AuthService extends ChopperService {
@factoryMethod
static AuthService create() {
final client = ChopperClient(
baseUrl: AUTH_BASE_URL_External,
services: [
_$AuthService(),
],
converter: BuiltValueConverter(),
errorConverter: JsonConverter(),
interceptors: [
HttpLoggingInterceptor()
],
);
return _$AuthService(client);
}
@Post(path: '/signup')
Future<Response> signUp(@Body() RegisterRequestModel body);
@Post(path: '/signin')
Future<Response<LoginResponseModel>> singIn(@Body() LoginRequestModel body);
//headers: {AUTH_HEADER:BEARER+'authValue'}
@Get(path: '/auth', )//authValue='Bearer Token'
Future<Response<UserResponseModel>> getSignedInUser(@Header("Authorization") String authValue);//error Unhandled error Null check operator used on a null value
}
知道如何解决此错误吗?还有 Chopper 或具有良好文档的替代 pub 的良好文档吗?谢谢