PRM393Chưa đoKỳ 8Chuyên ngành Cập nhật 07/09/2026

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

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ó giải thích 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.

512Câu hỏi
1Bộ đề
15Chủ đề
5,02 đánh giá

Câu hỏi của môn

464/512 câuCòn 48
ANative callbacks
BHot restart
CManual refresh
DWidget rebuilding
Lời giải
Flutter cung cấp một số cách để hỗ trợ cập nhật giao diện người dùng phản ứng. Trong đó, khái niệm Widget rebuilding là một trong những cách phổ biến nhất. Khi một widget được cập nhật, Flutter sẽ tự động rebuild widget đó và tất cả các widget con của nó, giúp đảm bảo giao diện người dùng luôn được cập nhật một cách phản ứng với các thay đổi dữ liệu. Điều này giúp cho việc phát triển ứng dụng trở nên dễ dàng hơn, vì các nhà phát triển không cần phải lo lắng về việc cập nhật giao diện người dùng thủ công.
Mở trang câu hỏi này →
AAndroid only
BAndroid, iOS, web, and desktop
CWeb servers only
DiOS only
Lời giải
Flutter là một framework phát triển ứng dụng di động đa nền tảng, cho phép các nhà phát triển xây dựng ứng dụng trên nhiều nền tảng khác nhau như Android, iOS, web và desktop chỉ với một bộ mã nguồn duy nhất. Điều này giúp giảm thiểu thời gian và công sức phát triển ứng dụng trên nhiều nền tảng khác nhau. Flutter sử dụng ngôn ngữ lập trình Dart để xây dựng ứng dụng, và có một bộ công cụ mạnh mẽ để hỗ trợ quá trình phát triển ứng dụng. Với Flutter, các nhà phát triển có thể xây dựng ứng dụng trên nhiều nền tảng khác nhau, bao gồm cả Android, iOS, web và desktop, chỉ bằng một bộ mã nguồn duy nhất.
Mở trang câu hỏi này →
A301
B404
C500
D200
Lời giải
Trạng thái mã lỗi 500 là một trong những mã lỗi phổ biến nhất trên máy chủ. Nó thường được sử dụng khi máy chủ gặp sự cố hoặc không thể thực hiện yêu cầu của người dùng. Ví dụ, nếu máy chủ gặp sự cố hoặc không thể truy cập dữ liệu, nó sẽ trả về mã lỗi 500. Ngoài ra, mã lỗi 500 cũng có thể được sử dụng khi máy chủ không thể thực hiện yêu cầu của người dùng do lỗi kỹ thuật hoặc lỗi logic. Trong trường hợp này, người dùng sẽ nhận được thông báo lỗi và có thể phải thử lại yêu cầu sau.
Mở trang câu hỏi này →
448Why are widgets lightweight in Flutter?4 lựa chọn
AThey are immutable descriptions
BThey store UI state
CThey handle rendering directly
DThey manage system resources
Lời giải
Trong Flutter, các widget nhẹ nhàng vì chúng được thiết kế để không lưu trữ trạng thái UI. Thay vào đó, chúng chỉ là những mô tả không thể thay đổi về giao diện người dùng. Điều này cho phép Flutter tái sử dụng các widget một cách hiệu quả và giảm thiểu việc tái tạo UI. Ngoài ra, các widget trong Flutter cũng không phải quản lý tài nguyên hệ thống, điều này giúp giảm thiểu việc sử dụng tài nguyên và tăng tốc độ ứng dụng. Nhờ những đặc điểm này, các widget trong Flutter trở nên nhẹ nhàng và dễ dàng sử dụng.
Mở trang câu hỏi này →
449Why is clean architecture beneficial?4 lựa chọn
AEasier maintenance and testing
BFaster builds
CFewer files
DBetter UI
Lời giải
Clean architecture là một phương pháp thiết kế phần mềm giúp phân tách các phần của ứng dụng thành các mô-đun độc lập và dễ dàng quản lý. Điều này giúp dễ dàng bảo trì và thử nghiệm ứng dụng. Khi sử dụng clean architecture, các nhà phát triển có thể thay đổi hoặc cập nhật các phần của ứng dụng mà không ảnh hưởng đến các phần khác. Điều này giúp giảm thiểu thời gian và công sức cần thiết để bảo trì và thử nghiệm ứng dụng. Ngoài ra, clean architecture cũng giúp giảm thiểu số lượng file và tăng cường khả năng mở rộng của ứng dụng.
Mở trang câu hỏi này →
Avar
Bfinal
Cconst
Dstatic
Lời giải
Trong Dart, từ khóa được sử dụng để định nghĩa một giá trị hằng số tại thời điểm biên dịch là "const". Từ khóa này được sử dụng để chỉ định một giá trị không thể thay đổi trong suốt quá trình thực thi chương trình. Điều này giúp tăng cường tính bảo mật và tránh được các lỗi do việc thay đổi giá trị hằng số không mong muốn. Ví dụ, nếu bạn định nghĩa một hằng số như sau: const pi = 3.14; thì giá trị của pi sẽ không thể thay đổi trong suốt quá trình thực thi chương trình. Ngoài ra, từ khóa "const" cũng được sử dụng để chỉ định các thuộc tính của một lớp không thể thay đổi. Điều này giúp tăng cường tính bảo mật và tránh được các lỗi do việc thay đổi thuộc tính không mong muốn.
Mở trang câu hỏi này →
451Why are const widgets recommended?4 lựa chọn
AThey add state
BThey reduce rebuild cost
CThey handle navigation
DThey improve readability
Lời giải
Widgets không thể thay đổi được (const widgets) được khuyến nghị vì chúng giúp giảm thiểu chi phí tái xây dựng (rebuild cost). Khi một widget không thể thay đổi được, nó sẽ không cần phải được tái xây dựng khi trạng thái của ứng dụng thay đổi. Điều này giúp tăng tốc độ và hiệu suất của ứng dụng. Ngoài ra, sử dụng const widgets cũng giúp giảm thiểu việc sử dụng tài nguyên hệ thống, vì chúng không cần phải được tái xây dựng liên tục. Điều này đặc biệt quan trọng trong các ứng dụng có yêu cầu về hiệu suất cao, chẳng hạn như các trò chơi hoặc các ứng dụng trực tuyến.
Mở trang câu hỏi này →
AA runtime exception occurs
BThe app runs normally
CThe value becomes null automatically
DA compile-time error occurs
Lời giải
Nếu một biến không thể null (non-nullable) không được khởi tạo trong Dart, sẽ xảy ra lỗi compile-time. Điều này có nghĩa là trình biên dịch sẽ phát hiện ra lỗi và từ chối biên dịch ứng dụng. Biến không thể null được khai báo bằng cách thêm dấu ? sau tên biến, ví dụ: int? x. Nếu biến không được khai báo là không thể null, thì nó sẽ được mặc định là có thể null. Tuy nhiên, nếu biến không thể null không được khởi tạo, thì trình biên dịch sẽ báo lỗi và yêu cầu bạn khởi tạo biến đó trước khi sử dụng.
Mở trang câu hỏi này →
AUser interface development
BGeneral-purpose programming with UI focus
CDatabase management
DNetwork security
Lời giải
Dart là một ngôn ngữ lập trình được thiết kế chủ yếu cho việc phát triển giao diện người dùng trong hệ sinh thái Flutter. Nó cung cấp một framework mạnh mẽ để xây dựng các ứng dụng di động và web với giao diện người dùng được thiết kế lại. Dart cho phép các nhà phát triển tạo ra các ứng dụng đa nền tảng với một mã nguồn duy nhất, giúp giảm thiểu thời gian và công sức phát triển. Ngoài ra, Dart cũng hỗ trợ các tính năng như mã nguồn mở, cộng đồng phát triển lớn và các công cụ phát triển mạnh mẽ, giúp các nhà phát triển có thể dễ dàng xây dựng và bảo trì các ứng dụng của mình.
Mở trang câu hỏi này →
AList
BMap
CSet
DQueue
Lời giải
Dữ liệu được sắp xếp theo thứ tự có thể được lưu trữ trong một danh sách. Trong Dart, List là một cấu trúc dữ liệu có thể được sử dụng để lưu trữ một danh sách có thứ tự. List cho phép bạn thêm, xóa và sửa đổi các phần tử trong danh sách một cách linh hoạt. Ngoài ra, List cũng cho phép bạn truy cập vào các phần tử bằng cách sử dụng chỉ số, giúp bạn dễ dàng quản lý và thao tác với dữ liệu.
Mở trang câu hỏi này →
AHot reload
BLayout builders
CWidgets
DClasses and objects
Lời giải
Dart hỗ trợ lập trình hướng đối tượng thông qua các lớp và đối tượng. Lớp là một bản thiết kế của một đối tượng, bao gồm các thuộc tính và phương thức. Đối tượng là một thực thể cụ thể được tạo ra từ một lớp. Các lớp và đối tượng cho phép lập trình viên tạo ra các ứng dụng phức tạp và tái sử dụng mã code. Ví dụ, bạn có thể tạo một lớp 'Xe' với các thuộc tính như 'màu sắc', 'loại xe' và phương thức như 'đi', 'đỗ'. Sau đó, bạn có thể tạo nhiều đối tượng 'Xe' khác nhau từ lớp 'Xe'. Điều này giúp lập trình viên viết code hiệu quả và dễ dàng bảo trì.
Mở trang câu hỏi này →
AWriting backend APIs
BSetting up the Flutter SDK
CConfiguring a database
DPublishing the app
Lời giải
Để chạy ứng dụng Flutter lần đầu tiên, bạn cần thực hiện một bước quan trọng. Bước đó là thiết lập môi trường phát triển Flutter. Điều này bao gồm việc cài đặt Flutter SDK, một bộ công cụ cần thiết để xây dựng và chạy ứng dụng Flutter. Sau khi cài đặt SDK, bạn có thể tạo dự án mới và bắt đầu xây dựng ứng dụng của mình. Việc thiết lập môi trường phát triển là bước đầu tiên quan trọng để đảm bảo ứng dụng của bạn chạy đúng và hiệu quả. Ngoài ra, bạn cũng cần đảm bảo rằng môi trường phát triển của mình được cập nhật thường xuyên để có thể tận dụng các tính năng mới và cải tiến của Flutter.
Mở trang câu hỏi này →
AUI decoration
BUser data collection
CState management
DNavigation
Lời giải
Các biểu mẫu (forms) đóng vai trò quan trọng trong các ứng dụng di động vì chúng cho phép người dùng nhập và gửi dữ liệu. Điều này giúp ứng dụng thu thập thông tin cần thiết từ người dùng, chẳng hạn như thông tin đăng ký, thông tin thanh toán, v.v. Các biểu mẫu cũng giúp ứng dụng tương tác với người dùng một cách hiệu quả hơn, tạo ra trải nghiệm người dùng tốt hơn. Ngoài ra, các biểu mẫu còn giúp ứng dụng lưu trữ và quản lý dữ liệu người dùng một cách an toàn và hiệu quả.
Mở trang câu hỏi này →
458What is technical debt?4 lựa chọn
AMemory usage
BFuture cost of poor design decisions
CUI lag
DAPI limit
Lời giải
Technical debt là một khái niệm được sử dụng trong lập trình để mô tả những quyết định thiết kế hoặc kỹ thuật không tốt trong quá trình phát triển phần mềm. Nó được coi như một loại nợ phải trả trong tương lai, vì những quyết định này sẽ gây ra những chi phí và khó khăn trong việc duy trì, sửa chữa và mở rộng phần mềm. Technical debt thường được tạo ra do việc chọn giải pháp nhanh chóng, dễ dàng nhưng không tối ưu, hoặc do thiếu hiểu biết về các kỹ thuật và công nghệ mới. Nó có thể gây ra những vấn đề như khó khăn trong việc thêm mới tính năng, tăng thời gian phát triển, giảm hiệu suất và tăng chi phí bảo trì. Vì vậy, việc quản lý và giảm thiểu technical debt là rất quan trọng để đảm bảo phần mềm được phát triển và duy trì một cách hiệu quả.
Mở trang câu hỏi này →
ASimplify syntax
BReduce code
CImprove theme
DAvoid blocking UI thread
Lời giải
Các hoạt động cơ sở dữ liệu nên được thực hiện theo cách đồng bộ vì nó giúp tránh chặn luồng UI. Khi một ứng dụng thực hiện các yêu cầu cơ sở dữ liệu đồng bộ, nó sẽ tạm dừng mọi hoạt động khác cho đến khi yêu cầu được hoàn thành. Điều này có thể dẫn đến trải nghiệm người dùng không mượt mà và ứng dụng có thể trở nên chậm chạp. Ngược lại, các hoạt động cơ sở dữ liệu được thực hiện theo cách đồng bộ cho phép ứng dụng tiếp tục thực hiện các tác vụ khác trong khi chờ đợi kết quả từ cơ sở dữ liệu. Điều này giúp cải thiện hiệu suất và trải nghiệm người dùng.
Mở trang câu hỏi này →
460How can data be passed to a new screen?4 lựa chọn
AUsing ThemeData
BUsing Scaffold
CVia constructor arguments
DUsing global variables
Lời giải
Để truyền dữ liệu đến một màn hình mới, chúng ta có thể sử dụng nhiều phương pháp khác nhau. Một trong những cách phổ biến nhất là sử dụng tham số constructor. Khi chúng ta tạo một màn hình mới, chúng ta có thể truyền dữ liệu từ màn hình hiện tại sang màn hình mới thông qua tham số constructor. Điều này cho phép chúng ta chia sẻ dữ liệu giữa các màn hình và tạo ra các ứng dụng phức tạp hơn. Ngoài ra, chúng ta cũng có thể sử dụng các phương pháp khác như sử dụng các biến toàn cục, nhưng phương pháp này không được khuyến khích vì nó có thể gây ra các vấn đề về bảo mật và khó khăn trong việc quản lý dữ liệu.
Mở trang câu hỏi này →
AWidgets are only used for layout design
BWidgets automatically manage databases
CWidgets allow code reuse across platforms
DWidgets replace backend services
Lời giải
Flutter sử dụng kiến trúc widget dựa trên widget, giúp cho việc xây dựng ứng dụng trở nên dễ dàng hơn. Một trong những lợi ích chính của kiến trúc này là khả năng tái sử dụng mã code trên các nền tảng khác nhau. Điều này có nghĩa là bạn có thể viết mã code một lần và sử dụng nó trên cả Android và iOS mà không cần phải viết lại. Điều này giúp tiết kiệm thời gian và công sức, đồng thời đảm bảo tính nhất quán và hiệu suất cao cho ứng dụng của bạn.
Mở trang câu hỏi này →
AInstantly reflect code changes in UI
BReduce memory usage
CPublish apps faster
DImprove runtime performance
Lời giải
Mục đích chính của hot reload trong Flutter là cho phép lập trình viên xem được kết quả của các thay đổi mã nguồn ngay lập tức mà không cần phải khởi động lại ứng dụng. Điều này giúp cho quá trình phát triển và thử nghiệm trở nên nhanh chóng và hiệu quả hơn. Khi sử dụng hot reload, bạn có thể nhanh chóng thử nghiệm các thay đổi mã nguồn và xem được kết quả ngay lập tức, mà không cần phải chờ đợi thời gian khởi động lại ứng dụng. Điều này giúp cho quá trình phát triển ứng dụng trở nên nhanh chóng và hiệu quả hơn.
Mở trang câu hỏi này →
ARow
BExpanded
CStack
DColumn
Lời giải
Widget nào cho phép chồng lấp nhau của các widget con? Trong Flutter, có một số widget cho phép chồng lấp nhau, nhưng widget Stack là một trong những widget phổ biến nhất. Widget Stack cho phép bạn chồng lấp nhau của các widget con, tạo ra một hiệu ứng 3D hoặc chồng lấp nhau của các widget khác nhau. Ví dụ, bạn có thể sử dụng widget Stack để tạo ra một hiệu ứng chồng lấp nhau của các hình ảnh hoặc văn bản khác nhau. Ngoài ra, bạn cũng có thể sử dụng widget Stack để tạo ra một hiệu ứng 3D, chẳng hạn như chồng lấp nhau của các hình ảnh hoặc văn bản khác nhau.
Mở trang câu hỏi này →
AScaffold
BContainer
CMaterialApp
DTheme
Lời giải
Trong Flutter, widget có thể được sử dụng để áp dụng chủ đề cho toàn bộ ứng dụng. Để áp dụng chủ đề cho toàn bộ ứng dụng, bạn cần sử dụng widget MaterialApp. Widget này cho phép bạn áp dụng chủ đề và thiết kế cho toàn bộ ứng dụng, bao gồm cả giao diện và màu sắc. Ngoài ra, bạn cũng có thể sử dụng widget MaterialApp để cấu hình các tính năng khác của ứng dụng, chẳng hạn như font chữ và kích thước biểu tượng. Vì vậy, khi bạn cần áp dụng chủ đề cho toàn bộ ứng dụng, hãy sử dụng widget MaterialApp.
Mở trang câu hỏi này →