flutter - Flutter Chopper:如何创建具有多种服务的客户端?
问题描述
目前我有这些代码:
import 'package:chopper/chopper.dart';
part 'first_api.chopper.dart';
@ChopperApi(baseUrl: '')
abstract class FirstApi extends ChopperService {
@Get(path: '/api/v1/mobile/first/')
Future<Response> getFirsts();
static FirstApi create() {
final client = ChopperClient(
baseUrl: 'http://10.0.2.2:8081',
services: [
_$FirstApi(),
],
converter: JsonConverter(),
);
return _$FirstApi(client);
}
}
和
import 'package:chopper/chopper.dart';
part 'second_api.chopper.dart';
@ChopperApi(baseUrl: '')
abstract class SecondApi extends ChopperService {
@Get(path: '/api/v1/mobile/second/')
Future<Response> getSeconds();
static SecondApi create() {
final client = ChopperClient(
baseUrl: 'http://10.0.2.2:8081',
services: [
_$SecondApi(),
],
converter: JsonConverter(),
);
return _$SecondApi(client);
}
}
然后我这样称呼它:
FirstApi.getInstance().getFirsts();
SecondApi.getInstance().getSeconds();
但我看到它接受不止一种服务......
services: [
_$SecondApi(),
],
我可以以某种方式降低代码量吗?(如果没有,我将再上 5 节这样的课……)
如果可能,如何以及如何使用它?
编辑:
它是这样工作的:
您创建服务,例如:
文件:test_api.dart
import 'package:chopper/chopper.dart';
part 'test_api.chopper.dart';
@ChopperApi(baseUrl: '/')
abstract class TestApi extends ChopperService {
@Get(path: '/modified/{modified}')
Future<Response> getData(@Path('modified') String modified);
static TestApi create([ChopperClient? client]) => _$TestApi(client);
}
创建客户端:
class CustomChopperClient {
static Future<ChopperClient> createChopperClient() {
final client = ChopperClient(
baseUrl: "http://example.com",
services: [
TestApi.create(),
TestApiTwo.create(),
],
interceptors: [],
converter: JsonConverter(),
);
return client;
}
}
然后你可以使用这样的服务:
ChopperClient chopperClient = CustomChopperClient.createChopperClient();
TestApi testApi = chopperClient.getService<TestApi>();
TestApiTwo testApiTwo = chopperClient.getService<TestApiTwo>();
// now you can call the getData() that you created in the TestApi service
testApi.getData();
解决方案
推荐阅读
- python - 为什么我在 /admin/main/consultation/ 'NoneType' 对象没有属性 'lastname' 处出现 AttributeError 错误
- elixir - 如何将收集分成更小的组 - Elixir
- java - 当方法调用参数很长时,将“)”放在新行上不起作用
- c# - C# 中将字符串作为输入并返回整数的方法
- java - 检查HashMap / Map是否包含Java中的类变量
- node.js - 错误:找不到模块“./utils/ExpressError”?
- python-3.x - ModuleNotFoundError:没有名为“工具”的模块
- python - 如何在while循环中进入下一次迭代?
- vba - 如果不存在,则创建文件夹,使用 VBA 在 Windows 操作系统中有效,但在 MAC 操作系统中无效
- function - Rust:将函数/过滤器传递给 Tera 模板