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

184/512 câuCòn 328
165What is a class in Dart?4 lựa chọn
AA variable type
BA function
CA blueprint for creating objects
DA module
Lời giải
Trong lập trình Dart, một lớp (class) được coi là một bản thiết kế chung cho việc tạo ra các đối tượng. Nó cung cấp một mô hình cơ bản cho các thuộc tính và phương thức mà các đối tượng thuộc lớp đó sẽ có. Khi bạn tạo một lớp, bạn có thể định nghĩa các thuộc tính và phương thức mà các đối tượng thuộc lớp đó sẽ có. Điều này cho phép bạn tạo ra các đối tượng có thể tương tác với nhau và thực hiện các hành động cụ thể. Ví dụ, nếu bạn tạo một lớp 'Xe', bạn có thể định nghĩa các thuộc tính như 'màu sắc', 'loại xe' và phương thức như 'chạy', 'đỗ xe'. Các đối tượng thuộc lớp 'Xe' sẽ có thể thực hiện các hành động này và có các thuộc tính tương ứng.
Mở trang câu hỏi này →
166What is a library in Dart?4 lựa chọn
AA collection of classes and functions
BA database connection
CA Flutter widget
DA type of compiler
Lời giải
Trong lập trình Dart, một thư viện (library) được định nghĩa là một tập hợp các lớp và hàm (classes và functions) được tổ chức và quản lý một cách hệ thống. Thư viện là một phần quan trọng của ngôn ngữ lập trình Dart, giúp người lập trình viên dễ dàng chia sẻ và sử dụng các mã nguồn đã được viết trước đó. Mỗi thư viện trong Dart có thể được sử dụng độc lập hoặc kết hợp với các thư viện khác để tạo ra các ứng dụng phức tạp. Ví dụ, thư viện 'dart:math' cung cấp các hàm toán học cơ bản, trong khi thư viện 'dart:io' cung cấp các hàm để tương tác với hệ thống tệp. Việc sử dụng thư viện giúp giảm thiểu thời gian và công sức lập trình viên phải dành để viết mã nguồn từ đầu.
Mở trang câu hỏi này →
167What is an object in Dart?4 lựa chọn
AA type of variable
BAn instance of a class
CA keyword
DA list
Lời giải
Trong Dart, một đối tượng (object) là một thực thể cụ thể được tạo ra từ một lớp (class). Nó là một bản sao của lớp đó, có các thuộc tính và phương thức riêng. Ví dụ, nếu bạn có một lớp tên là 'Xe', thì một đối tượng của lớp đó có thể được tạo ra như sau: Xe xe = Xe(); Đối tượng xe này có thể có các thuộc tính như màu sắc, số chỗ ngồi, và phương thức như khởi động, dừng lại. Đối tượng là một khái niệm quan trọng trong lập trình hướng đối tượng, giúp bạn mô tả và tương tác với các thực thể trong thế giới thực.
Mở trang câu hỏi này →
Astop
Bcontinue
Cbreak
Dexit
Lời giải
Trong một câu lệnh switch trong Dart, sau mỗi trường hợp, cần sử dụng từ khóa 'break' để dừng việc thực thi các trường hợp còn lại. Điều này giúp chương trình tránh được việc thực thi trùng lặp và đảm bảo rằng chỉ một trường hợp được thực thi tại một thời điểm. Từ khóa 'break' giúp chương trình chuyển sang phần còn lại của mã sau khi đã thực thi xong một trường hợp. Nếu không sử dụng 'break', chương trình sẽ tiếp tục thực thi các trường hợp còn lại cho đến khi gặp một từ khóa khác như 'return', 'throw' hoặc đến cuối câu lệnh switch.
Mở trang câu hỏi này →
Aif condition { }
Bif (condition) { }
Cif [condition] { }
Dif {condition}
Lời giải

Trong Dart, câu lệnh if được sử dụng để kiểm tra một điều kiện và thực hiện một hành động nếu điều kiện đó là true. Câu lệnh if có thể được viết theo nhiều cách khác nhau, nhưng syntax chính xác nhất là:

Lời giải
if (condition) {
}

. Điều này có nghĩa là bạn cần sử dụng dấu ngoặc tròn để bao quanh điều kiện kiểm tra. Ví dụ:

Lời giải
if (x > 5) {
  print('x

lớn hơn 5'); }. Syntax này giúp Dart hiểu rõ được điều kiện kiểm tra và hành động cần thực hiện.

Mở trang câu hỏi này →
Aimport dart.io;
Bimport 'dart:io';
Cinclude 'dart:io';
Duse dart.io;
Lời giải
Để nhập một thư viện tích hợp sẵn trong Dart, bạn cần sử dụng từ khóa 'import' kèm theo tên thư viện. Trong trường hợp này, thư viện 'dart:io' được sử dụng để tương tác với hệ thống tệp tin và mạng. Syntax đúng để nhập thư viện này là 'import 'dart:io';'.
Mở trang câu hỏi này →
ATo delete objects
BTo initialize objects
CTo copy data
DTo print variables
Lời giải
Trong lập trình hướng đối tượng, một constructor (hay còn gọi là hàm tạo) là một phương thức đặc biệt trong một lớp được sử dụng để tạo ra các đối tượng mới. Mục đích chính của một constructor là để khởi tạo các thuộc tính của đối tượng khi nó được tạo ra. Điều này bao gồm việc gán giá trị ban đầu cho các thuộc tính, thực hiện các hành động cần thiết để đảm bảo đối tượng được tạo ra trong một trạng thái hợp lệ. Ví dụ, một constructor có thể được sử dụng để tạo ra một đối tượng với các giá trị mặc định, hoặc để thực hiện các tính toán cần thiết để tạo ra đối tượng. Tóm lại, mục đích của một constructor là để khởi tạo và tạo ra các đối tượng mới trong một lớp.
Mở trang câu hỏi này →
Ahide
Bexcept
Cremove
Dexclude
Lời giải
Khi thực hiện import thư viện, có thể có một số phần không mong muốn được hiển thị. Để giải quyết vấn đề này, chúng ta cần sử dụng một từ khóa đặc biệt. Từ khóa này cho phép chúng ta ẩn đi những phần không cần thiết, giúp cho quá trình import trở nên dễ dàng và hiệu quả hơn. Trong các lựa chọn, từ khóa "hide" là lựa chọn đúng. Nó cho phép chúng ta ẩn đi những phần không cần thiết của thư viện, giúp cho quá trình import trở nên nhanh chóng và dễ dàng hơn.
Mở trang câu hỏi này →
A#
B@
C.
D:
Lời giải
Trong lập trình, khi chúng ta muốn truy cập vào thuộc tính hoặc phương thức của một đối tượng, chúng ta sử dụng một ký tự đặc biệt để chỉ định. Trong các lựa chọn đã cho, ký tự được sử dụng để truy cập vào thuộc tính hoặc phương thức của một đối tượng là dấu chấm (.)
Mở trang câu hỏi này →
Aextends
BScaffold
CStream
DrunApp()
Lời giải
Để định nghĩa một lớp con (subclass) kế thừa từ một lớp cha (parent class) trong ngôn ngữ lập trình Dart, chúng ta sử dụng từ khóa 'extends'. Từ khóa này cho phép chúng ta tạo ra một lớp con có thể sử dụng các thuộc tính và phương thức của lớp cha. Ví dụ, nếu chúng ta có một lớp cha tên là 'Vehicle' và một lớp con tên là 'Car', chúng ta có thể sử dụng từ khóa 'extends' để định nghĩa lớp con 'Car' kế thừa từ lớp cha 'Vehicle'. Điều này giúp giảm thiểu sự lặp lại và tăng cường tính tái sử dụng trong mã nguồn.
Mở trang câu hỏi này →
Aconst
Blate
Cvar
Dstatic
Lời giải
Lazy initialization là một kỹ thuật được sử dụng để trì hoãn việc tạo ra một đối tượng cho đến khi nó thực sự được sử dụng. Trong Dart, từ khóa được sử dụng để thực hiện lazy initialization là 'late'. Từ khóa 'late' cho phép bạn khai báo một biến mà không cần phải khởi tạo nó ngay lập tức. Thay vào đó, biến này sẽ được khởi tạo khi nó được sử dụng lần đầu tiên. Điều này giúp giảm thiểu việc sử dụng tài nguyên và cải thiện hiệu suất của ứng dụng.
Mở trang câu hỏi này →
Achoose
Bswitch
Cwhen
Dcheck
Lời giải
Để kiểm tra nhiều điều kiện thay vì sử dụng nhiều câu lệnh if-else, chúng ta sử dụng từ khóa switch. Ví dụ, khi chúng ta muốn kiểm tra giá trị của một biến và thực hiện hành động khác nhau dựa trên giá trị đó, chúng ta có thể sử dụng switch. Từ khóa switch cho phép chúng ta kiểm tra nhiều điều kiện và thực hiện hành động tương ứng.
Mở trang câu hỏi này →
Aobject
Bdefine
Cclass
Dstruct
Lời giải

Trong Dart, từ khóa được sử dụng để định nghĩa một lớp (class) là 'class'. Điều này có nghĩa là khi bạn muốn tạo một lớp mới trong Dart, bạn sẽ sử dụng từ khóa 'class' để bắt đầu định nghĩa lớp đó. Ví dụ, nếu bạn muốn tạo một lớp tên là 'Vehicle', bạn sẽ viết như sau:

Lời giải
class Vehicle {
  ...
}

. Từ khóa 'class' là một phần quan trọng trong định nghĩa lớp và giúp Dart hiểu được bạn đang định nghĩa một lớp mới.

Mở trang câu hỏi này →
Ainclude
Buse
Cimport
Drequire
Lời giải
Để bao gồm một thư viện khác trong Dart, chúng ta sử dụng từ khóa 'import'. Từ khóa này cho phép chúng ta thêm các thư viện vào mã của mình, giúp chúng ta có thể sử dụng các hàm, biến và lớp được định nghĩa trong thư viện đó. Ví dụ, nếu chúng ta muốn sử dụng thư viện 'dart:math', chúng ta có thể sử dụng lệnh 'import 'dart:math';' để bao gồm thư viện này. Từ khóa 'import' là một phần quan trọng trong việc xây dựng các ứng dụng Dart, giúp chúng ta có thể tái sử dụng mã và làm cho mã của mình trở nên dễ đọc và dễ bảo trì hơn.
Mở trang câu hỏi này →
Afor
Bwhile
Cdo-while
Dforeach
Lời giải
Loop 'do-while' được sử dụng khi chúng ta cần thực hiện một khối lệnh trước khi kiểm tra điều kiện. Điều kiện sẽ được kiểm tra sau khi khối lệnh được thực hiện. Điều này khác với các loại vòng lặp khác như 'for' và 'while', nơi điều kiện được kiểm tra trước khi thực hiện khối lệnh.
Mở trang câu hỏi này →
A+
B&
C++
Dconcat()
Lời giải
Các toán tử có thể được sử dụng cho việc nối chuỗi là gì?
Mở trang câu hỏi này →
A??=
B??
C?:
D=>
Lời giải
Hỏi đáp về toán tử trong lập trình. Trong các toán tử sau, toán tử nào được sử dụng để gán giá trị cho biến chỉ khi biến đó là null?
Mở trang câu hỏi này →
A+
B++
C+=
Dadd()
Lời giải
Trong Dart, để thực hiện phép cộng, chúng ta sử dụng toán tử cộng (+). Ví dụ: a = 5; b = 3; a = a + b; sẽ được thực hiện phép cộng và gán kết quả vào biến a. Toán tử này cũng có thể được sử dụng để thêm một giá trị vào một biến đã được khai báo trước đó, ví dụ: a = 5; a += 3; sẽ tương đương với a = 5 + 3;.
Mở trang câu hỏi này →
Aif
Bfor
Cswitch
Dbreak
Lời giải

Để lặp lại một khối mã một số lần cố định, chúng ta sử dụng lệnh 'for'. Lệnh này cho phép chúng ta lặp lại một khối mã một số lần nhất định, giúp giảm thiểu sự lặp lại và tăng hiệu suất viết mã. Ví dụ, nếu chúng ta muốn in ra màn hình các số từ 1 đến 10, chúng ta có thể sử dụng lệnh 'for' như sau:

Lời giải
for (var i = 1; i <= 10; i++) {
    console.log(i);
}

Lệnh 'for' bao gồm ba phần chính: phần đầu, phần điều kiện và phần cuối. Phần đầu xác định biến và giá trị ban đầu, phần điều kiện xác định điều kiện lặp và phần cuối xác định hành động khi lặp kết thúc. Với lệnh 'for', chúng ta có thể lặp lại một khối mã một số lần cố định, giúp tăng hiệu suất và giảm thiểu sự lặp lại.

Mở trang câu hỏi này →
Aimport 'dart:math' only sin;
Bimport 'dart:math' show sin, cos;
Cimport 'dart:math' use sin, cos;
Dimport 'dart:math' with sin;
Lời giải
Để import chỉ một phần của thư viện, chúng ta sử dụng từ khóa 'show'. Ví dụ, nếu chúng ta muốn import chỉ hàm sin và cos từ thư viện dart:math, chúng ta sẽ sử dụng câu lệnh import 'dart:math' show sin, cos;.
Mở trang câu hỏi này →