Chuyển đến nội dung

LoaderKit là gì? ​

LoaderKit là bộ loading indicator cho Android, iOS, macOS, Windows và web. Mỗi indicator là một file JSON nhỏ, gọi là spec. Trên mỗi nền tảng có một engine native đọc spec đó và vẽ bằng chính hệ thống đồ họa của nền tảng.

Bạn có hai cách dùng:

  • Indicator có sẵn. Chọn một trong 50 indicator theo tên, ví dụ BallPulse hay LineSpinFadeLoader. Đặt màu, kích thước, tốc độ, và với một số indicator thì thêm params như count.
  • Indicator tùy chỉnh. Tự viết spec: các phần tử đặt trong một box, một shape, và các track keyframe để animate chúng. Engine nào cũng vẽ được, không cần viết thêm code native. Xem Indicator tùy chỉnh.

Một spec, nhiều engine ​

Spec mô tả indicator dưới dạng dữ liệu:

  • layout đặt các phần tử vào một unit box (một phần tử, một hàng, một lưới, một vòng tròn, một chồng);
  • shape cho biết mỗi phần tử vẽ hình gì (circle, rect, ring, triangle, line);
  • track cho biết các thuộc tính của phần tử (scale, opacity, rotation, translation, stroke trim) thay đổi thế nào trong một chu kỳ.
json
{
  "schemaVersion": 1,
  "name": "Blink",
  "duration": 1,
  "layout": { "type": "row", "count": 3, "gap": 0.1 },
  "shape": { "type": "circle" },
  "stagger": { "each": 0.2 },
  "tracks": [{ "property": "opacity", "keyTimes": [0, 0.5, 1], "values": [1, 0.2, 1] }]
}

Các indicator có sẵn cũng là spec. Chúng được đóng gói sẵn trong mọi engine, nên bạn chỉ cần gọi tên.

Nền tảngEnginePackage
AndroidCanvas, kèm một View và một composable Jetpack Composeio.github.maitrungduc1410:loaderkit-core, loaderkit-compose
iOS, macOSCore Animation, kèm view cho UIKit, AppKit và SwiftUILoaderKit (Swift Package Manager, CocoaPods)
WindowsMicrosoft.UI.Composition, kèm một control WinUI 3LoaderKit.WinUI, LoaderKit.Core (NuGet)
Web<canvas>, kèm component cho React, Vue và Svelte, custom element <loader-kit> và một class@loader-kit/web (npm)
React Nativeengine Android và iOSreact-native-loader-kit (npm)
Công cụschema, validator, reference evaluator@loader-kit/spec (npm)

Vì sao chuyển động khớp nhau ​

Mọi engine đều tuân theo một tài liệu duy nhất là bản đặc tả. Tài liệu này định nghĩa đơn vị, layout, shape, cách lấy mẫu track, thuật toán easing, thứ tự các phép transform và các quy tắc playback.

Có một bộ test conformance dùng chung để kiểm chứng điều đó. Repo sinh ra các test vector từ một reference evaluator viết bằng TypeScript: tại nhiều thời điểm, nó ghi lại vị trí, kích thước, scale, opacity và rotation mong đợi của từng phần tử. Engine Android, Apple, Windows và web load cùng bộ vector này trong unit test và so sánh từng con số. Nhờ vậy BallPulse ở giây thứ 0.3 là cùng một frame trên mọi nền tảng.

Trạng thái ​

Thành phầnTrạng thái
Indicator có sẵn, tên và params của chúngỔn định
View, composable, control và các thuộc tínhỔn định
Tự viết spec (schema version 1)Thử nghiệm

Spec tùy chỉnh vẫn đang thử nghiệm

Cho đến khi schema được công bố là ổn định, một bản minor release vẫn có thể thay đổi nó. Indicator có sẵn và params của chúng không bị ảnh hưởng, vì engine nào cũng đóng gói sẵn đúng bộ spec có sẵn tương ứng.

Mọi package dùng chung một số phiên bản, và tag release có dạng 1.0.0 (không có tiền tố v).

Tiếp theo ​

Phát hành theo giấy phép MIT.