Để khai báo một hàm bất đồng bộ (async) dưới dạng một biến trong Dart, bạn có thể sử dụng typedef để định nghĩa một kiểu hàm hoặc có thể sử dụng các hàm ẩn danh (anonymous functions). Dưới đây, tôi sẽ hướng dẫn bạn chi tiết cách thực hiện điều này.

Khai Báo Hàm Async Dưới Dạng Một Biến

1. Sử Dụng typedef để Định Nghĩa Kiểu Hàm

Trước hết, bạn có thể sử dụng typedef để định nghĩa một kiểu hàm cho các hàm bất đồng bộ mà bạn sẽ khai báo sau này. Điều này giúp mã nguồn của bạn trở nên rõ ràng và dễ bảo trì hơn.

typedef AsyncFunction<T> = Future<T> Function();

Trong ví dụ này, chúng ta định nghĩa một kiểu hàm AsyncFunction mà nhận giá trị trả về là Future<T>. Đây là cách chúng ta có thể chỉ định rằng hàm này sẽ thực hiện một tác vụ bất đồng bộ và trả về một giá trị trong tương lai.

2. Khai Báo Biến Là Một Hàm Async

Bây giờ bạn có thể khai báo một biến mà có kiểu là AsyncFunction. Để thực hiện điều này, bạn cần tạo một hàm bất đồng bộ và gán nó cho biến đó.

Future<String> fetchData() async {
    await Future.delayed(Duration(seconds: 2));
    return 'Dữ liệu đã được tải xong!';
}

AsyncFunction<String> asyncFunction = fetchData;

Trong đoạn mã trên, chúng ta đã khai báo hàm fetchData, mà sẽ giả lập việc tải dữ liệu bằng cách chờ 2 giây trước khi trả về một chuỗi. Sau đó, chúng ta gán hàm này cho biến asyncFunction có kiểu AsyncFunction<String>.

3. Gọi Hàm Async từ Biến

Để gọi hàm này, bạn chỉ cần gọi biến mà bạn đã gán hàm vào. Đừng quên sử dụng từ khóa await nếu bạn muốn chờ cho đến khi hàm thực thi xong.

void main() async {
    print('Bắt đầu tải dữ liệu...');
    String result = await asyncFunction();
    print(result);
}

Khi bạn chạy đoạn mã này, kết quả sẽ là:

Bắt đầu tải dữ liệu...
(Dữ liệu đã được tải xong! sau 2 giây)

4. Sử Dụng Hàm Ẩn Danh (Anonymous Functions)

Ngoài việc sử dụng typedef, bạn cũng có thể tạo một hàm bất đồng bộ ẩn danh và gán nó cho một biến.

AsyncFunction<String> asyncAnonymousFunction = () async {
    await Future.delayed(Duration(seconds: 3));
    return 'Dữ liệu từ hàm ẩn danh!';
};

5. Gọi Hàm Ẩn Danh

Tương tự như cách gọi hàm thông thường, bạn có thể gọi hàm ẩn danh bằng cách sử dụng biến của nó.

void main() async {
    print('Bắt đầu tải dữ liệu từ hàm ẩn danh...');
    String result = await asyncAnonymousFunction();
    print(result);
}

Khi bạn chạy đoạn mã này, bạn sẽ thấy:

Bắt đầu tải dữ liệu từ hàm ẩn danh...
(Dữ liệu từ hàm ẩn danh! sau 3 giây)

Kết Luận

Khai báo một hàm bất đồng bộ dưới dạng một biến trong Dart có thể được thực hiện dễ dàng thông qua việc sử dụng typedef hoặc hàm ẩn danh. Việc này giúp bạn tổ chức mã nguồn tốt hơn và dễ dàng quản lý các hàm bất đồng bộ trong ứng dụng của mình