PRM393Chưa đoKỳ 8Chuyên ngành Cập nhật 07/09/2026
Lập trình di động (Flutter) - Mobile Programming
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
Mở trang câu hỏi này →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.
366Folder ui/screens usually contains?4 lựa chọn
A
ModelsB
ScreensC
APID
DatabaseLời giải
Mở trang câu hỏi này →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.
367In widget testing, which function is used to trigger a frame and wait for animations to complete?4 lựa chọn
A
tester.pumpAndSettle()B
rootBundle.loadString()C
Navigator.pushNamedD
tester.enterText()Lời giải
Mở trang câu hỏi này →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.
A
TrueB
FalseLời giải
Mở trang câu hỏi này →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.
A
TrueB
FalseLời giải
Mở trang câu hỏi này →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.
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
Mở trang câu hỏi này →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.
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
Mở trang câu hỏi này →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.
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
Mở trang câu hỏi này →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.
373What is the main use of local storage in apps?4 lựa chọn
AHost web servers
BPersist user settings and small data
CManage network hardware
DCompile code
Lời giải
Mở trang câu hỏi này →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.
374What is the purpose of the path_provider package?4 lựa chọn
AStyle the UI
BManage network paths
CEncrypt data
DFind commonly used locations on the host file system
Lời giải
Mở trang câu hỏi này →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.
AFlutter SDK version
BDatabase schema version for migrations
CPackage version
DApp version
Lời giải
Mở trang câu hỏi này →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.
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
Mở trang câu hỏi này →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.
Apath_provider
Bpubspec.yaml
Cdart:convert
DMediaQuery
Lời giải
Mở trang câu hỏi này →Để sử dụng hàm `json.decode()` trong Dart, bạn cần sử dụng thư viện nào?
A
hiveB
pathC
shared_preferencesD
sqfliteLời giải
Mở trang câu hỏi này →Để 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.
Adart:convert
Bpubspec.yaml
Cpath_provider
DMediaQuery
Lời giải
Mở trang câu hỏi này →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?
AFirebase Authentication
BrootBundle.loadString()
Ctester.pumpAndSettle()
DIntegration testing
Lời giải
Mở trang câu hỏi này →Để 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.
A
rootBundle.loadString()B
Navigator.pushNamedC
flutter_local_notificationsD
tester.pumpAndSettle()Lời giải
Mở trang câu hỏi này →Để 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.
382Which package is used to find the correct local file system paths (e.g., Documents directory) on Android and iOS?4 lựa chọn
Apath_provider
Bpubspec.yaml
Cdart:convert
DprecacheImage()
Lời giải
Mở trang câu hỏi này →Để 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.
AString, int, double, bool, `List<String>` — complex objects often `jsonEncode` → String
Bbool only
CSQLite only
DAny Dart object
Lời giải
Mở trang câu hỏi này →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.
384A Flutter 'SplashScreen' is often used to determine the initial route based on existing session tokens.2 lựa chọn
A
TrueB
FalseLời giải
Mở trang câu hỏi này →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.