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

384/512 câuCòn 128
365`sqflite` on classic Flutter Web?4 lựa chọn
ARequired on Web
BSame as mobile 100%
CUsually **not** equivalent — use other solutions (IndexedDB, Drift web, etc.)
DImages only
Lời giải
Khi sử dụng sqflite trên Flutter Web, bạn cần lưu ý rằng sqflite không phải là giải pháp tối ưu cho web. Sqflite được thiết kế cho các ứng dụng di động và có thể không tương thích hoàn toàn với các ứng dụng web. Vì vậy, khi sử dụng sqflite trên Flutter Web, bạn nên sử dụng các giải pháp khác như IndexedDB, Drift web, v.v. để lưu trữ dữ liệu. IndexedDB là một cơ sở dữ liệu được tích hợp sẵn trong trình duyệt web, cho phép bạn lưu trữ dữ liệu trong một cơ sở dữ liệu cục bộ. Drift web là một thư viện giúp bạn tạo ra các cơ sở dữ liệu dựa trên các mô hình dữ liệu. Sử dụng các giải pháp này sẽ giúp bạn có được hiệu suất và tính ổn định tốt hơn khi lưu trữ dữ liệu trên Flutter Web.
Mở trang câu hỏi này →
366Folder ui/screens usually contains?4 lựa chọn
AModels
BScreens
CAPI
DDatabase
Lời giải
Trong dự án ứng dụng di động, thư mục ui/screens thường chứa các màn hình giao diện người dùng (screens) được tạo bằng ngôn ngữ lập trình như React Native. Mỗi màn hình trong thư mục này đại diện cho một trang hoặc một hoạt động cụ thể trong ứng dụng. Ví dụ, có thể có màn hình đăng nhập, màn hình đăng ký, màn hình chủ, v.v. Mục đích của thư mục này là tổ chức và quản lý các màn hình giao diện người dùng một cách hiệu quả, giúp phát triển và bảo trì ứng dụng trở nên dễ dàng hơn.
Mở trang câu hỏi này →
Atester.pumpAndSettle()
BrootBundle.loadString()
CNavigator.pushNamed
Dtester.enterText()
Lời giải
Trong quá trình kiểm tra widget, hàm được sử dụng để kích hoạt một khung và chờ đợi cho đến khi các hiệu ứng hoạt hình hoàn tất là tester.pumpAndSettle(). Hàm này sẽ giúp hệ thống có thời gian để xử lý các hiệu ứng hoạt hình trước khi kiểm tra tiếp. Điều này rất quan trọng vì một số hiệu ứng hoạt hình có thể mất một khoảng thời gian để hoàn tất và nếu không chờ đợi, hệ thống có thể không thể kiểm tra được chính xác. Ví dụ, khi bạn sử dụng một nút bấm, hệ thống sẽ cần một khoảng thời gian để hiển thị hiệu ứng hoạt hình trước khi bạn có thể nhập tiếp thông tin. Vì vậy, sử dụng tester.pumpAndSettle() sẽ giúp hệ thống có thể kiểm tra được chính xác và hiệu quả hơn.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Thông báo địa phương là một yêu cầu tích hợp bắt buộc để đáp ứng Kết quả học tập 7 (LO7). Điều này có nghĩa là các ứng dụng phải có khả năng hiển thị thông báo cho người dùng ngay cả khi ứng dụng không hoạt động. Thông báo địa phương giúp người dùng nhận được thông tin quan trọng từ ứng dụng mà không cần phải mở ứng dụng lên. Ví dụ, ứng dụng có thể hiển thị thông báo nhắc nhở về một sự kiện quan trọng hoặc thông báo về một cập nhật mới. Việc tích hợp thông báo địa phương giúp tăng trải nghiệm người dùng và đảm bảo rằng người dùng nhận được thông tin quan trọng một cách kịp thời.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Câu hỏi này hỏi về khả năng của gói 'path_provider' trong việc truy cập các thư mục lưu trữ dữ liệu lâu dài như 'Application Documents'. Gói này cho phép ứng dụng truy cập các thư mục như thư mục lưu trữ dữ liệu, thư mục tải xuống, thư mục ảnh, v.v. Điều này giúp ứng dụng có thể lưu trữ và truy cập dữ liệu một cách dễ dàng và an toàn. Vì vậy, câu trả lời đúng là 'True', vì gói 'path_provider' thực sự cho phép ứng dụng truy cập các thư mục lưu trữ dữ liệu lâu dài.
Mở trang câu hỏi này →
AOS always deletes anytime
BOnly store APK
CUnreadable from Dart
DUser data to keep long-term (notes, export) beyond simple prefs
Lời giải
Trong lập trình di động, thư mục ứng dụng được lưu trữ trong bộ nhớ trong của thiết bị. Khi sử dụng JSON file trong thư mục này, `getApplicationDocumentsDirectory` thường được sử dụng để lưu trữ dữ liệu người dùng trong thời gian dài. Điều này có nghĩa là bạn có thể lưu trữ dữ liệu như ghi chú, xuất khẩu dữ liệu, v.v. mà không bị xóa khi ứng dụng được cập nhật hoặc xóa. Thay vào đó, dữ liệu sẽ được lưu trữ trong thư mục ứng dụng và có thể được truy cập lại sau này. Điều này rất hữu ích khi bạn cần lưu trữ dữ liệu người dùng một cách lâu dài và không muốn sử dụng các bộ nhớ tạm thời.
Mở trang câu hỏi này →
371What does offline-first mean (concept)?4 lựa chọn
ADisable SQLite
BRead local first, sync when network is available
CNever online
DFirebase only
Lời giải
Offline-first là một khái niệm trong lập trình di động, đặc biệt là khi xây dựng ứng dụng di động. Nó có nghĩa là ứng dụng sẽ hoạt động bình thường ngay cả khi không có kết nối internet. Khi không có kết nối, ứng dụng sẽ lưu trữ dữ liệu trong bộ nhớ cục bộ của thiết bị. Khi kết nối internet trở lại, ứng dụng sẽ đồng bộ hóa dữ liệu cục bộ với dữ liệu trên máy chủ. Điều này giúp đảm bảo rằng dữ liệu luôn được cập nhật và đồng bộ, ngay cả khi không có kết nối internet.
Mở trang câu hỏi này →
372What happens if local storage fails?4 lựa chọn
AFallback logic is required
BData syncs
CApp crashes
DUI freezes
Lời giải
Nếu bộ nhớ lưu trữ địa phương thất bại, ứng dụng của bạn sẽ gặp phải một số vấn đề nghiêm trọng. Trong trường hợp này, logic dự phòng là cần thiết để đảm bảo ứng dụng của bạn vẫn hoạt động bình thường. Logic dự phòng là một phần quan trọng của thiết kế ứng dụng, giúp ứng dụng của bạn có thể tiếp tục hoạt động ngay cả khi bộ nhớ lưu trữ địa phương thất bại. Điều này có thể bao gồm việc lưu trữ dữ liệu vào bộ nhớ tạm thời, sử dụng cơ sở dữ liệu thay thế hoặc thực hiện các hành động khác để đảm bảo ứng dụng của bạn vẫn hoạt động tốt.
Mở trang câu hỏi này →
AHost web servers
BPersist user settings and small data
CManage network hardware
DCompile code
Lời giải
Tính năng lưu trữ cục bộ (local storage) trong ứng dụng được sử dụng chủ yếu để lưu trữ và quản lý dữ liệu nhỏ và các thiết lập người dùng. Điều này cho phép ứng dụng lưu trữ thông tin như danh sách yêu thích, cài đặt âm thanh và hình ảnh, và các dữ liệu khác mà không cần kết nối đến máy chủ. Tính năng này cũng giúp giảm tải cho máy chủ và cải thiện hiệu suất ứng dụng. Ngoài ra, lưu trữ cục bộ còn giúp bảo vệ dữ liệu người dùng khỏi bị mất khi họ rời khỏi ứng dụng hoặc khi ứng dụng bị đóng.
Mở trang câu hỏi này →
AStyle the UI
BManage network paths
CEncrypt data
DFind commonly used locations on the host file system
Lời giải
Package path_provider được sử dụng để tìm kiếm các vị trí thường được sử dụng trên hệ thống file host. Nó cung cấp các phương thức để truy cập các thư mục như thư mục tải xuống, thư mục cache, thư mục ứng dụng và thư mục lưu trữ tạm thời. Điều này giúp các nhà phát triển có thể dễ dàng quản lý và truy cập các dữ liệu được lưu trữ trên hệ thống file host. Ví dụ, bạn có thể sử dụng package này để lưu trữ các tệp tin tải xuống trong thư mục tải xuống hoặc lưu trữ các tệp tin cache trong thư mục cache.
Mở trang câu hỏi này →
AFlutter SDK version
BDatabase schema version for migrations
CPackage version
DApp version
Lời giải
Tính chất của thuộc tính version trong hàm openDatabase() là để xác định phiên bản schema của cơ sở dữ liệu. Khi bạn mở cơ sở dữ liệu, bạn cần cung cấp phiên bản hiện tại của schema để Flutter có thể thực hiện các bản cập nhật hoặc di chuyển sang phiên bản mới. Điều này giúp đảm bảo rằng cơ sở dữ liệu luôn được cập nhật và đồng bộ với ứng dụng. Ví dụ, nếu bạn muốn thêm hoặc xóa một bảng trong cơ sở dữ liệu, bạn cần tăng phiên bản schema để Flutter biết rằng cần thực hiện các thay đổi này.
Mở trang câu hỏi này →
AWhen there is no disk
BAlways
CPrefs store unlimited arbitrary types
DWhen you need structured lists/objects beyond simple key–value
Lời giải
Khi chọn JSON file + `path_provider` so với SharedPreferences, bạn nên chọn khi cần lưu trữ danh sách hoặc đối tượng có cấu trúc phức tạp hơn so với các cặp giá trị - khóa đơn giản. Ví dụ, bạn cần lưu trữ một danh sách các sản phẩm với thông tin chi tiết như tên, giá, hình ảnh, v.v. hoặc một đối tượng người dùng với thông tin như tên, tuổi, địa chỉ, v.v. Trong trường hợp này, JSON file + `path_provider` sẽ giúp bạn lưu trữ và quản lý dữ liệu một cách hiệu quả hơn so với SharedPreferences.
Mở trang câu hỏi này →
Apath_provider
Bpubspec.yaml
Cdart:convert
DMediaQuery
Lời giải
Để sử dụng hàm `json.decode()` trong Dart, bạn cần sử dụng thư viện nào?
Mở trang câu hỏi này →
Ahive
Bpath
Cshared_preferences
Dsqflite
Lời giải
Để tìm hiểu về gói hỗ trợ SQL trong Flutter, chúng ta cần xem xét các lựa chọn đã cho. Gói Hive được sử dụng để lưu trữ dữ liệu trong bộ nhớ đệm, trong khi gói Path được sử dụng để thao tác với hệ thống tệp. Gói Shared Preferences được sử dụng để lưu trữ dữ liệu nhỏ trong bộ nhớ đệm. Tuy nhiên, gói Sqflite là gói được thiết kế để hỗ trợ SQL trong Flutter, cho phép chúng ta thực hiện các câu lệnh SQL để quản lý dữ liệu.
Mở trang câu hỏi này →
Adart:convert
Bpubspec.yaml
Cpath_provider
DMediaQuery
Lời giải
Trong một dự án Flutter, tệp tin nào được sử dụng để quản lý các phụ thuộc và khai báo tài nguyên?
Mở trang câu hỏi này →
AFirebase Authentication
BrootBundle.loadString()
Ctester.pumpAndSettle()
DIntegration testing
Lời giải
Để thực hiện đăng nhập bằng Google trong ứng dụng Flutter, bạn cần sử dụng dịch vụ Firebase Authentication. Firebase Authentication cung cấp các tính năng đăng nhập bằng Google, Facebook, Twitter và các dịch vụ khác. Nó cũng cho phép bạn tạo và quản lý tài khoản người dùng trong ứng dụng của mình. Để sử dụng Firebase Authentication trong Flutter, bạn cần thêm thư viện firebase_auth vào dự án của mình và thực hiện các bước đăng nhập bằng Google theo hướng dẫn của Firebase. Firebase Authentication là một trong những dịch vụ quan trọng nhất của Firebase và được sử dụng rộng rãi trong các ứng dụng di động và web.
Mở trang câu hỏi này →
ArootBundle.loadString()
BNavigator.pushNamed
Cflutter_local_notifications
Dtester.pumpAndSettle()
Lời giải
Để tải một tệp tin JSON được lưu trữ trong thư mục tài nguyên của dự án, bạn cần sử dụng phương thức rootBundle.loadString(). Phương thức này cho phép bạn đọc nội dung của tệp tin JSON và chuyển đổi nó thành một đối tượng JSON có thể sử dụng trong ứng dụng Flutter. Bạn có thể sử dụng rootBundle.loadString() để tải tệp tin JSON và sau đó sử dụng đối tượng JSON đó để hiển thị dữ liệu hoặc thực hiện các hành động khác. Phương thức này rất hữu ích khi bạn cần đọc dữ liệu từ tệp tin JSON trong ứng dụng của mình.
Mở trang câu hỏi này →
Apath_provider
Bpubspec.yaml
Cdart:convert
DprecacheImage()
Lời giải
Để tìm kiếm các đường dẫn hệ thống tệp cục bộ chính xác (ví dụ: thư mục Tài liệu) trên Android và iOS, bạn cần sử dụng gói thư viện phù hợp. Trong trường hợp này, gói thư viện được sử dụng để tìm kiếm các đường dẫn hệ thống tệp cục bộ chính xác là 'path_provider'. Gói này cung cấp các phương thức để tìm kiếm các thư mục hệ thống như Documents, Pictures, Music, v.v. trên cả Android và iOS. Điều này giúp cho các nhà phát triển có thể dễ dàng truy cập và sử dụng các thư mục hệ thống này trong ứng dụng của mình.
Mở trang câu hỏi này →
AString, int, double, bool, `List<String>` — complex objects often `jsonEncode` → String
Bbool only
CSQLite only
DAny Dart object
Lời giải

SharedPreferences trong Dart hỗ trợ các loại dữ liệu sau: String, int, double, bool. Ngoài ra, bạn còn có thể lưu trữ danh sách các String bằng cách sử dụng List<String>. Tuy nhiên, nếu bạn muốn lưu trữ các đối tượng phức tạp, bạn cần phải chuyển đổi chúng thành chuỗi bằng cách sử dụng jsonEncode. Điều này cho phép bạn lưu trữ các dữ liệu phức tạp như các đối tượng JSON, nhưng bạn cần phải tự thực hiện việc chuyển đổi.

Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Trong Flutter, 'SplashScreen' thường được sử dụng để xác định tuyến ban đầu dựa trên token phiên hiện có. Khi ứng dụng được khởi động, 'SplashScreen' sẽ được hiển thị trước khi chuyển đến màn hình chính. Trong thời gian này, ứng dụng có thể kiểm tra xem có token phiên hiện có hay không. Nếu có, ứng dụng có thể sử dụng token đó để xác định tuyến ban đầu và chuyển đến màn hình phù hợp. Điều này giúp ứng dụng có thể tự động chuyển đến màn hình mà người dùng đã mở trước đó, mà không cần phải nhập lại thông tin đăng nhập.
Mở trang câu hỏi này →