Web - Dart 04 - Event (Bài trước)

package:js/js.dart giới thiệu và cài đặt

Gói này cung cấp các chức năng để bạn có thể gọi các hàm JavaScript từ Dart và ngược lại gọi các hàm của Dart trong JavaScript.

Gói package:js/js.dart là mở rộng của thư viện chuẩn dart:js, nên khi sử dụng bạn sẽ không nạp thư viện dart:js nữa mà nạp package:js/js.dart

Để cài đặt, cần khai báo trong pubspec.yaml

dependencies:
  js: ^0.6.2
  ...

Sau đó thực hiện lệnh

pub get

Lúc này trong file code nào cần sử dụng thư viện thì khai báo

import 'package:js/js.dart';

Dart gọi hàm Javascript

Bạn có thể gọi hàm Javascript từ Dart, ví dụ để gọi hàm JSON.stringify thì khai báo

@JS()           /// Thiết lập ngữ cảnh đến `window`
library mylib   /// Khai báo thư viện, tên thư viện tùy đặt

@JS('JSON.stringify')
external String stringify(Object obj);

Lúc này trong Dart có thể dùng hàm stringify(object)

Gọi jQuery thì khai báo như sau, ví dụ cần dùng hàm css, animate, fadeOut

@JS()
class jQuery {
  external factory jQuery(String selector);
  external int get length;
  external jQuery css(Map options);
  external jQuery animate(Map options);
  external jQuery fadeOut(Map options);
}

JavaScript gọi hàm của Dart

Giả sử bạn mong muốn có một hàm JavaScript với tên tonghaiso(a,b), nghĩa là có thể gọi hàm như sau:

<script>
    tonghaiso(1,3);
    //Hoặc
    window.tonghaiso(1,3)
</script>

Vấn đề là khi bạn gọi hàm đó từ JavaScript thì nó sẽ gọi một hàm có tên là _sum2number(a, b) trong Dart

Vậy sẽ xây dựng mã trong Dart như sau:

@JS()           /// Thiết lập ngữ cảnh đến `window`
library mylib   /// Khai báo thư viện, tên thư viện tùy đặt

import 'package:js/js.dart';

/// Gán hàm với tên tonghaiso để gọi được từ Javascript `window.tonghaiso(a,b)`
@JS('tonghaiso')
external set _tonghaiso(double Function(double a, double b) f);

double _sum2number(double a, double b) {
  var s = (a + b);
  window.alert(s.toString());
  return s;
}

/// Nếu muốn dart gọi được hàm tonghaiso thì thêm vào
/// @JS()
/// external void tonghaiso(double a, double b);


void main() {
    // Thiết lập cho phép `tonghaiso()` or `window.tonghaiso()`.
   _tonghaiso = allowInterop(_sum2number);
}
Đăng ký theo dõi ủng hộ kênh
Web - Dart 04 - Event (Bài trước)