Chào mọi người! Hôm nay chúng ta sẽ tiếp tục hành trình khám phá Flutter và đến với bài học về StatelessWidget và StatefulWidget. Trong bài này, mình sẽ giúp các bạn phân biệt sự khác nhau giữa hai loại widget này, cùng với một số widget nâng cao mà chúng ta sẽ dùng trong ứng dụng Flutter.
1. StatelessWidget vs StatefulWidget
Khi làm việc với Flutter, việc hiểu rõ sự khác nhau giữa StatelessWidget và StatefulWidget là cực kỳ quan trọng, vì chúng quyết định cách chúng ta sẽ tổ chức và cập nhật giao diện trong ứng dụng.
StatelessWidget
StatelessWidget
là widget không có trạng thái thay đổi sau khi được tạo ra. Nó chỉ render một lần và không thay đổi gì nữa trong suốt vòng đời của widget đó.
Ví dụ: Một nút bấm, một hình ảnh, hay một đoạn văn bản không thay đổi sau khi hiển thị đều có thể sử dụng StatelessWidget
.
Ví dụ về StatelessWidget:
class MyStatelessWidget extends StatelessWidget { Widget build(BuildContext context) { return Text('Hello Stateless'); }
}
StatefulWidget
StatefulWidget
là widget có thể thay đổi trạng thái sau khi được tạo ra. Khi trạng thái của widget thay đổi, nó sẽ trigger lại quá trình render, và UI sẽ được cập nhật tương ứng.
Ví dụ: Sử dụng đếm số, form nhập liệu, hoặc một ứng dụng có sự thay đổi dữ liệu sẽ sử dụng StatefulWidget
.
Ví dụ về StatefulWidget:
class MyStatefulWidget extends StatefulWidget { _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
} class _MyStatefulWidgetState extends State<MyStatefulWidget> { int _counter = 0; Widget build(BuildContext context) { return Column( children: [ Text('Counter: $_counter'), ElevatedButton( onPressed: () { setState(() { _counter++; }); }, child: Text('Increase Counter'), ), ], ); }
}
2. Các Widget Nâng Cao trong Flutter
Bên cạnh việc sử dụng StatelessWidget
và StatefulWidget
, Flutter còn cung cấp nhiều widget nâng cao để giúp chúng ta xây dựng giao diện phức tạp và bắt mắt hơn. Dưới đây là một số widget nâng cao mà mình nghĩ sẽ hữu ích cho chúng ta:
- ListView: Hiển thị danh sách các phần tử theo chiều dọc, có thể cuộn được.
- GridView: Hiển thị các phần tử dưới dạng lưới (grid).
- Form và TextFormField: Dùng để tạo các form nhập liệu trong ứng dụng.
- Hero Animation: Giúp tạo hiệu ứng chuyển cảnh giữa các màn hình.
- CustomPaint: Cho phép vẽ đồ họa tùy chỉnh, tạo các hình ảnh phức tạp hoặc hiệu ứng đặc biệt.
Chúng ta sẽ tìm hiểu cac widget này trong những bài học sau nhé 😆
3. Một Số Lỗi Thường Gặp và Cách Khắc Phục
Khi làm việc với StatefulWidget, một số lỗi phổ biến có thể xảy ra là:
- Không gọi
setState()
đúng cách: Khi bạn thay đổi dữ liệu mà không gọi setState(), giao diện sẽ không được cập nhật. Hãy chắc chắn gọi setState() khi muốn thay đổi trạng thái.
4. Kết Luận
- StatelessWidget: Dùng cho các widget không thay đổi sau khi được tạo.
- StatefulWidget: Dùng cho các widget có thể thay đổi trạng thái, giúp UI được cập nhật khi trạng thái thay đổi.
- Các widget nâng cao giúp chúng ta xây dựng giao diện linh hoạt và đẹp mắt hơn, như ListView, GridView, Form, và Hero Animation.
Qua bài học ngày hôm nay, chúng ta đã hiểu rõ hơn về cách sử dụng StatelessWidget
và StatefulWidget
, đồng thời cũng làm quen với một số widget nâng cao trong Flutter.
Ngày mai, mình sẽ tiếp tục tìm hiểu thêm về các chủ đề khác trong Flutter, có thể là về quản lý trạng thái hoặc tiếp tục với các widget phức tạp hơn.