Công tắc(Switch) là một phần tử giao diện người dùng hai trạng thái được sử dụng để chuyển đổi giữa các trạng thái BẬT (Đã kiểm tra) hoặc TẮT (Bỏ chọn) . Thông thường, nó là một nút có thanh trượt ngón tay cái, nơi người dùng có thể kéo qua lại để chọn một tùy chọn ở dạng BẬT hoặc TẮT. Hoạt động của nó tương tự như công tắc điện trong nhà.

Trong Flutter , công tắc là một widget dùng để chọn giữa hai tùy chọn BẬT hoặc TẮT. Nó không tự duy trì trạng thái. Để duy trì các trạng thái, nó sẽ gọi thuộc tính onChanged . Nếu giá trị trả về bởi thuộc tính này là true , thì công tắc sẽ BẬT và sai khi nó TẮT. Khi thuộc tính này là null, widget chuyển đổi sẽ bị vô hiệu hóa. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng widget chuyển đổi trong ứng dụng Flutter.

1. Thuộc tính của Switch Widget

Một số thuộc tính cần thiết của widget chuyển đổi được đưa ra dưới đây:

Thuộc tínhMô tả
onChangedNó sẽ được gọi bất cứ khi nào người dùng chạm vào công tắc.
valueNó chứa giá trị Boolean true hoặc false để kiểm soát xem chức năng của công tắc đang BẬT hay TẮT.
activeColorNó được sử dụng để chỉ định màu của công tắc bóng tròn khi nó BẬT.
activeTrackColorNó chỉ định màu thanh chuyển hướng.
inactiveThubmColorNó được sử dụng để chỉ định màu của công tắc bóng tròn khi nó TẮT.
inactiveTrackColorNó chỉ định màu thanh công tắc khi nó TẮT.
dragStartBehaviorNó đã xử lý hành vi bắt đầu kéo. Nếu chúng ta đặt nó là DragStartBehavior.start, thì thao tác kéo sẽ di chuyển công tắc từ bật sang tắt.

Thí dụ

Trong ứng dụng này, chúng tôi đã xác định một widget chuyển đổi . Mỗi khi chúng tôi bật tắt widget chuyển đổi, thuộc tính onChanged được gọi với trạng thái mới của công tắc dưới dạng giá trị. Để lưu trữ trạng thái chuyển đổi, chúng tôi đã xác định một biến boolean isSwitched có thể được hiển thị trong đoạn mã dưới đây.

Mở IDE bạn đang sử dụng và tạo một ứng dụng Flutter. Tiếp theo, mở thư mục lib và thay thế main.dart bằng đoạn code sau.

import 'package:flutter/material.dart';  
  
void main() => runApp(MyApp());  
  
class MyApp extends StatelessWidget {  
  @override  
  Widget build(BuildContext context) {  
    return MaterialApp(  
        home: Scaffold(  
            appBar: AppBar(  
              backgroundColor: Colors.blue,  
              title: Text("Flutter Switch Example"),  
            ),  
            body: Center(  
                  child: SwitchScreen()  
            ),  
        )  
    );  
  }  
}  
  
class SwitchScreen extends StatefulWidget {  
  @override  
  SwitchClass createState() => new SwitchClass();  
}  
  
class SwitchClass extends State {  
  bool isSwitched = false;  
  var textValue = 'Switch is OFF';  
  
  void toggleSwitch(bool value) {  
  
    if(isSwitched == false)  
    {  
      setState(() {  
        isSwitched = true;  
        textValue = 'Switch Button is ON';  
      });  
      print('Switch Button is ON');  
    }  
    else  
    {  
      setState(() {  
        isSwitched = false;  
        textValue = 'Switch Button is OFF';  
      });  
      print('Switch Button is OFF');  
    }  
  }  
  @override  
  Widget build(BuildContext context) {  
    return Column(  
        mainAxisAlignment: MainAxisAlignment.center,  
        children:[ Transform.scale(  
            scale: 2,  
            child: Switch(  
              onChanged: toggleSwitch,  
              value: isSwitched,  
              activeColor: Colors.blue,  
              activeTrackColor: Colors.yellow,  
              inactiveThumbColor: Colors.redAccent,  
              inactiveTrackColor: Colors.orange,  
            )  
          ),  
          Text('$textValue', style: TextStyle(fontSize: 20),)  
        ]);  
  }  
}  

Đầu ra:

Khi chúng tôi chạy ứng dụng trong trình giả lập hoặc thiết bị, chúng tôi sẽ nhận được giao diện người dùng tương tự như ảnh chụp màn hình sau

Nếu chúng ta nhấn vào công tắc, nó sẽ thay đổi trạng thái của chúng từ TẮT sang BẬT. Xem ảnh chụp màn hình bên dưới:

2. Làm cách nào để tùy chỉnh nút Switch trong Flutter?

Flutter cũng cho phép người dùng tùy chỉnh nút chuyển đổi của họ. Tùy chỉnh làm cho giao diện người dùng tương tác hơn. Chúng tôi có thể làm điều này bằng cách thêm phụ thuộc custom_switch trong tệp pubspec.yaml và sau đó nhập nó vào tệp dart.

Thí dụ:

import 'package:flutter/material.dart';  
import 'package:custom_switch/custom_switch.dart';  
  
void main() => runApp(MyApp());  
  
class MyApp extends StatelessWidget {  
  @override  
  Widget build(BuildContext context) {  
    return MaterialApp(  
        home: Scaffold(  
            appBar: AppBar(  
              backgroundColor: Colors.blue,  
              title: Text("Custom Switch Example"),  
            ),  
            body: Center(  
                  child: SwitchScreen()  
            ),  
        )  
    );  
  }  
}  
  
class SwitchScreen extends StatefulWidget {  
  @override  
  SwitchClass createState() => new SwitchClass();  
}  
  
class SwitchClass extends State {  
  bool isSwitched = false;  
  @override  
  Widget build(BuildContext context) {  
    return Column(  
        mainAxisAlignment: MainAxisAlignment.center,  
        children:<Widget>[  
            CustomSwitch(  
              value: isSwitched,  
              activeColor: Colors.blue,  
              onChanged: (value) {  
                print("VALUE : $value");  
                setState(() {  
                  isSwitched = value;  
                });  
              },  
            ),  
          SizedBox(height: 15.0,),  
          Text('Value : $isSwitched', style: TextStyle(color: Colors.red,  
              fontSize: 25.0),)  
        ]);  
    }  
}  

Đầu ra:

Khi chúng tôi chạy ứng dụng trong trình giả lập hoặc thiết bị, chúng tôi sẽ nhận được giao diện người dùng tương tự như ảnh chụp màn hình sau:

Nếu chúng ta nhấn vào công tắc, nó sẽ thay đổi trạng thái của chúng từ TẮT sang BẬT. Xem ảnh chụp màn hình bên dưới:

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!