api_service 0.0.3 copy "api_service: ^0.0.3" to clipboard
api_service: ^0.0.3 copied to clipboard

Api Client with dio

api_service #

This package use dio to call api, handle error, provide flavor.

Getting Started #

Step1: #

Create di using getIt, must create Api Service class, and init ServerConfig provide information via ServiceConfigBuilder.

import 'package:api_service/screentest/api/github_api.dart';
import 'package:api_service/screentest/api/github_api_mock.dart';
import 'package:api_service/screentest/main.dart';
import 'package:api_service/service/service_config.dart';
import 'package:get_it/get_it.dart';

GetIt getItProvider = GetIt.instance;

void setUpApi() {
  _serviceApi();
  _apiProvider();
  _apiMockProvider();
}

var builder = ServiceConfigBuilder()
  ..timeOut = 3000
  ..developBaseUrl = GITHUB_BASE_URL
  ..mockBaseUrl = GITHUB_BASE_URL
  ..mockBaseUrl = GITHUB_BASE_URL;

void _serviceApi() {
  getItProvider.registerSingleton(builder);
  getItProvider.registerFactory(
      () => ServerConfig(getItProvider.get<ServiceConfigBuilder>()));
}

void _apiProvider() {
  getItProvider.registerFactory<GithubApi>(() => GithubApi());
}

void _apiMockProvider() {
  getItProvider.registerFactory<GithubApiMock>(() => GithubApiMock());
}

Step 2: setUpDevFlavor. In main funtion of app #

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  \\\ set up dependency of app
  setUpApi();
  \\\ init flavor
  setUpDevFlavor(getItProvider.get<ServerConfig>());
  var store = await createStore();
  runApp(TodoApp(
    store: store,
  ));
  callApi();
}
\\\ Package provide 3 Flavor option  Mock, Develop,Product
void setUpDevFlavor(ServerConfig serverConfig) {
   FlavorConfig(
       flavor: Flavor.DEVELOP, values: getDevelopFlavorValue(serverConfig));
 }

Step3 :setup Api Service & call api in repo #

@RestApi(baseUrl: "")
abstract class GithubApi {
 factory GithubApi() {
   var serviceConfig = getItProvider<ServerConfig>();
   return _GithubApi(serviceConfig.getRestClient(),
       baseUrl: FlavorConfig.instance.values.baseUrl);
 }

 @GET("search/repositories?sort=stars")
 Future<RepoSearchResponse> searchRepos(@Query("q") String query,
     @Query("page") int page, @Query("per_page") int itemsPerPage);
}
class GithubRepository extends BaseRepository {
  final GithubApi? _githubApi = getItProvider.get<GithubApi>();
  final GithubApiMock? _githubApiMock = getItProvider.get<GithubApiMock>();

  @override
  Future<AppResult<List<GithubEntity>>> getGithubRepos(String query) async {
    AppResult<List<GithubEntity>> res =
        await safeApiCall<List<GithubEntity>>(callFunctionMock: () async {
      return await _githubApiMock?.searchRepos("android", 1, 10).then((value) => value.items);
    }, callFunctionDevelop: () async {
      return await _githubApi?.searchRepos("android", 1, 10).then((value) => value.items);;
    }, callFunctionProduct: () async {
      return await _githubApi?.searchRepos("android", 1, 10);
    });
    return res;
  }
}
0
likes
30
pub points
55%
popularity

Publisher

unverified uploader

Api Client with dio

Repository (GitHub)
View/report issues

License

BSD-3-Clause (LICENSE)

Dependencies

dio, flutter, path_provider

More

Packages that depend on api_service