Hỗ trợ đào tạo

Lập trình di động (Flutter) - Mobile Programming

15Chủ đề
512Câu hỏi

Lập trình di động với Flutter là môn học xây dựng ứng dụng đa nền tảng Android và iOS bằng Flutter và ngôn ngữ Dart. Ngân hàng câu hỏi trắc nghiệm PRM393 có đáp án bao quát trọn bộ chương trình: cài đặt Flutter SDK, cấu trúc project, hot reload và DevTools, nền tảng Dart (kiểu dữ liệu, null safety, class, collection, Map, generics, mixin, package và import), lập trình bất đồng bộ với Future, async/await, Stream, StreamController và StreamBuilder, dựng giao diện bằng widget tree, Scaffold, ListView, ThemeData, bố cục Row/Column, GridView, Stack, LayoutBuilder, MediaQuery và responsive UI, điều hướng với Navigator 1.0/2.0, named route, deep link và guarded route, form với TextEditingController và validation, gọi REST API bằng http, parse JSON, FutureBuilder, phân trang và caching, lưu trữ cục bộ bằng SharedPreferences, SQLite (sqflite) và Hive, xác thực bằng token và refresh token, quản lý state với setState, Provider, BLoC và Cubit, animation với Tween cùng AnimatedSwitcher, tối ưu hiệu năng bằng RepaintBoundary và thu hẹp phạm vi rebuild, kiểm thử unit/widget/integration, quản lý mã nguồn bằng Git và build - release ứng dụng. Tài liệu ôn thi FE dành cho sinh viên FPT University.

Chủ đề học tập

Mobile Programming

PRM393 - Bất đồng bộ: Future, async/await, Stream

Xử lý bất đồng bộ trong Dart: Future đại diện cho một giá trị sẽ có trong tương lai, Stream cung cấp chuỗi sự kiện liên tục. Chủ đề làm rõ cách đánh dấu hàm async, dùng await để chờ Future, kiểu trả về luôn là Future dù thân hàm trả giá trị thường, xử lý lỗi bằng try-catch trong hàm async, chuỗi .then(), Future.delayed để mô phỏng độ trễ mạng, StreamController.broadcast cho nhiều listener, và thứ tự ưu tiên microtask trên event queue.

0Bộ đềbộ đề
46+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Bố cục và layout

Dựng bố cục trong Flutter theo mô hình cha truyền ràng buộc — con chọn kích thước. Chủ đề bao quát Column xếp dọc và Row xếp ngang, Container gộp padding, margin và trang trí, SizedBox điều khiển kích thước, Expanded chiếm phần không gian còn trống trên trục chính, Stack cho phép các phần tử chồng lên nhau, ListView.builder dựng lười cho danh sách dài, GridView, SingleChildScrollView, cùng cách xử lý lỗi tràn bố cục.

0Bộ đềbộ đề
21+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Dart cơ bản: biến, kiểu dữ liệu, null safety

Nền tảng ngôn ngữ Dart: khai báo biến với var, final, const và late; các kiểu int, double, num, bool, String; ba collection List, Set, Map và điểm khác nhau về thứ tự cùng tính duy nhất. Chủ đề đi sâu vào null safety — dấu ? cho biến nullable, toán tử ?? trả giá trị mặc định, ??= chỉ gán khi null, và dấu ! khẳng định không null — kèm các toán tử số học, so sánh, ép kiểu as và nội suy chuỗi.

0Bộ đềbộ đề
62+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Dart nâng cao: OOP, thư viện, cấu trúc điều khiển

Lập trình hướng đối tượng trong Dart: class là bản thiết kế còn object là thể hiện, constructor mặc định và constructor có tên, factory constructor trả về thể hiện sẵn có hoặc lớp con, kế thừa với extends, cài đặt giao diện với implements và trộn mã bằng mixin. Chủ đề bao gồm cấu trúc điều khiển if/else, for, while, do-while, switch cùng break và continue, cách tổ chức thư viện bằng import, show, hide, as và cặp part/part of.

0Bộ đềbộ đề
54+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Form và Validation

Thu thập và kiểm tra dữ liệu người dùng. Chủ đề trình bày widget Form nhóm nhiều trường, GlobalKey<FormState> để gọi validate, save và reset trên toàn biểu mẫu, khác biệt giữa TextField và TextFormField, hàm validator trả về null khi hợp lệ và trả chuỗi lỗi khi không, callback onSaved lưu giá trị, AutovalidateMode.onUserInteraction cân bằng trải nghiệm, FocusNode và textInputAction điều khiển tiêu điểm cùng bàn phím.

0Bộ đềbộ đề
30+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Giới thiệu Flutter và kiến trúc

Tổng quan Flutter — bộ công cụ giao diện đa nền tảng của Google — và kiến trúc ba lớp Framework (Dart), Engine (C/C++) và Embedder. Chủ đề làm rõ vì sao Flutter tự vẽ pixel bằng engine riêng thay vì gọi view native, cách Dart biên dịch JIT khi phát triển và AOT khi phát hành, đường đi từ cây widget qua Element và RenderObject tới GPU, vai trò của Platform Channel khi cần gọi mã Kotlin/Swift, cùng các lệnh nền tảng như flutter doctor và pubspec.yaml.

0Bộ đềbộ đề
57+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Hiệu năng và triển khai

Tối ưu hiệu năng và đưa ứng dụng lên cửa hàng. Chủ đề gồm lý do đo FPS và độ giật ở chế độ Profile thay vì Debug, dùng const cho widget tĩnh để tránh dựng lại, ValueKey giữ trạng thái khi danh sách thay đổi thứ tự, Selector thu hẹp phạm vi rebuild, precacheImage nạp ảnh trước, lệnh flutter clean và flutter build apk --analyze-size xem thành phần chiếm dung lượng, định dạng AppBundle .aab cho Google Play, cùng versionCode và versionName.

0Bộ đềbộ đề
45+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Kiểm thử và gỡ lỗi

Bảo đảm chất lượng ứng dụng Flutter. Chủ đề trình bày kim tự tháp kiểm thử với nhiều unit test nhanh và ổn định, ít bài integration chậm nhưng bao phủ đầu cuối. Nội dung gồm mẫu Arrange–Act–Assert, thư mục test lưu mã kiểm thử, pumpWidget dựng giao diện, khác biệt giữa pump một khung hình và pumpAndSettle chờ hết hoạt ảnh, find.text cùng find.byKey định vị widget, tester.enterText mô phỏng nhập liệu, và Widget Inspector trong DevTools.

0Bộ đềbộ đề
23+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Lưu trữ cục bộ

Lưu dữ liệu ngay trên thiết bị. Chủ đề so sánh SharedPreferences cho cặp khóa–giá trị đơn giản như token và cài đặt, gói path_provider tìm thư mục Documents hay Temporary, ghi đọc tệp JSON cho cấu trúc phức tạp hơn, sqflite cung cấp SQLite quan hệ với tham số version phục vụ nâng cấp lược đồ, cùng Hive. Nội dung gồm nguyên tắc offline-first đọc dữ liệu cục bộ trước rồi đồng bộ khi có mạng, và xử lý khi lưu trữ thất bại.

0Bộ đềbộ đề
31+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Quản lý trạng thái và Provider

Quản lý trạng thái từ cục bộ tới toàn cục. Chủ đề bắt đầu ở setState cho thay đổi trong phạm vi một State, chỉ ra khi nào nên nâng trạng thái lên widget cha để chia sẻ, rồi tới InheritedWidget truyền dữ liệu xuống cây mà không phải chuyền tham số từng cấp. Phần Provider làm rõ ChangeNotifier, khác biệt giữa context.watch đăng ký dựng lại và context.read chỉ đọc một lần, widget Consumer, Selector giảm rebuild, và MultiProvider.

0Bộ đềbộ đề
23+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - REST API và JSON

Kết nối ứng dụng Flutter với máy chủ. Chủ đề bao gồm gói http gửi yêu cầu GET, POST, PUT, DELETE, ý nghĩa các mã trạng thái như 200, 201, 401 và 403, thư viện dart:convert với jsonEncode và jsonDecode, factory Model.fromJson ánh xạ Map thành đối tượng Dart, FutureBuilder tự dựng lại giao diện theo trạng thái Future, lý do tách lớp Service hoặc Repository khỏi widget, xử lý SocketException, timeout và nút thử lại.

0Bộ đềbộ đề
31+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Responsive và Adaptive

Xây dựng giao diện thích ứng nhiều kích thước màn hình. Chủ đề phân biệt responsive — đổi bố cục theo không gian — với adaptive — đổi kiểu điều hướng theo nền tảng. Nội dung gồm MediaQuery cung cấp kích thước và hướng thiết bị, LayoutBuilder lấy ràng buộc từ widget cha thay vì toàn màn hình, OrientationBuilder phân biệt dọc ngang, Wrap tự xuống dòng khi hết chỗ, SafeArea tránh notch và thanh trạng thái, cùng viewInsets khi bàn phím hiện lên.

0Bộ đềbộ đề
13+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Widget và vòng đời

Widget là đơn vị dựng nên toàn bộ giao diện Flutter và luôn bất biến. Chủ đề phân biệt StatelessWidget không có trạng thái nội bộ với StatefulWidget thay đổi theo thời gian, vai trò của phương thức build trả về cây widget, ý nghĩa BuildContext định vị widget trên cây, vòng đời từ initState tới dispose, cách setState đánh dấu widget cần dựng lại, các widget khung như MaterialApp và Scaffold, ThemeData, cùng khác biệt giữa Hot Reload và Hot Restart.

0Bộ đềbộ đề
29+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Xác thực và phiên đăng nhập

Xác thực người dùng và duy trì phiên đăng nhập. Chủ đề phân biệt authentication xác định bạn là ai với authorization quyết định bạn được làm gì, cấu trúc JWT với phần payload chỉ mã hoá Base64URL nên đọc được còn chữ ký mới chống sửa, khác biệt giữa access token ngắn hạn và refresh token, header Authorization dạng Bearer, Firebase Authentication cùng Google Sign-In và khoá SHA, SplashScreen định tuyến theo token, hết phiên và đăng xuất an toàn.

0Bộ đềbộ đề
24+Câu hỏicâu hỏi
đăng ngày
Mobile Programming

PRM393 - Điều hướng và Navigator

Điều hướng giữa các màn hình bằng Navigator. Chủ đề trình bày ngăn xếp route, push mở màn mới và pop đóng màn hiện tại, pushReplacement thay thế route để tránh quay lại màn đăng nhập, named route khai báo tập trung cùng Navigator.pushNamed cho ứng dụng lớn, MaterialPageRoute quản lý hoạt ảnh chuyển cảnh theo nền tảng, cách nhận dữ liệu trả về từ màn con, widget Hero cho hiệu ứng bay, cùng ưu điểm khai báo của Navigator 2.0.

0Bộ đềbộ đề
23+Câu hỏicâu hỏi
đăng ngày

Đề thi trắc nghiệm

Xem tất cả
Học từ ngân hàng câu hỏi

Bắt đầu một phiên học theo môn

Tiến độ của bạn sẽ luôn được tính toán và đồng bộ trực tiếp theo tổng số lượng câu hỏi mới nhất của môn học này.

512Ngân hàng hiện tại
--Tiến độ môn
Số câu hỏi
Độ khó
Phiên sắp tạo
512 câu Chế độ học Không giới hạn Trộn

Bạn cần đăng nhập để bắt đầu học từ ngân hàng câu hỏi và lưu tiến độ theo môn.

0Dễ · --
0Trung bình · --
0Khó · --
--Đã học
--Đang nắm chắc
Đăng nhập để xemLần hoàn tất gần nhất

Đang tải phân bố độ khó.

Đăng nhập để bắt đầu học từ ngân hàng câu hỏi, lưu tiến độ theo môn, resume phiên đang dở và cập nhật thống kê dài hạn.
Đánh giá môn học

Người học chấm Lập trình di động (Flutter) - Mobile Programming ra sao?

Trung bình từ các phiên học hợp lệ.

5.0
2 lượt chấm

Ngân hàng câu hỏi

Xem trước · Cuộn vô hạn
Xem tất cả
Đang hiển thị 8 / 512 câu hỏi
Bấm vào từng câu để xem đáp án
#001
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
flutter_testĐÚNG
Bprovider
Chttp
Dsqflite
Giải thích

Đáp án đúng: A. flutter_test là gói kiểm thử chính thức đi kèm SDK, cung cấp testWidgets, WidgetTester, các matcher như findsOneWidget và các tiện ích bơm khung hình để kiểm thử unit lẫn widget; nó được khai báo trong dev_dependencies của pubspec.yaml. Provider (B) là giải pháp quản lý trạng thái, http (C) dùng để gọi API và sqflite (D) là cơ sở dữ liệu cục bộ - cả ba đều là gói chức năng của ứng dụng chứ không phải hạ tầng kiểm thử. Riêng kiểm thử tích hợp dùng thêm gói integration_test.

#002
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AContainer
ScaffoldĐÚNG
CColumn
DListView
Giải thích

Đáp án đúng: B. Scaffold là widget dựng khung cho một màn hình theo Material Design: nó cung cấp sẵn các khe cho appBar, body, floatingActionButton, drawer, bottomNavigationBar và snackBar, đồng thời xử lý đúng vùng an toàn cùng bàn phím. Container (A) chỉ là hộp trang trí và định kích thước cho một widget con; Column (C) sắp xếp các widget theo chiều dọc; ListView (D) hiển thị danh sách cuộn được. Cả ba đều thường nằm BÊN TRONG body của Scaffold chứ không thay thế được vai trò khung màn hình của nó.

#003
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AA cloud hosting service
BA physical server
An emulator or physical deviceĐÚNG
DA database management system
Giải thích

Đáp án đúng: C. Để chạy và kiểm thử ứng dụng Flutter trên máy cá nhân, bạn cần một đích chạy thực sự: máy ảo Android, trình giả lập iOS hoặc một thiết bị vật lý kết nối qua USB - flutter devices sẽ liệt kê chúng. Dịch vụ lưu trữ đám mây (A) và máy chủ vật lý (B) là hạ tầng phía sau, không cần cho việc chạy ứng dụng di động cục bộ; hệ quản trị cơ sở dữ liệu (D) chỉ cần khi ứng dụng thực sự dùng tới, không phải điều kiện để khởi chạy.

#004
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AUnit Tests
BWidget Tests
Integration TestsĐÚNG
DDebug Tests
Giải thích

Đáp án đúng: C. Kim tự tháp kiểm thử có đáy rộng là unit test - nhiều nhất vì nhanh, rẻ và dễ khoanh vùng lỗi; ở giữa là widget test (tương đương integration/component test trong các nền tảng khác); trên đỉnh là integration test chạy toàn ứng dụng trên thiết bị hoặc trình giả lập. Vì integration test chậm, đắt và dễ gãy nhất nên phải dùng ÍT nhất, chỉ cho các luồng nghiệp vụ then chốt. "Debug Tests" (D) không phải một loại kiểm thử trong kim tự tháp này.

#005
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AKotlin
BSwift
DartĐÚNG
DJavaScript
Giải thích

Đáp án đúng: C. Flutter dùng ngôn ngữ Dart do chính Google phát triển. Dart phù hợp với Flutter nhờ hai chế độ biên dịch: JIT khi phát triển để hỗ trợ hot reload, và AOT khi phát hành để sinh mã máy chạy nhanh; kèm theo là mô hình đơn luồng với isolate và cơ chế thu gom rác tối ưu cho việc dựng cây widget liên tục. Kotlin (A) và Swift (B) là ngôn ngữ native của Android và iOS, chỉ xuất hiện trong Flutter khi cần viết platform channel; JavaScript (D) là ngôn ngữ của React Native, không phải Flutter.

#006
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
Alinear
BeaseIn
bounceOutĐÚNG
Ddecelerate
Giải thích

Đáp án đúng: C. Curves.bounceOut tạo hiệu ứng nảy ở CUỐI hoạt ảnh: giá trị vượt qua đích rồi nảy lại vài lần với biên độ giảm dần trước khi dừng hẳn, giống quả bóng rơi xuống sàn. Curves.linear (A) chạy đều tuyệt đối, không có gia tốc nên không nảy; Curves.easeIn (B) khởi động chậm rồi nhanh dần, kết thúc đột ngột; Curves.decelerate (D) bắt đầu nhanh rồi chậm dần tới đích. Ngoài bounceOut, họ đường cong nảy còn có bounceIn và bounceInOut cho hiệu ứng ở đầu hoặc cả hai đầu.

#007
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
AFramework Layer
Engine LayerĐÚNG
CEmbedder Layer
DWidget Layer
Giải thích

Đáp án đúng: B. Kiến trúc Flutter gồm ba tầng. Tầng Framework viết bằng Dart, chứa widget, hoạt ảnh, cử chỉ. Tầng Engine viết bằng C++, chịu trách nhiệm kết xuất đồ hoạ thông qua Skia (nay là Impeller), quản lý bố cục ở mức thấp, chạy Dart runtime và xử lý văn bản. Tầng Embedder gắn engine vào từng nền tảng cụ thể, lo vòng đời ứng dụng và sự kiện đầu vào. Vì câu hỏi nói tới việc kết xuất bằng C++ với Skia nên đó chính là Engine Layer; Widget Layer (D) là một phần con của Framework, không phải một tầng riêng.

#008
ĐỘ CHÍNH XÁC
4 LỰA CHỌN
ASliverGrid
SliverListĐÚNG
CSliverAppBar
DSliverFillRemaining
Giải thích

Đáp án đúng: B. Trong CustomScrollView, các phần cuộn được tạo bởi các sliver. SliverList là sliver dùng để hiển thị một danh sách các phần tử theo chiều cuộn, tương đương ListView nhưng đặt được cạnh các sliver khác. SliverGrid (A) sắp phần tử theo lưới nhiều cột; SliverAppBar (C) là thanh tiêu đề co giãn hoặc ghim khi cuộn; SliverFillRemaining (D) lấp đầy phần không gian còn thừa của viewport. Cả ba đều là sliver hợp lệ nhưng không phải dạng dùng cho một danh sách cuộn thông thường.

Cuộn để tải thêm…