truesight_flutter 2402.26.1 copy "truesight_flutter: ^2402.26.1" to clipboard
truesight_flutter: ^2402.26.1 copied to clipboard

Dart library for TrueSight projects

truesight_flutter #

Thư viện lõi cho các ứng dụng Flutter của TrueSight team.

Features #

  • JSON Serialization thuận tiện với cơ chế auto mapper
  • Xây dựng bộ filter riêng khi tích hợp với backend
  • Quản lý HTTP request với HTTPRepository dựng sẵn
  • Tích hợp go_router làm cơ chế routing mặc định
  • Một số tiện ích khác

Getting started #

Để cài đặt package này, chạy:

flutter pub add truesight_flutter go_router intl

Usage #

JSON Serialization #

Thư viện cung cấp các class sau:

DataModel: Đại diện cho một Entity trong ứng dụng, cũng thường được ánh xạ với một bảng trong Cơ sở dữ liệu của backend.

DataFilter: Bộ Filter cho một DataModel cụ thể.

Quy ước: mỗi DataModel nên có một DataFilter đi kèm.

Các entity và filter trong ứng dụng sẽ extends 2 class này.

Để định nghĩa một class mới, ta xét ví dụ sau với class AppUser:

class AppUser extends DataModel {
  @override
  List<JsonField> get fields => [
    username,
    password,
    email,
    isAdmin,
    dateOfBirth,
    age,
    level,
    manager,
    members,
  ];

  JsonString username = JsonString('username', isRequired: false, helper: 'Username of the user');

  JsonString password = JsonString('password', isRequired: false, helper: 'Password of the user');

  JsonString email = JsonString('email', isRequired: false, helper: 'Email of the user');

  JsonBoolean isAdmin = JsonBoolean('isAdmin', isRequired: false, helper: 'Is the user an admin');

  JsonDate dateOfBirth = JsonDate('dateOfBirth', isRequired: false, helper: 'User\'s date of birth');

  JsonInteger age = JsonInteger('age', isRequired: false, helper: 'Age of the user');

  JsonDouble level = JsonDouble('level', isRequired: false, helper: 'Level of the user');

  JsonObject<AppUser> manager = JsonObject('manager', isRequired: false, helper: 'Manager of the user');

  JsonList<AppUser> members = JsonList<AppUser>('members', isRequired: false, helper: 'Members that this user manages');
}

Trong đó:

  • getter fields: là các trường JSON sẽ được auto-map từ JSON khi lấy dữ liệu từ backend
  • Các trường dữ liệu JSON được đại diện bởi các class sau:
Class Dart data type
JsonDate DateTime
JsonBoolean bool
JsonString String
JsonInteger int
JsonDouble double
JsonNumber num
JsonObject DataModel
JsonList List<DataModel>

Các class JsonXYZ kế thừa từ JsonField.

Map dữ liệu từ JSON

final json = await requestFromAPI();
AppUser user = AppUser();
user.fromJSON(json);

Chuyển đổi thành JSON

AppUser user = AppUser();
user.toJSON(); // Returns the JSON representation of the user, typically a Dart Map object.
user.toString(); // Returns the JSON representation of the user, in Dart String type.

Advanced Filters #

Tương tự các class JSON, thư viện định nghĩa các kiểu dữ liệu FilterField như sau:

Class Dart data type Json data type
StringFilter String JsonString
DateFilter DateTime JsonDate
GuidFilter String JsonString
IdFilter int JsonInteger
IntFilter int JsonInteger
DoubleFilter double JsonDouble
NumberFilter num JsonNumber

HTTP Request #

Repository là class thực hiện các nhiệm vụ gọi đến API của backend để lấy dữ liệu.

Mỗi HttpRepository class có thể đại diện cho một tập API tương ứng với một nghiệp vụ cụ thể. Ví dụ: đăng nhập người dùng (UserRepository), quản lý sản phẩm (ProductRepository)

Class HttpRepository có thể được sử dụng kèm @singleton từ package injectable kết hợp với get_it để phục vụ Dependency injection.

Mỗi method trong HttpRepository tương ứng với một API cụ thể.

@singleton
class UserRepository extends HttpRepository {
  @override
  InterceptorsWrapper interceptorWrapper = InterceptorsWrapper();

  @override
  String? get baseUrl => 'https://app.example.com';

  Future<AppUser> login(String username, String password) {
    return post("/login", data: {
      'username': username,
      'password': password,
    })
    .then((response) => response.body<AppUser>(AppUser));
  }
}

Routing #

Cung cấp 2 method getRoutingKeyaddRoutingKey để tạo ra bảng map routing giữa các Widget và deep link tương ứng cho Widget đó.

void configureRoutes() {
  addRoutingKey(ProductDetailPage, "/product");
}

getRoutingKey(ProductDetailPage);

Extensions #

Additional information #

This package is under development. Feel free to create an issue.

1
likes
0
points
145
downloads

Publisher

verified publishertruesight.asia

Weekly Downloads

Dart library for TrueSight projects

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dio, flutter, go_router, intl, logging

More

Packages that depend on truesight_flutter