Các Widget này cho phép bạn quản lý một giá trị duy nhất và giữ trạng thái tạm thời và cục bộ.
Chúng tôi có các hướng đi cho Reactive và Simple.
Chúng ta có các hướng đi cho Reactive và Simple.
Ví dụ: bạn có thể sử dụng chúng để chuyển đổi văn bản tối nghĩa trong một `TextField`, có thể tạo một widget
Expandable Panel tùy chỉnh hoặc có thể sửa đổi chỉ mục hiện tại trong `BottomNavigationBar` trong khi thay đổi nội dung
bên trong một `Scaffold`.
...
...
@@ -799,7 +798,7 @@ ValueBuilder<bool>(
#### ObxValue
Tương tự như [`ValueBuilder`](#valuebuilder), nhưng đây là phiên bản Reactive, bạn kèm một lệnh Rx (nhớ cái .obs không?) và nó cập nhật tự động ... hay chưa?
Tương tự như [`ValueBuilder`](#valuebuilder), nhưng đây là phiên bản Reactive, bạn kèm một lệnh Rx (nhớ cái .obs không?) và nó cập nhật tự động ... hay chưa?
```dart
ObxValue((data)=>Switch(
...
...
@@ -823,7 +822,7 @@ var message = 'Xin Chào'.obs;
print('Message "$message" has Type ${message.runtimeType}');
```
Ngay cả khi `message` _prints_ giá trị String, Loại là ** RxString **!
Ngay cả khi `message` _prints_ giá trị String, thì kiểu của nó lại là ** RxString **!
Vì vậy, bạn không thể thực hiện `message.substring (0, 4) '. Bạn phải truy cập vào `value`thực bên trong _observable_: Cách được sử dụng nhiều nhất là`.value`, nhưng, bạn có biết rằng bạn cũng có thể sử dụng ...
...
...
@@ -917,20 +916,20 @@ print( user );
## StateMixin
Một cách khác để xử lý trạng thái `UI` của bạn là sử dụng`StateMixin <T>`.
Để triển khai nó, hãy sử dụng dấu `with` để thêm`StateMixin <T>`bộ điều khiển của bạn cho phép tích hợp kèm mô hình T.
Để triển khai nó, hãy sử dụng dấu `with` để thêm`StateMixin <T>`vào bộ điều khiển (controller) của bạn cho phép tích hợp kèm mô hình T.
Phương thức `change()` thay đổi trạng thái bất cứ khi nào chúng ta muốn.
Phương thức `change()` thay đổi trạng thái bất cứ khi nào chúng ta muốn.
Chỉ cần chuyển dữ liệu và trạng thái theo cách này:
```dart
change(data,status:RxStatus.success());
```
RxStatus allow these status:
RxStatus cho phép những trang thái này:
```dart
RxStatus.loading();
...
...
@@ -939,7 +938,7 @@ RxStatus.empty();
RxStatus.error('message');
```
To represent it in the UI, use:
Để biểu hiện nó trên UI, sử dụng:
```dart
classOtherClassextendsGetView<Controller>{
...
...
@@ -989,7 +988,7 @@ Là một Widget `const Stateless` có getter` controller` cho một `Controller
#### GetResponsiveView
Mở rộng tiện ích này để xây dựng chế độ responsive.
Ưidget này chứa thuộc tính `screen` có tất cả
Widget này chứa thuộc tính `screen` có tất cả
thông tin về kích thước và loại màn hình.
##### Hướng dẫn sử dụng trước khi dùng
...
...
@@ -998,9 +997,9 @@ Bạn có hai lựa chọn để xây dựng nó.
- với phương thức `builder` bạn trả về tiện ích con để xây dựng.
- với các phương thức `desktop`,` tablet`, `phone`,` watch`. cụ thể, các phương thức này sẽ tạo các loại màn hình khớp với ngữ cảnh khi màn hình là [ScreenType.Tablet] thì phương thức `tablet` sẽ được tạo ra và cứ như vậy.
**Chí ú:** Nếu bạn dùng cái này, nhớ đặt `alwaysUseBuilder` thành `false`
**Chú ý:** Nếu bạn dùng cái này, nhớ đặt `alwaysUseBuilder` thành `false`
Với `settings` property bạn có thể đặt chiều dài tối thiểu cho các loại màn hình.
Với thuộc tính `settings` bạn có thể đặt chiều dài tối thiểu cho các loại màn hình.
@@ -1012,13 +1011,13 @@ Hầu hết mọi người không biết gì về Widget này, hoặc hoàn toà
Trường hợp sử dụng rất hiếm, nhưng rất cụ thể: Nó `caches` một Bộ điều khiển.
Bởi vì _cache_ không thể là một `const Stateless`.
> So, when do you need to "cache" a Controller?
> Vậy khi nào mình cần cache bộ điều khiển (controller)?
Nếu sử dụng, bạn sẽ dùng cái này **GetX**: `Get.create()`.
`Get.create(()=>Controller())` sẽ tạo một `Controller` với mỗi lần gọi `Get.find<Controller>()`,
Đó là nơi mà `` GetWidget` tỏa sáng ... chẳng hạn như bạn có thể sử dụng nó, để giữ một danh sách các mục Todo. Vì vậy, nếu widget được "xây dựng lại", nó sẽ giữ nguyên phiên bản controller.
Đó là nơi mà `GetWidget` tỏa sáng ... chẳng hạn như bạn có thể sử dụng nó, để giữ một danh sách các mục Todo. Vì vậy, nếu widget được "xây dựng lại", nó sẽ giữ nguyên phiên bản controller.
#### GetxService
...
...
@@ -1066,7 +1065,7 @@ class SettingsService extends GetxService {
```
Cách duy nhất để thực sự xóa một `GetxService`, là với`Get.reset ()`giống như cách thức "Khởi động nóng" ứng dụng của bạn. Vì vậy, hãy nhớ rằng, nếu bạn cần sự tồn tại tuyệt đối của một class trong vòng đời tồn tại của nó trong ứng dụng của bạn, hãy sử dụng `GetxService`.
Cách duy nhất để thực sự xóa một `GetxService`, là với `Get.reset ()` giống như cách thức "Khởi động nóng" ứng dụng của bạn. Vì vậy, hãy nhớ rằng, nếu bạn cần sự tồn tại tuyệt đối của một class trong vòng đời tồn tại của nó trong ứng dụng của bạn, hãy sử dụng `GetxService`.