Tìm hiểu về stateless và statefull trong flutter

Tìm hiểu về stateless và statefull trong flutter

Trong Flutter, StatelessWidgetStatefulWidget là hai loại widget cơ bản được sử dụng để xây dựng giao diện người dùng (UI). Dưới đây là giải thích chi tiết và các trường hợp sử dụng thực tế:


1. StatelessWidget

StatelessWidget là một widget không có trạng thái bên trong. Điều này có nghĩa là UI của widget không thay đổi theo thời gian hoặc khi có các sự kiện tương tác.

Đặc điểm:

  • Không thể thay đổi dữ liệu bên trong widget sau khi nó được khởi tạo.
  • Thường được sử dụng cho các widget hiển thị dữ liệu tĩnh hoặc giao diện không yêu cầu cập nhật.

Cách sử dụng:

import 'package:flutter/material.dart';

class MyStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Stateless Widget Example'),
      ),
      body: Center(
        child: Text('This is a StatelessWidget'),
      ),
    );
  }
}
Dart

Khi nào sử dụng:

  • Hiển thị nội dung tĩnh như văn bản, hình ảnh, hoặc các nút không cần thay đổi trạng thái.
  • Ví dụ:
    ・Trang “About Us” với thông tin cố định.
    ・Danh sách sản phẩm không yêu cầu tương tác.

2. StatefulWidget

StatefulWidget là một widget có trạng thái bên trong. Trạng thái của nó có thể thay đổi trong suốt vòng đời của widget, và khi trạng thái thay đổi, giao diện người dùng sẽ được cập nhật lại.

Đặc điểm:

  • Có một lớp State đi kèm để lưu trữ và quản lý trạng thái.
  • Thường được sử dụng cho các widget yêu cầu sự thay đổi liên tục (ví dụ: nhập dữ liệu, nhấn nút, tải dữ liệu từ API).

Cách sử dụng:

import 'package:flutter/material.dart';

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Stateful Widget Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('You have pushed the button this many times:'),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
Dart

Khi nào sử dụng:

  • Widget cần lưu trữ hoặc thay đổi trạng thái bên trong.
  • Ví dụ:
    • Biểu mẫu nhập liệu (form).
    • Bộ đếm số lượt nhấn nút.
    • Danh sách sản phẩm với chức năng thêm vào giỏ hàng.

3. Case Study Thực Tế

StatelessWidget:

  • Ứng dụng e-commerce:
    • Hiển thị danh sách các danh mục sản phẩm.
    • Trang giới thiệu công ty hoặc thông tin liên hệ.
  • Ứng dụng tin tức:
    • Hiển thị tiêu đề và nội dung bài viết không cần tương tác.

StatefulWidget:

  • Ứng dụng e-commerce:
    • Thêm sản phẩm vào giỏ hàng và cập nhật số lượng trong thời gian thực.
    • Thanh toán và hiển thị tổng tiền theo các sản phẩm đã chọn.
  • Ứng dụng mạng xã hội:
    • Hiển thị lượt thích (like) khi người dùng nhấn nút.
    • Cập nhật danh sách tin nhắn mới nhất trong thời gian thực.

4. Tóm Tắt

Loại WidgetKhi nào dùng
StatelessWidgetNội dung tĩnh, không yêu cầu thay đổi trạng thái.
StatefulWidgetNội dung động, cần phản ứng với các sự kiện hoặc thay đổi trạng thái trong vòng đời của widget.
Nếu bạn muốn giao diện tối ưu, hãy sử dụng StatelessWidget bất cứ khi nào có thể vì chúng nhẹ hơn và hiệu quả hơn trong việc render. Chỉ dùng StatefulWidget khi thực sự cần thiết.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *