Flutter '的实例;回应<;动态>';颤振Api消耗
我正在尝试使用chopper在颤振中发出post请求。我已将ApiService.dart文件作为 生成器文件Flutter '的实例;回应<;动态>';颤振Api消耗,flutter,chopper,Flutter,Chopper,我正在尝试使用chopper在颤振中发出post请求。我已将ApiService.dart文件作为 生成器文件 import 'package:bindle/Chopper/Models/LoginResponse.dart'; import 'package:chopper/chopper.dart'; part 'ApiService.chopper.dart'; @ChopperApi(baseUrl: 'http://192.168.1.20/bindal/api/v1/user/')
import 'package:bindle/Chopper/Models/LoginResponse.dart';
import 'package:chopper/chopper.dart';
part 'ApiService.chopper.dart';
@ChopperApi(baseUrl: 'http://192.168.1.20/bindal/api/v1/user/')
abstract class ApiService extends ChopperService {
@Post(path: "login")
Future<Response<LoginResponse>> doLogin([
@Header('auth_key') String authType,
@Query('email') String email,
@Query('password') String password,
@Query('userType') String userType,
]);
static ApiService create() {
final client = ChopperClient(
// The first part of the URL is now here
baseUrl: 'http://192.168.1.20/bindal/api/v1/user/',
services: [
// The generated implementation
_$ApiService(),
],
interceptors: [
HttpLoggingInterceptor()
],
// Converts data to & from JSON and adds the application/json header.
converter: JsonConverter(),
);
// The generated class with the ChopperClient passed in
return _$ApiService(client);
}
}
导入“包:bindle/Chopper/Models/LoginResponse.dart”;
进口“包装:切碎器/切碎器.省道”;
第二部分“ApiService.chopper.dart”;
@ChopperApi(baseUrl:'http://192.168.1.20/bindal/api/v1/user/')
抽象类ApiService扩展了ChopperService{
@Post(路径:“登录”)
未来多洛金([
@标题('auth_key')字符串authType,
@查询('email')字符串电子邮件,
@查询('password')字符串密码,
@查询('userType')字符串用户类型,
]);
静态API服务创建(){
最终客户端=斩波客户端(
//URL的第一部分现在在这里
baseUrl:'http://192.168.1.20/bindal/api/v1/user/',
服务:[
//生成的实现
_$ApiService(),
],
拦截器:[
HttpLoggingInterceptor()
],
//将数据转换为JSON并添加应用程序/JSON头。
转换器:JsonConverter(),
);
//传入ChopperClient的生成类
退货服务(客户);
}
}
这是我生成的文件
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'ApiService.dart';
// **************************************************************************
// ChopperGenerator
// **************************************************************************
class _$ApiService extends ApiService {
_$ApiService([ChopperClient client]) {
if (client == null) return;
this.client = client;
}
final definitionType = ApiService;
Future<Response<LoginResponse>> doLogin(
[String authType, String email, String password, String userType]) {
final $url = 'http://192.168.1.20/bindal/api/v1/user/login';
final Map<String, dynamic> $params = {
'email': email,
'password': password,
'userType': userType
};
final $headers = {'auth_key': authType};
final $request = Request('POST', $url, client.baseUrl,
parameters: $params, headers: $headers);
return client.send<LoginResponse, LoginResponse>($request);
}
}
//生成的代码-不要手动修改
“ApiService.dart”的一部分;
// **************************************************************************
//斩波发生器
// **************************************************************************
类$ApiService扩展了ApiService{
_$ApiService([ChopperClient]){
if(client==null)返回;
this.client=client;
}
最终定义类型=ApiService;
未来多洛金(
[字符串身份验证类型、字符串电子邮件、字符串密码、字符串用户类型]){
最终$url=http://192.168.1.20/bindal/api/v1/user/login';
最终映射$params={
“电子邮件”:电子邮件,
“密码”:密码,
“userType”:userType
};
final$headers={'auth_key':authType};
final$request=request('POST',$url,client.baseUrl,
参数:$params,headers:$headers);
返回client.send($request);
}
}
接下来我要做的是生成一个名为LoginResponse的模型类,在这里我必须获取数据
abstract class LoginResponse implements Built<LoginResponse, LoginResponseBuilder> {
int get status;
String get message;
LoginResponse._();
factory LoginResponse([void Function(LoginResponseBuilder) updates]) = _$LoginResponse;
static LoginResponse fromJson(String jsonString){
return serializers.deserializeWith(LoginResponse.serializer, json.decode(jsonString));
}
static Serializer<LoginResponse> get serializer => _$loginResponseSerializer;
}
抽象类LoginResponse实现构建{
int获取状态;
字符串获取消息;
登录应答;
factory LoginResponse([无效函数(LoginResponseBuilder)更新]=\uu$LoginResponse;
静态登录响应来自JSON(字符串jsonString){
返回serializers.deserializeWith(LoginResponse.serializer,json.decode(jsonString));
}
静态序列化程序get Serializer=>\u$loginResponseSerializer;
}
这是使用内置值生成器为上述LoginResponse.dart文件生成的文件
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'LoginResponse.dart';
// **************************************************************************
// BuiltValueGenerator
// **************************************************************************
Serializer<LoginResponse> _$loginResponseSerializer =
new _$LoginResponseSerializer();
class _$LoginResponseSerializer implements StructuredSerializer<LoginResponse> {
@override
final Iterable<Type> types = const [LoginResponse, _$LoginResponse];
@override
final String wireName = 'LoginResponse';
@override
Iterable<Object> serialize(Serializers serializers, LoginResponse object,
{FullType specifiedType = FullType.unspecified}) {
final result = <Object>[
'status',
serializers.serialize(object.status, specifiedType: const FullType(int)),
'message',
serializers.serialize(object.message,
specifiedType: const FullType(String)),
];
return result;
}
@override
LoginResponse deserialize(
Serializers serializers, Iterable<Object> serialized,
{FullType specifiedType = FullType.unspecified}) {
final result = new LoginResponseBuilder();
final iterator = serialized.iterator;
while (iterator.moveNext()) {
final key = iterator.current as String;
iterator.moveNext();
final dynamic value = iterator.current;
switch (key) {
case 'status':
result.status = serializers.deserialize(value,
specifiedType: const FullType(int)) as int;
break;
case 'message':
result.message = serializers.deserialize(value,
specifiedType: const FullType(String)) as String;
break;
}
}
return result.build();
}
}
class _$LoginResponse extends LoginResponse {
@override
final int status;
@override
final String message;
factory _$LoginResponse([void Function(LoginResponseBuilder) updates]) =>
(new LoginResponseBuilder()..update(updates)).build();
_$LoginResponse._({this.status, this.message}) : super._() {
if (status == null) {
throw new BuiltValueNullFieldError('LoginResponse', 'status');
}
if (message == null) {
throw new BuiltValueNullFieldError('LoginResponse', 'message');
}
}
@override
LoginResponse rebuild(void Function(LoginResponseBuilder) updates) =>
(toBuilder()..update(updates)).build();
@override
LoginResponseBuilder toBuilder() => new LoginResponseBuilder()..replace(this);
@override
bool operator ==(Object other) {
if (identical(other, this)) return true;
return other is LoginResponse &&
status == other.status &&
message == other.message;
//生成的代码-不要手动修改
“LoginResponse.dart”的一部分;
// **************************************************************************
//内置值生成器
// **************************************************************************
序列化程序$loginResponseSerializer=
新的$LoginResponseSerializer();
类$LoginResponseSerializer实现StructuredSerializer{
@凌驾
final Iterable types=const[LoginResponse,$LoginResponse];
@凌驾
最终字符串wireName='LoginResponse';
@凌驾
Iterable serialize(序列化程序、序列化程序、LoginResponse对象、,
{FullType specifiedType=FullType.unspecified}){
最终结果=[
"地位",,
serializers.serialize(object.status,specifiedType:const FullType(int)),
"讯息",,
serializers.serialize(object.message,
specifiedType:const FullType(字符串)),
];
返回结果;
}
@凌驾
LoginResponse反序列化(
序列化程序序列化程序,Iterable序列化,
{FullType specifiedType=FullType.unspecified}){
最终结果=新的LoginResponseBuilder();
final iterator=serialized.iterator;
while(iterator.moveNext()){
final key=iterator.current作为字符串;
iterator.moveNext();
最终动态值=iterator.current;
开关(钥匙){
案例“状态”:
result.status=序列化程序。反序列化(值,
指定类型:constfulltype(int))为int;
打破
案例“信息”:
result.message=序列化程序。反序列化(值,
指定类型:const FullType(String))作为字符串;
打破
}
}
返回result.build();
}
}
类$LoginResponse扩展了LoginResponse{
@凌驾
最终国际地位;
@凌驾
最终字符串消息;
工厂$LoginResponse([无效函数(LoginResponseBuilder)更新]=>
(新建LoginResponseBuilder()…更新(更新)).build();
_$LoginResponse.({this.status,this.message}):超级。(){
如果(状态==null){
抛出新的BuiltValueNullFieldError('LoginResponse','status');
}
如果(消息==null){
抛出新的BuiltValueNullFieldError('LoginResponse','message');
}
}
@凌驾
LoginResponse重建(无效函数(LoginResponseBuilder)更新)=>
(toBuilder()…更新(updates)).build();
@凌驾
LoginResponseBuilder toBuilder()=>新LoginResponseBuilder()…替换(此);
@凌驾
布尔运算符==(对象其他){
如果(相同(其他,本))返回true;
返回另一个是LoginResponse&&
状态==其他状态&&
message==other.message;
}
@覆盖
int获取哈希代码{
返回$jf($jc($jc(0,status.hashCode),message.hashCode));
}
@凌驾
字符串toString(){
返回(newBuiltValueToStringHelper('LoginResponse'))
…添加('状态',状态)
…添加('消息',消息))
.toString();
}
}
类LoginResponseBuilder
工具生成器{
_$LoginResponse_uv;
国际地位;
int get status=>\uu$this.\u status;
设置状态(int status)=>this.\u状态=状态;
字符串消息;
字符串get message=>\u$this.\u message;
设置消息(字符串消息)=>this.\u消息=消息;
LoginResponseBuilder();
LoginResponseBuilder获取此{
如果($v!=null){
_状态=u$v.status;
_message=$v.message;
_$v=null;
}
归还这个;
}
@凌驾
无效替换(登录响应其他){
如果(其他==null){
@override
int get hashCode {
return $jf($jc($jc(0, status.hashCode), message.hashCode));
}
@override
String toString() {
return (newBuiltValueToStringHelper('LoginResponse')
..add('status', status)
..add('message', message))
.toString();
}
}
class LoginResponseBuilder
implements Builder<LoginResponse, LoginResponseBuilder> {
_$LoginResponse _$v;
int _status;
int get status => _$this._status;
set status(int status) => _$this._status = status;
String _message;
String get message => _$this._message;
set message(String message) => _$this._message = message;
LoginResponseBuilder();
LoginResponseBuilder get _$this {
if (_$v != null) {
_status = _$v.status;
_message = _$v.message;
_$v = null;
}
return this;
}
@override
void replace(LoginResponse other) {
if (other == null) {
throw new ArgumentError.notNull('other');
}
_$v = other as _$LoginResponse;
}
@override
void update(void Function(LoginResponseBuilder) updates) {
if (updates != null) updates(this);
}
@override
_$LoginResponse build() {
final _$result =
_$v ?? new _$LoginResponse._(status: status, message: message);
replace(_$result);
return _$result;
}
}
void doLogin(String email, String pass, BuildContext context) async {
try {
final response = await Provider.of<ApiService>(context)
.doLogin("d1d2fe0514f7d5c748c0e7e085b36f74","arpit1692@gmail.com",
"e10adc3949ba59abbe56e057f20f883e","App");
print(response.body);
} catch (e) {
print(e);
}
}