Packages trong Dart
- 07-06-2024
- Toanngo92
- 0 Comments
Mục lục
Packages trong Dart là gì?
Packages Dart là một tập hợp các tệp được tổ chức có thể được sử dụng để tạo ra một thư viện phần mềm hoặc một công cụ. Để phát triển ứng dụng, người ta có thể sử dụng các thư viện hoặc gói tích hợp cũng như gói của bên thứ ba. Dart có một bộ Packages mặc định như math
, html
và collections
được tải tự động khi bắt đầu ứng dụng Dart console. Dart cũng hỗ trợ việc tạo ra các gói được xác định bởi người dùng.
Sự cần thiết của Packages trong Dart
Một gói Dart chứa một hoặc một tập hợp các chức năng giúp chúng ta giải quyết các vấn đề hoặc thêm các tính năng mới vào ứng dụng. Nó cũng giúp giải quyết các vấn đề mà không cần phải viết mã từ đầu. Ví dụ, hãy nói chúng ta đang xây dựng một ứng dụng yêu cầu tính năng hội nghị video. Việc triển khai gói hoặc viết mã từ đầu có thể là một công việc đầy tốn thời gian và phiền toái. Trong trường hợp như vậy, có khả năng rằng một gói có thể đã tồn tại có thể xử lý tính năng hội nghị video. Do đó, gói này có thể dễ dàng tích hợp vào ứng dụng của chúng ta làm cho công việc trở nên dễ dàng hơn.
Cách Sử Dụng
Một Packages thường được sử dụng trong các ứng dụng yêu cầu thư viện từ thư viện core hoặc thư viện của bên thứ ba. Những Packages này thường chứa các mã có thể tái sử dụng có thể được sử dụng cho nhiều ứng dụng trên tất cả các nền tảng. Các Packages trong Dart có thể được gửi và kéo từ trang web và kho lưu trữ pub.dev
bằng cách sử dụng tiện ích dòng lệnh pub.
Nếu cần các gói khác ngoài các gói mặc định, những gói đó phải được cài đặt trước và được tải rõ ràng để sử dụng. Một khi gói đã được tải, nó có thể được sử dụng trong toàn bộ môi trường Dart. IDE Dart cung cấp hỗ trợ tích hợp cho việc tạo, cập nhật và xuất bản các gói. Một cách khác để đạt được kết quả tương tự là sử dụng pub
.
Lệnh | Mô tả |
pub get | Sử dụng để lấy tất cả các gói mà ứng dụng phụ thuộc vào. |
pub upgrade | Sử dụng để nâng cấp tất cả các gói mà ứng dụng phụ thuộc vào. |
pub help | Sử dụng để lấy tất cả các lệnh pub có sẵn. Điều này có thể hướng dẫn người dùng làm việc tốt hơn với các lệnh. |
Các Loại Packages Dart
Chức năng quyết định việc phân loại các gói Dart, như:
a. Packages Đa Năng:
Đây là các gói được sử dụng phổ biến nhất trong hầu hết các dự án như xử lý các đối tượng JSON, thực hiện cuộc gọi API, và nhiều hơn nữa.
Tên Gói | Mô Tả |
characters | Sử dụng để thao tác chuỗi. |
http | Sử dụng để tiêu thụ các tài nguyên http. |
intl | Sử dụng cho quốc tế hóa và cục bộ hóa. |
json_serializable | Giúp việc sử dụng gói tạo mã trở nên dễ dàng hơn. |
path | Sử dụng để thao tác với loại đường dẫn. |
stack_trace | Phân tích và thao tác các dấu vết ngăn xếp được tạo ra bởi hiện thực Dart. |
b. Packages Thư Viện Cốt Lõi Dart:
Các gói này được xây dựng dựa trên thư viện cốt lõi Dart, từ đó giúp thêm các tính năng và chức năng bị thiếu.
Thư viện Cốt lõi là một thư viện được tích hợp sẵn, tự động được nhập vào, cung cấp các bộ sưu tập cơ bản như List, Set, Maps, DateTime, và thậm chí là các lỗi. Dart có một bộ sưu tập thư viện cốt lõi rộng lớn cung cấp các yêu cầu cơ bản cần thiết cho các nhiệm vụ lập trình hàng ngày. Thư viện cốt lõi Dart hoạt động trên nhiều nền tảng như nền tảng mặc định Dart, nền tảng Dart native, và nền tảng Dart Web.
Tên Gói | Mô Tả |
collection | Gói này mở rộng trên dart: collection và thêm nhiều hàm và lớp để làm cho việc sử dụng bộ sưu tập dễ dàng hơn. |
io | Gói này mở rộng trên dart: io và được sử dụng để làm việc với tệp, socket, và hỗ trợ I/O khác cho các ứng dụng máy chủ. |
async | Gói này mở rộng trên dart: async và thêm các lớp tiện ích để làm cho tính toán bất đồng bộ dễ dàng hơn. |
c. Packages Đặc Biệt:
Các Packages đặc biệt là các gói cho phát triển di động (flutter) và Web.
Packages Plugin
Packages plugin là các gói cụ thể có một API và được viết bằng mã Dart cùng với một hoặc nhiều triển khai cụ thể cho từng nền tảng. Có thể viết các gói plugin cho các hệ điều hành như iOS, Android, MacOS, Windows, hoặc Linux cũng như để phát triển các ứng dụng Web.
Có khá nhiều gói cho Android và iOS được tối ưu hóa cho dữ liệu cũng như pin. Mặc dù có thể viết các gói sử dụng Dart cho các gói đã tồn tại, nhưng không có cách thông thường để chúng là thân thiện với thiết bị di động. Điều này dẫn đến việc tiêu tốn một lượng tài nguyên đáng kể cho vấn đề này và do đó, tốt hơn là tránh viết tất cả các gói chỉ bằng Dart.
Cần lưu ý rằng một số thư viện như các thư viện báo cáo lỗi là một phần của hệ điều hành. Một ví dụ về điều này là Dịch vụ Di động Google (GMS). GMS là một bộ sưu tập các ứng dụng và API của Google cung cấp tính năng hỗ trợ trên các thiết bị để cải thiện Trải Nghiệm Người Dùng. Các thư viện này, để giảm thiểu việc sử dụng dữ liệu, tổng hợp dữ liệu từ nhiều ứng dụng và gửi chúng theo lô cho các ứng dụng yêu cầu dữ liệu. Mã Dart không bao giờ là một phần của hệ điều hành và do đó, không tuân thủ điều này.
Xem xét một số Packages tích hợp có sẵn với Dart. Một loại dữ liệu như File có sẵn thông qua dart: io, sử dụng đó để đọc/viết vào một tệp. Một ví dụ đơn giản cho điều này được thể hiện trong đoạn mã bên dưới.
import ‘dart:io’;
//Để tạo một tệp từ một URL
File newFile =
File. fromUri (Uri.parse('file url từ Web'));
Một ví dụ khác là thực hiện các phép toán toán học như làm tròn các chữ số có thể được thực hiện bằng cách sử dụng các phương thức từ gói toán học dart tích hợp sẵn.
Tạo Packages Tự Định Nghĩa trong Dart
Các gói được sử dụng bởi Dart để chia sẻ thư viện và công cụ. Ngoài các gói tích hợp được cung cấp bởi Dart như dart:core
, dart:io
và dart:math
, người dùng cũng có thể tạo ra các gói riêng của họ. Thư mục và cấu trúc cho một gói được tạo tự động trong Dart khi sử dụng lệnh create
.
Dưới đây là một ví dụ về cách tạo một gói trong Dart trên terminal:
dart create --template=package-simple mypackage
Trong lệnh này, một gói Dart được tạo bằng lệnh dart create
với mypackage là tên của gói.
Hình bên dưới minh họa kết quả trên terminal khi thực thi lệnh.
Khi tạo gói trong Dart, một số tệp được tạo như được hiển thị trong Hình bên trên.
pubspec.yaml
Tất cả các ứng dụng Dart đều có một tệp pubspec.yaml và tệp này bao gồm các siêu dữ liệu. Tác giả gói, phiên bản, tên ứng dụng và mô tả đều được lưu trữ như một phần của siêu dữ liệu. pubspec.yaml cũng được sử dụng để tải xuống các thư viện cần thiết cho ứng dụng khi lập trình.
Hình trên mô tả cách tệp pubspec.yaml
trông như thế nào trong Dart khi tạo gói trong Dart.
Tên gói được nhìn thấy ở phần đầu của tệp. Trường này chỉ ra tên gói và cũng chỉ định cách nhập các tệp bên trong dự án này.
Đoạn mã bên dưới là một ví dụ về cách nhập tệp bên trong dự án.
import 'package:mypackage/main.dart';
Trường mô tả cho phép bạn thêm mô tả cho dự án. Đây là một trường tùy chọn. Mô tả này sẽ hiển thị cho mọi người khi gói được xuất bản trên pub.dev.
Trường phiên bản trong tệp cho phép bạn thêm một phiên bản cho ứng dụng hoặc thư viện.
Nếu ứng dụng là ứng dụng di động và được xuất bản trên Play Store hoặc App Store, thì phiên bản được gọi là phiên bản ứng dụng.
Trường môi trường thêm ràng buộc cho SDK Dart.
Đoạn mã trong Hình trên đơn giản chỉ ra rằng ứng dụng sẽ chạy trên các phiên bản SDK Dart cao hơn hoặc bằng ‘2.16.1’ và các phiên bản SDK Dart thấp hơn ‘3.0.0’. Nếu phiên bản SDK không tương thích với các gói được sử dụng, mã sẽ không thể biên dịch và hiển thị một lỗi giải quyết phiên bản không thành công. Để tránh điều này, tốt nhất là duy trì Dart được cập nhật.
Trường dev_dependencies
chỉ định các phụ thuộc ứng dụng sẽ cần trong quá trình phát triển. Hình bên dưới trình bày các phụ thuộc trong tệp .yaml
.
.gitignore
Lệnh này cho biết cho Git biết những tệp mà nó phải bỏ qua khi và khi dự án được thực hiện commit vào kho lưu trữ GitHub.
README .md
Tệp README
cung cấp thông tin chi tiết hơn về gói. Nếu gói này được xuất bản trên pub.dev, nội dung của tệp README
sẽ xuất hiện trên trang chính của gói.
Một mô tả ngắn về gói có thể được thêm vào tệp này để giúp người dùng tiềm năng. Một danh sách về những gì có thể được thực hiện bằng cách sử dụng gói cũng có thể được thêm ở đây.
Hình bên trên cho thấy cách tệp README.md
trông như thế nào trong Dart khi tạo gói trong Dart.
CHANGELOG . md
Tệp CHANGELOG.md
cung cấp thông tin về các cập nhật mới nhất cho dự án hoặc ứng dụng. Tệp này theo dõi tất cả các thay đổi được thực hiện trong dự án được tổ chức theo ngày và phiên bản. Do đó, bất kỳ cải tiến đáng chú ý hoặc lỗi nào cũng có thể được xác định bằng cách sử dụng tệp CHANGELOG.md
.
Ví dụ về ứng dụng đơn giản sử dụng một User-defined Package
Trong gói mypackage, triển khai một lớp Arithmetic nhận hai số nguyên và thực hiện các phép toán số học. Lớp này có thể được tạo bên trong lib/src/mypackage_base.dart.
class Arithmetic {
static int add(int a, int b) => a + b;
static int sub(int a, int b) => a - b;
static int multiply(int a, int b) => a * b;
static double divide(int a, int b) => a / b;
}
Đoạn mã trên hiển thị lớp Arithmetic được tạo bên trong lib/src/mypackage_base.dart của gói mypackage. Lớp này chứa bốn phương thức tĩnh để thực hiện phép cộng, phép trừ, phép chia và phép nhân tương ứng.
Bây giờ, đây là một đoạn mã từ gói mypackage và nó có thể được sử dụng trong bất kỳ dự án Dart nào.
Tạo một dự án Dart mới gọi là sample_dart_project và sử dụng các tính năng của gói mypackage.
Dưới đây là lệnh để tạo một dự án Dart mới:
dart create sample_dart_project
Trong thư mục sample_dart_project, có tệp pubspec.yaml nơi bạn có thể thêm các phụ thuộc. Dưới phần dependencies, chỉ định tên của gói và đường dẫn. Vì đây là một gói do người dùng xác định và có sẵn cục bộ, thêm phụ thuộc như được hiển thị trong Đoạn mã bên dưới.
dependencies:
mypackage:
path: /Users/rax/Dart/mypackage
Đoạn mã trên hiển thị phụ thuộc được thêm vào bên trong pubspec.yaml của dự án sample_dart_project.
Để cập nhật các phụ thuộc, chạy lệnh dart pub get
. Trong tệp lib/sample_dart_project.dart, nhập gói mypackage và sử dụng các tính năng. Bên trong hàm main(), hai biến được khai báo và các phương thức của lớp Arithmetic từ gói mypackage được gọi và in ra.
Đoạn mã bên dưới hiển thị mã từ lib/sample_dart_project.dart của dự án sample_dart_project.
import 'package:mypackage/mypackage.dart';
void main() {
int a = 10;
int b = 5;
print(Arithmetic.add(a, b));
print(Arithmetic.sub(a, b));
print(Arithmetic.multiply(a, b));
print(Arithmetic.divide(a, b));
}
Dưới đây là cách bạn có thể chạy sample_dart_project
bằng lệnh dart run lib/sample_dart_project.dart
. Điều này sẽ hiển thị đầu ra như được hiển thị trong Hình bên dưới:
dart run lib/sample_dart_project.dart