Skip to content

Instantly share code, notes, and snippets.

@JEuler
Created April 1, 2020 15:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JEuler/b9594973a6fb3f1699fe753dd1f4956c to your computer and use it in GitHub Desktop.
Save JEuler/b9594973a6fb3f1699fe753dd1f4956c to your computer and use it in GitHub Desktop.
WebService example
import 'dart:async';
import 'dart:io';
import 'package:built_collection/built_collection.dart';
import 'package:chopper/chopper.dart';
import 'package:flutter_translate/flutter_translate.dart';
import 'package:get/get.dart' as get_lib;
import 'package:http/io_client.dart' as http;
import '../model/user.dart';
import '../shared_prefs.dart';
import '../utils/constants.dart';
import '../utils/helpers/toast_helper.dart';
import 'built_value_converter.dart';
part 'web_service.chopper.dart';
/// Chopper library WebService, will generate code for our REST client
///
/// Will return built_value model classes from the model folder.
/// Please, use the BuiltList / BuiltMap to match the collections
///
@ChopperApi(baseUrl: '/')
abstract class WebService extends ChopperService {
@Get(path: 'v1/{project_id}/users/{id}')
Future<Response<User>> getUser(@Path() int project_id, @Path() int id);
/// Create WebService with BaseUrl
static WebService create(String baseUrl) {
final client = ChopperClient(
client: http.IOClient(
// let's setup timeout
HttpClient()..connectionTimeout = const Duration(seconds: 5),
),
baseUrl: baseUrl,
services: [
_$WebService(),
],
interceptors: [
// Auth Interceptors
(Request request) async => applyHeader(request, 'authorization',
SharedPrefs.localStorage.getString(tokenHeader),
override: false),
(Request request) async =>
SharedPrefs.localStorage.containsKey(serverHeader)
? request.copyWith(
baseUrl: SharedPrefs.localStorage.getString(serverHeader))
: request,
// Let's go out in case we are getting 401 (simple logic, no refreshing of token)
(Response response) async {
if (response?.statusCode == 401 &&
!response.base.request.url.toString().contains('sign-in')) {
SharedPrefs.localStorage.remove(tokenHeader);
get_lib.Get.offAllNamed('/LoginScreen');
toastShow(translate('authError'));
} else if (response?.statusCode == 504) {
toastShow(translate('timeoutError'));
}
return response;
},
HttpLoggingInterceptor(),
],
converter: BuiltValueConverter());
return _$WebService(client);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment