首页 > 解决方案 > 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();

标签: flutterdartchopper

解决方案


推荐阅读