Navigation trong Flutter – Chuyển màn hình & Truyền dữ liệu

0 0 0

Người đăng: Coder Tập Sự

Theo Viblo Asia

👋 Lời mở đầu

Tiếp tục hành trình chinh phục Flutter từ con số 0.

Trong bài viết hôm nay, chúng ta sẽ tìm hiểu về một tính năng rất cơ bản nhưng cực kỳ quan trọng khi làm app: Chuyển màn hình (Navigation)Truyền dữ liệu giữa các màn hình.

Trong quá trình tìm hiểu nếu có điểm nào chưa chính xác, rất mong nhận được góp ý từ mọi người để bài viết hoàn thiện hơn nhé 🙏

1. Navigation là gì?

Trong một ứng dụng Flutter, việc chuyển từ màn hình này sang màn hình khác (ví dụ: từ trang chính sang trang chi tiết sản phẩm) được gọi là navigation.

Flutter sử dụng một khái niệm gọi là Navigator – hoạt động giống như một ngăn xếp (stack). Mỗi lần chúng ta chuyển màn hình, một widget mới được push lên stack. Khi quay lại, màn hình sẽ được pop ra khỏi stack.

2. Ví dụ cơ bản: Chuyển từ màn hình A sang màn hình B

home_screen.dart

import 'package:flutter/material.dart';
import 'second_screen.dart'; class HomeScreen extends StatelessWidget {  Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Trang chủ')), body: Center( child: ElevatedButton( onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => SecondScreen()), ); }, child: Text('Chuyển sang màn hình 2'), ), ), ); }
}

second_screen.dart

import 'package:flutter/material.dart'; class SecondScreen extends StatelessWidget {  Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Màn hình thứ 2')), body: Center( child: ElevatedButton( onPressed: () { Navigator.pop(context); }, child: Text('Quay lại'), ), ), ); }
}

3. Truyền dữ liệu giữa các màn hình

Chúng ta có ví dụ truyền dữ liệu là một message Xin chào sang màn hình second_screen.dart

Navigator.push( context, MaterialPageRoute( builder: (context) => SecondScreen(message: 'Xin chào'), ),
);
class SecondScreen extends StatelessWidget { final String message; SecondScreen({required this.message});  Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Màn hình 2')), body: Center( child: Text(message), ), ); }
}

4. Trả dữ liệu ngược lại màn hình trước

Chúng ta cũng có thể trả ngược dữ liệu từ màn hình B về A:

HomeScreen

import 'package:flutter/material.dart';
import 'second_screen.dart'; class HomeScreen extends StatelessWidget {  Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Trang chủ')), body: Center( child: ElevatedButton( onPressed: () async { // Chuyển sang màn hình second_screen và chờ kết quả trả về final result = await Navigator.push( context, MaterialPageRoute( builder: (context) => SecondScreen(), ), ); // Hiển thị kết quả trả về (nếu có) if (result != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Kết quả: $result')), ); } }, child: Text('Đi đến second screen'), ), ), ); }
}

SecondScreen

import 'package:flutter/material.dart'; class SecondScreen extends StatelessWidget {  Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Màn hình 2')), body: Center( child: ElevatedButton( onPressed: () { // Trả dữ liệu ngược lại về màn hình home Navigator.pop(context, 'Xin chào từ second screen!'); }, child: Text('Trả dữ liệu về'), ), ), ); }
}

Lời kết

Qua bài học hôm nay, chúng ta đã nắm được cách chuyển màn hình và truyền dữ liệu trong Flutter – một bước quan trọng để tạo ứng dụng có nhiều trang và có tính tương tác cao hơn.

Ngày mai, chúng ta sẽ tiếp tục tìm hiểu về TextField, xử lý nhập liệu và quản lý controller trong form – một bước gần hơn với việc xây dựng form thực tế.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 299

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

1 1 355

- vừa được xem lúc

Dart Cheat Sheet - Full bộ "bỏ túi" các syntax trong ngôn ngữ Dart

Dart là một ngôn ngữ mới dùng cho cả Mobile và Web với Flutter Framework, thậm chí dùng cho Backend. Để giúp mọi người dễ dàng nắm bắt ngôn ngữ này hơn, 200lab Education đã tổng hợp thành bộ "bí tịch" dưới đây để tra cứu nhanh, tăng tốc phát triển phần mềm.

0 0 54

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 2: StatefulWidget vs StatelessWidget. Khi nào thì cần sử dụng cái nào?

Lời mở đầu. Ở bài trước, chúng ta đã dừng lại ở một kết thúc mở.

0 0 102

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 4: Lột trần InheritedWidget

Lời mở đầu. Trong đoạn kết của phần 2, chúng ta đã đối mặt với 1 bài toán: Làm thế nào để truyền data từ một widget cha nào đó xuống thẳng widget chắt mà không phải sử dụng constructor để truyền xuống

0 0 71

- vừa được xem lúc

Chinh phục RxDart Flutter trong 3 nốt nhạc. Nốt thứ nhất: Stream và giải thích các thuật ngữ

Lời mở đầu. Mình viết series này với mục đích chia sẻ kiến thức về RxDart trong Flutter.

0 0 80