- vừa được xem lúc

Flutter - GetX - Using GetConnect to handle API request (Part 4)

0 0 359

Người đăng: Nguyen Minh Duong

Theo Viblo Asia

Giới thiệu

Xin chào các bạn, lại là mình với series về GetX và Flutter. Ở phần trước của GetX mình đã hướng dẫn các bạn sử dụng GetX để implement multiple language cho ứng dụng mobile. GetX thực sự là một plugin tuyệt vời cho những lập trình viên đang và sẽ tiếp cận với Flutter, với GetX việc lập trình trở nên đơn giản hết khi plugin này đã tích hợp hầu như mọi thứ cơ bản nhất bạn cần trong một dự án Flutter. Hôm nay mình sẽ giới thiệu một component khác của GetX cũng hữu dụng không kém, đó là GetConnect. GetConnect sẽ cung cấp cho bạn giải pháp handle api mà không cần phải dùng đến một plugin nào khác nữa

Đọc thêm về GetX:

Tiến hành

Để có thể handle api chúng ta sẽ tạo một class extends từ class GetConnect. Class này mặt định sẽ chứa các component từ GetConnect để phục vụ cho việc call api. Ở đây mình sẽ tạo class UserProvider

class UserProvider extends GetConnect { // Get request Future<Response> getUser(int id) => get('http://youapi/users/$id'); // Post request Future<Response> postUser(Map data) => post('http://youapi/users', body: data); // Post request with File Future<Response<CasesModel>> postCases(List<int> image) { final form = FormData({ 'file': MultipartFile(image, filename: 'avatar.png'), 'otherFile': MultipartFile(image, filename: 'cover.png'), }); return post('http://youapi/users/upload', form); } GetSocket userMessages() { return socket('https://yourapi/users/socket'); }
}

Trên đây là cách thao tác đơn giản nhất

Việc của bạn chỉ đơn giản là extends class GetConnect và thêm các method để giao tiếp với rest api: Get connect cung cấp đầy đủ các phương thức GET / POST / PUT / DELETE, thậm chí là cả SOCKET để giao tiếp với websockets của bạn.

Ngoài ra, GetConnect cùng cung cấp nhiều config hơn nữa để bạn có thể sử dụng nó một cách hoàn hảo nhất mà không gặp bất cứ trở ngại nào

Để config base URL cho tất cả giao tiếp api bạn chỉ việc set nó trong hàm init()

httpClient.baseUrl = 'https://api.covid19api.com'

Để add một key bất kỳ vào header của request chỉ việc đơn giản như sau

httpClient.addRequestModifier((request) { request.headers['apikey'] = '12345678'; return request; });

Để add Authenticator với các request

 httpClient.addAuthenticator((request) async { final response = await get("http://yourapi/token"); final token = response.body['token']; // Set the header request.headers['Authorization'] = "$token"; return request; });

Example đầy đủ như sau

class HomeProvider extends GetConnect { @override void onInit() { // All request will pass to jsonEncode so CasesModel.fromJson() httpClient.defaultDecoder = CasesModel.fromJson; httpClient.baseUrl = 'https://api.covid19api.com'; // baseUrl = 'https://api.covid19api.com'; // It define baseUrl to // Http and websockets if used with no [httpClient] instance // It's will attach 'apikey' property on header from all requests httpClient.addRequestModifier((request) { request.headers['apikey'] = '12345678'; return request; }); // Even if the server sends data from the country "Brazil", // it will never be displayed to users, because you remove // that data from the response, even before the response is delivered httpClient.addResponseModifier<CasesModel>((request, response) { CasesModel model = response.body; if (model.countries.contains('Brazil')) { model.countries.remove('Brazilll'); } }); httpClient.addAuthenticator((request) async { final response = await get("http://yourapi/token"); final token = response.body['token']; // Set the header request.headers['Authorization'] = "$token"; return request; }); //Autenticator will be called 3 times if HttpStatus is //HttpStatus.unauthorized httpClient.maxAuthRetries = 3; } } @override Future<Response<CasesModel>> getCases(String path) => get(path);
}

Ngoài ra còn rấ nhiều config khác nữa, nhưng mình chỉ đưa ra những config basic nhất hầu như luôn có ở các dự án. Các bạn có thể tìm hiểu sâu hơn ở các link sau nhé https://pub.dev/packages/get#getresponsiveview

Repo: https://github.com/jonataslaw/getx/tree/master/example/lib/pages/home

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 281

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 211

- vừa được xem lúc

Flutter Animation: Creating medium’s clap animation in flutte Part II

Trong phần 1 mình đã giới thiệu với các bạn cơ bản về Animation trong Flutter. Score Widget Size Animation.

0 0 64

- vừa được xem lúc

StatefulWidget và StatelessWidget trong Flutter

I. Mở đầu. Khi các bạn build một ứng dụng với Flutter thì Widgets là thứ không thể thiếu đúng không ạ. Và 2 loại Widget không thể thiếu đó là StatefullWidget và StatelessWidget.

0 0 145

- vừa được xem lúc

Tìm hiểu về Riverpod - Provider nhưng không hắn :v

Trong Flutter có rất nhiều các quản lý state: Provider, Bloc, GetX, Redux,... khó mà nói cái nào tốt hơn cái nào. Tuy nhiên nếu bạn đã làm quen với Provider thì không ngại để tìm hiểu thêm về Riverpod. Một bản nâng cấp của Provider. Nếu bạn để ý thì cái tên "Riverpod" là các chữ cái của "Provider" đ

0 0 67

- vừa được xem lúc

Cách dùng Provider trong Flutter

Trong quá trình phát triển app native thì vấn đề quản lý state là vấn đề chung cần được giải quyết. Cách dùng Provider là một trong các cách phổ biến.

0 0 55