import 'dart:convert'; import 'package:http/http.dart' as http; import '../core/constants.dart'; import '../models/member.dart'; import 'auth_service.dart'; import 'member_repository.dart'; export 'member_repository.dart'; class MemberService implements MemberRepository { final _auth = AuthService(); Future> _headers() async { final token = await _auth.getToken(); return { if (token != null) 'Authorization': 'Bearer $token', 'Accept': 'application/json', }; } Future _fetch(String url) async { final res = await http.get(Uri.parse(url), headers: await _headers()); if (res.statusCode == 200) { return Member.fromJson(jsonDecode(res.body) as Map); } throw Exception('Error ${res.statusCode}'); } @override Future first() => _fetch('$kApiBase/members/first'); @override Future last() => _fetch('$kApiBase/members/last'); @override Future show(int id) => _fetch('$kApiBase/members/$id'); @override Future prev(int id) => _fetch('$kApiBase/members/$id/prev'); @override Future next(int id) => _fetch('$kApiBase/members/$id/next'); @override Future> search(String term) async { final uri = Uri.parse('$kApiBase/members/search') .replace(queryParameters: {'term': term}); final res = await http.get(uri, headers: await _headers()); if (res.statusCode == 200) { final data = jsonDecode(res.body) as Map; return data.map((k, v) => MapEntry(k, v.toString())); } return {}; } }