3

現時点では、次のコードがあります。

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();
4

0 に答える 0