hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Dart Flutter Framework
Xây dựng ứng dụng Flutter bằng cách sử dụng các Multi Child Layout Widgets

Xây dựng ứng dụng Flutter bằng cách sử dụng các Multi Child Layout Widgets

  • 09-06-2024
  • Toanngo92
  • 0 Comments

Mục lục

  • Widget Hàng (Row)
      • 6.1.1 Thuộc tính của Widget Hàng (Row)
  • Widget Cột (Column)
    • Các Thuộc tính của Widget Cột (Column)
  • Widget Stack
    • Thuộc tính của Widget Stack
  • ListView Widget
    • Các thuộc tính của ListView
  • GridView Widget
    • Thuộc tính của GridView
  • Widget mở rộng (Expanded)
  • Bảng (Table Widget)

Widget Hàng (Row)

Widget Hàng (Row) hiển thị các widget của nó trong một mảng ngang. Nếu một số widget cần được căn chỉnh trong cùng một dòng, chúng được đặt làm con của widget Row.

6.1.1 Thuộc tính của Widget Hàng (Row)

Một số thuộc tính của widget Hàng (Row) như sau:

  • key: Key được sử dụng để xác định một cách duy nhất.
  • mainAxisAlignment: Nó xác định kiểu căn chỉnh của trục x.
  • mainAxisSize: Xác định kích thước của trục x.
  • crossAxisAlignment: Xác định kiểu căn chỉnh của trục y.
  • textDirection: Hỗ trợ trong việc hướng văn bản.
  • verticalDirection: Xác định thứ tự để sắp xếp các con.
  • textBaseline: Xác định đường cơ sở cho văn bản.
  • children: Xác định các widget con trong widget này.

Hãy tham khảo hình dưới đây dưới đây để xem các định nghĩa tích hợp sẵn của các thuộc tính của widget Hàng (Row).

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: const <Widget>[
            Text('Row Demo 1'),
            Text('Row Demo 2'),
            Text('Row Demo 3'),
          ],
        ),
      ),
    );
  }
}

Kết quả:

Widget Cột (Column)

Widget Column được sử dụng để hiển thị các widget của nó dưới dạng một mảng dọc. Nếu mỗi widget cần được gán cho con của nó sao cho mỗi widget đều xuất hiện trên một dòng mới, thì sẽ sử dụng widget Cột (Column). Nói một cách đơn giản, các hàng tương tự như mọi người đứng cạnh nhau, trong khi các cột tương tự như mọi người đứng sau nhau như một Hàng đợi.

Các Thuộc tính của Widget Cột (Column)

Widget Cột (Column) có các thuộc tính giống như Widget Hàng (Row). Nó hoạt động theo cách tương tự, để đưa các widget vào một dòng mới. Hãy tham khảo Hình 6.3 dưới đây để xem định nghĩa tích hợp sẵn của các thuộc tính của widget Cột (Column).

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData (
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text("Column Demo"),
            Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                const Text("Demo 1"),
                const Text("Demo 2"),
                const Text("Demo 3"),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

Kết quả:

Widget Stack

Widget Stack là một widget đa con mà các con của nó chồng lên nhau. Nó được sử dụng khi muốn hiển thị các widget khác nhau lên trên nhau.

Thuộc tính của Widget Stack

Dưới đây là các thuộc tính của Widget Stack:

  • alignment: Xác định vị trí của widget được đặt, đặc biệt là Non-positioned trong Stack.
  • textDirection: Thay đổi hướng văn bản từ trái sang phải (LTR) hoặc từ phải sang trái (RTL).
  • fit: Kích thước của widget không được đặt vị trí trong Stack. Nó có ba thuộc tính cơ bản khác nhau:
    • StackFit.loose: ví dụ: 10*20 => chiều rộng từ 0 đến 10 và chiều cao từ 0 đến 20. – Non-positioned.
    • StackFit.expand: ví dụ: 10*20 => chiều rộng sẽ là 10 và chiều cao sẽ là 20.
    • StackFit.passthrough: Vẫn giữ nguyên.
  • overflow: Nó quản lý để làm tràn nội dung của widget con. Clipped hoặc hiển thị.

Tham khảo hình bên dưới, cho thấy định nghĩa tích hợp sẵn của các thuộc tính của Widget Stack.

Đoạn mã bên dưới demo cách sử dụng Widget Stack. Các con của Stack sẽ chồng lên nhau mà không có khoảng trống được áp dụng. Có thể sử dụng các widget Row hoặc Column khi muốn đặt các widget kế nhau hoặc dưới đây. Nếu các widget trong Stack cần được đặt vị trí theo một cách cụ thể, thì có thể sử dụng các widget Align hoặc Positioned.

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => MyHomePageState();
}

class MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text("Stack Demo"),
            Stack(
              children: [
                const Text("Demo 1", style: TextStyle(fontSize: 20)),
                const Text("Demo 2", style: TextStyle(fontSize: 30)),
                const Text("Demo 3", style: TextStyle(fontSize: 40)),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

Hình bên dưới hiển thị kết quả của widget của Đoạn mã trên. Quan sát cách các phần tử con đều được chồng lên nhau, gây ra sự chồng chéo.

Kết quả:

Ở đây, mỗi một con trong Stack là một widget Text. Tuy nhiên, trong các tình huống thực tế, người ta có thể sử dụng các Container, mà trong đó có thể chứa màu sắc và/hoặc văn bản. Hình bên dưới cho thấy một ví dụ về một Stack widget sử dụng các Container widget có hình dạng và màu sắc khác nhau được chồng lên nhau.

Ví dụ về Stack Widget Sử dụng các Container

ListView Widget

ListView() tương tự như widget Column nhưng có tính năng cuộn. Nó nhận danh sách các widget con và làm cho chúng có thể cuộn được. Nó chỉ hiển thị các mục mà có thể nhìn thấy.

ListView.builder(): Constructor builder giúp đơn giản hóa việc tạo danh sách các mục lặp lại. Điều này có thể được sử dụng khi danh sách các widget con giống nhau. Nó nhận hai tham số chính:

  • itemCount: Xác định số lượng mục trong danh sách.
  • itemBuilder: Xác định widget được xây dựng. Widget này sẽ được xây dựng theo itemCount.

Các thuộc tính của ListView

Dưới đây là một số thuộc tính của ListView:

  • childrenDelegate: SliverChildDelegate được cung cấp như là delegate để phục vụ cho ListView.
  • clipBehaviour: Thuộc tính này kiểm soát việc cắt nội dung.
  • itemExtent: Kiểm soát khu vực có thể cuộn trong ListView.
  • padding: Cung cấp không gian giữa ListView và các widget con của nó.
  • scrollDirection: Xác định hướng cuộn trong ListView.
  • shrinkWrap: Nhận giá trị boolean quyết định không gian có thể cuộn được được xác định bởi các widget con bên trong ListView.

Tham khảo đoạn mã bên dưới để xem ví dụ về ListView. Hình tiếp theo là kết quả cho đoạn mã này.

ListView.builder(
  itemCount: 10,
  itemBuilder: (BuildContext context, int index) {
    return ListTile(
      leading: const Icon(Icons.account_circle, size: 40,),
      title: Text("User ${index+1}", style: TextStyle(fontWeight: FontWeight.w600),),
    );
  },
);

Kết quả Widget ListView.builder

GridView Widget

GridView tương tự như ListView. Tuy nhiên, nó hiển thị dữ liệu dưới dạng hàng và cột hai chiều. Nó tương tự như cách sản phẩm được hiển thị trong một ứng dụng mua sắm.

Để hiển thị dữ liệu từ GridView, widget phổ biến nhất được sử dụng là GridView.count() và GridView.builder() khi người dùng muốn hiển thị dữ liệu một cách động.

Thuộc tính của GridView

Dưới đây là các thuộc tính của GridView:

  • itemCount: Số lượng dữ liệu được hiển thị.
  • gridDelegate: Cung cấp thuộc tính delegate cho GridView tương tự như khoảng cách và tỷ lệ khung giữa các widget.
  • itemBuilder: Widget sẽ được xây dựng và hiển thị.
  • primary: primary sẽ nhận giá trị true hoặc false và xác định liệu cuộn có liên kết với một widget cha hay không.
  • crossAxisSpacing: Chỉ định khoảng cách giữa các trục chéo.
  • mainAxisSpacing: Chỉ định khoảng cách giữa các trục chính.
  • crossAxisCount: Chỉ định số lượng dữ liệu trong trục chéo.

Tham khảo đoạn mã bên dưới để xem ví dụ về GridView. Hình tiếp theo là kết quả cho đoạn mã trên.

GridView.builder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,
    mainAxisSpacing: 10,
    crossAxisSpacing: 10,
  ),
  itemCount: 5,
  itemBuilder: (BuildContext context, int index) {
    return Card(
      color: Colors.blueGrey,
      child: Center(
        child: Text(
          'User ${index+1}',
          style: TextStyle(
            fontWeight: FontWeight.w700,
            fontSize: 25,
            color: Colors.white
          ),
        ),
      ),
    );
  },
);

Kết quả của Widget GridView.builder

Widget mở rộng (Expanded)

Widget mở rộng (Expanded) như tên của nó diễn giải mở rộng một widget con của hàng hoặc cột hoặc linh hoạt để nó sẽ chiếm không gian có sẵn.

Ví dụ, khi bạn làm việc với widget Row hoặc Column và sử dụng mainAxisAlignment.spaceBetween, nó tạo ra một khoảng trống giữa các widget con. Trong trường hợp đó, widget này có thể được sử dụng để điền vào không gian có sẵn.

Thuộc tính Flex và Child là các thuộc tính của widget mở rộng. Sử dụng mở rộng Flex để điều khiển các widget. Child được sử dụng để chứa một widget khác khi có nhiều widget được mở rộng.

Bảng (Table Widget)

Widget Bảng hiển thị các mục trong một bố cục bảng, do đó không cần thiết phải sử dụng hàng và cột để tạo bảng. Sử dụng widget Bảng là phương pháp phù hợp khi có cùng độ rộng cột cho nhiều hàng.

columnWidths và defaultColumnWidth là các thuộc tính của widget Bảng. columnWidths giúp chỉ định chiều rộng cụ thể của cột. defaultColumnWidth được sử dụng để chỉ định chiều rộng mặc định của cột. Hãy xem đoạn mã bên dưới. Hình tiếp theo hiển thị kết quả cho đoạn mã bên trên.

Table (
  // textDirection: TextDirection.rt1,
  // defaultVerticalalignment:
  TableCellVerticalAlignment.bottom,
  // border: TableBorder.all (width: 2.0,color: Colors.red),
  children: [
    TableRow (
      children: [
        Text ("Name", textScaleFactor: 1.5, style: TextStyle (fontWeight: FontWeight.w600),),
        Text ("Subject", textScaleFactor: 1.5, style: TextStyle (fontWeight: FontWeight.w600),),
        Text ("Marks",textScaleFactor: 1.5, style: TextStyle (fontWeight: FontWeight.w600),),
      ]
    ),
    TableRow (
      children: [
        Text ("Alex", textScaleFactor: 1.5),
        Text ("Maths", textScaleFactor: 1.5),
        Text ("98",textScaleFactor: 1.5),
      ]
    ),
    TableRow (
      children: [
        Text ("Henry", textScaleFactor: 1.5),
        Text ("Chemistry", textScaleFactor: 1.5),
        Text ("35", textScaleFactor: 1.5),
      ]
    ),
    TableRow (
      children: [
        Text ("Luke", textScaleFactor: 1.5),
        Text ("Physics",textScaleFactor: 1.5),
        Text ("40", textScaleFactor: 1.5),
      ]
    ),
  ]
)

Kết quả:

Bài viết liên quan:

REST API trong Flutter
Khái niệm cơ bản về cơ sở dữ liệu với Sqllite và Cơ sở dữ liệu Firebase
FutureBuilder và StreamBuilder trong Flutter
Tạo kiểu và Tạo ứng dụng đáp ứng trong Flutter
Điều Hướng, Định Tuyến và Bộ Điều Khiển trong Flutter
Quản lý trạng thái và Chèn phụ thuộc trong Flutter
Quản lý trạng thái và Chèn phụ thuộc trong Flutter
Xây dựng Ứng dụng Flutter Sử dụng Single Child Layout Widgets
Xây dựng Ứng dụng Flutter Sử dụng Widget Độc lập Nền tảng
Xây dựng ứng dụng Flutter bằng nền tảng Widget cụ thể
Applications và Widgets trong Flutter
Giới thiệu về Flutter

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×