Ngân hàng câu hỏi của chương

Câu hỏi: PRM393 - Widget và vòng đời

29 câu trắc nghiệm kèm lời giải của môn Lập trình di động (Flutter) - Mobile Programming, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/29 câuCòn 9
AManage navigation
BDefine application-wide visual styles
CHandle state changes
DControl animations
Lời giải
ThemaData trong Flutter là một lớp giúp định nghĩa các kiểu thiết kế chung cho ứng dụng. Nó cho phép bạn quản lý các yếu tố thiết kế như màu sắc, kiểu font, kích thước và kiểu dáng của các thành phần UI. Bằng cách sử dụng ThemeData, bạn có thể tạo ra một phong cách thiết kế thống nhất cho toàn bộ ứng dụng, giúp tạo ra một trải nghiệm người dùng đồng nhất và chuyên nghiệp. ThemeData cũng cho phép bạn điều chỉnh các yếu tố thiết kế dựa trên các điều kiện khác nhau, chẳng hạn như nền tảng, kích thước màn hình và chủ đề ứng dụng. Điều này giúp bạn có thể tạo ra các ứng dụng có thể tương tác tốt với người dùng trên nhiều thiết bị và nền tảng khác nhau.
Mở trang câu hỏi này →
AAnimatedSwitcher
BAnimatedOpacity
CAnimatedAlign
DAnimatedSize
Lời giải
Widget được sử dụng để animates giữa hai widget là AnimatedSwitcher. AnimatedSwitcher cho phép bạn thay đổi widget một cách mượt mà và đẹp mắt. Nó thường được sử dụng khi bạn cần thay đổi nội dung của một widget mà không muốn gây ra sự giật hoặc mất ổn định. Ví dụ, bạn có thể sử dụng AnimatedSwitcher để thay đổi hình ảnh hoặc văn bản của một widget khi người dùng nhấp vào nó. Ngoài ra, AnimatedSwitcher cũng có thể được sử dụng để thay đổi kích thước hoặc vị trí của một widget.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
ThemeData cho phép tùy chỉnh toàn cầu màu sắc, font và kiểu widget trên toàn ứng dụng. Điều này có nghĩa là bạn có thể định nghĩa một bộ chủ đề duy nhất và áp dụng nó cho toàn bộ ứng dụng, thay vì phải lặp lại các định nghĩa cho từng widget riêng lẻ. Điều này giúp tạo ra một giao diện thống nhất và dễ dàng quản lý.
Mở trang câu hỏi này →
AAlways rebuilds
BFramework may skip rebuilding the subtree when config is unchanged
CIncreases APK size
DTests only
Lời giải
Khi sử dụng constructor `const` cho widget, nếu các tham số không thay đổi, nó giúp framework bỏ qua việc rebuild lại cây widget khi cấu hình không thay đổi. Điều này giúp tăng hiệu suất và giảm thời gian rebuild. Khi các tham số không thay đổi, framework có thể sử dụng widget đã được tạo trước đó thay vì tạo lại từ đầu. Điều này đặc biệt hữu ích khi bạn có nhiều widget có cấu hình giống nhau, vì nó giúp giảm thiểu số lần rebuild và tăng tốc độ render.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Mỗi ứng dụng Flutter đều phải gọi hàm 'runApp()' để gắn widget gốc vào màn hình. Hàm này đóng vai trò quan trọng trong việc khởi tạo ứng dụng Flutter. Khi gọi hàm 'runApp()', bạn cần truyền vào một widget gốc (root widget) mà bạn muốn hiển thị trên màn hình. Widget gốc có thể là một widget đơn giản như Text hoặc một widget phức tạp như một màn hình đăng nhập. Sau khi gọi hàm 'runApp()', ứng dụng Flutter sẽ bắt đầu chạy và hiển thị widget gốc trên màn hình. Nếu không gọi hàm 'runApp()', ứng dụng Flutter sẽ không thể hiển thị bất kỳ widget nào trên màn hình.
Mở trang câu hỏi này →
ATrue
BFalse
Lời giải
Trong Flutter, 'Scaffold' cung cấp cấu trúc hình ảnh cơ bản cho một màn hình, bao gồm AppBar và FloatingActionButton. Nó là một lớp cơ sở giúp tạo ra giao diện người dùng cơ bản cho ứng dụng. Scaffold thường được sử dụng như một lớp cha để chứa các widget khác như Body, Drawer, BottomNavigationBar, v.v. Nó cung cấp các thuộc tính như appBar, body, floatingActionButton, drawer, bottomNavigationBar, v.v. để giúp tạo ra giao diện người dùng phức tạp. Ngoài ra, Scaffold cũng cung cấp các phương thức như showSnackBar, showBottomSheet để giúp tạo ra các hiệu ứng giao diện người dùng.
Mở trang câu hỏi này →
7Material Design root widget is?4 lựa chọn
AScaffold
BContainer
CColumn
DMaterialApp
Lời giải
Widget cơ bản trong Material Design của Flutter là MaterialApp. MaterialApp là nơi chứa các widget khác và cung cấp các tính năng cơ bản như theme, navigation, và layout. Nó giống như một khung xương (skeleton) cho ứng dụng của bạn, giúp bạn xây dựng một ứng dụng có thiết kế thống nhất và dễ sử dụng. Khi bạn tạo một ứng dụng Flutter mới, MaterialApp thường là widget đầu tiên được tạo ra. Nó cho phép bạn thêm các widget khác như Scaffold, Container, Column,... để xây dựng giao diện người dùng của ứng dụng.
Mở trang câu hỏi này →
8Placeholder widget is used for?4 lựa chọn
AFinal UI
BTemporary UI
CAnimation
DRouting
Lời giải
Widget thay thế (placeholder widget) được sử dụng để tạo ra giao diện tạm thời (Temporary UI) trong quá trình thiết kế hoặc phát triển ứng dụng. Nó cho phép các nhà phát triển tạo ra một giao diện tạm thời để sử dụng trong quá trình thử nghiệm hoặc phát triển, mà không cần phải tạo ra giao diện cuối cùng (Final UI). Widget thay thế thường được sử dụng để tạo ra các giao diện tạm thời cho các phần tử như văn bản, hình ảnh, nút bấm, v.v. Nó giúp các nhà phát triển có thể thử nghiệm và kiểm tra ứng dụng mà không cần phải tạo ra giao diện cuối cùng.
Mở trang câu hỏi này →
AJavaScript bridge only
BWidget tree → Element + RenderObject (layout/paint) → compositing → GPU
CXML → Flutter
DGPU → Widget
Lời giải
Một pipeline ngắn từ widget đến màn hình trong Flutter được mô tả như sau: Widget tree → Element + RenderObject (layout/paint) → compositing → GPU. Trong đó, Widget tree là cấu trúc cây widget được tạo ra từ các widget con. Element + RenderObject là lớp trung gian giữa widget và màn hình, chịu trách nhiệm thực hiện layout và paint. Compositing là quá trình kết hợp các phần tử màn hình thành một hình ảnh cuối cùng. Cuối cùng, GPU (Graphics Processing Unit) là bộ phận xử lý đồ họa của máy tính, chịu trách nhiệm hiển thị hình ảnh trên màn hình.
Mở trang câu hỏi này →
ABetter state management
BFaster API calls
CConsistent UI appearance
DReduced widget rebuilds
Lời giải
Sử dụng chủ đề trung tâm mang lại nhiều lợi ích cho ứng dụng của bạn. Một trong những lợi ích chính là tạo ra một giao diện người dùng (UI) nhất quán. Khi sử dụng chủ đề trung tâm, bạn có thể định nghĩa một bộ sưu tập các thành phần UI và màu sắc được sử dụng xuyên suốt ứng dụng. Điều này giúp tạo ra một trải nghiệm người dùng đồng nhất và dễ nhận biết. Ngoài ra, sử dụng chủ đề trung tâm cũng giúp giảm thiểu sự phức tạp trong việc quản lý UI và giảm thiểu thời gian phát triển.
Mở trang câu hỏi này →
AA route widget
BWeb only
C`ThemeData` (or data from a `Theme` ancestor) for colors/typography
DAlways null
Lời giải
Trong Flutter, `Theme.of(context)` được sử dụng để truy cập thông tin về chủ đề (theme) của ứng dụng. Khi gọi hàm này, nó sẽ trả về dữ liệu về chủ đề, bao gồm cả màu sắc và typography. Dữ liệu này có thể được sử dụng để định dạng giao diện người dùng của ứng dụng. Nếu không có chủ đề nào được định nghĩa, hàm này sẽ trả về dữ liệu từ chủ đề cha (parent theme). Điều này cho phép bạn chia sẻ dữ liệu chủ đề giữa các widget khác nhau trong ứng dụng. Trong trường hợp không có chủ đề nào được định nghĩa, hàm này sẽ trả về giá trị null.
Mở trang câu hỏi này →
12What does Hot Reload do?4 lựa chọn
ARestarts app fully
BKeeps state and updates UI
CDeletes cache
DRebuilds APK
Lời giải
Hot Reload là một tính năng giúp bạn cập nhật mã nguồn của ứng dụng mà không cần phải khởi động lại ứng dụng hoàn toàn. Khi bạn thực hiện Hot Reload, ứng dụng sẽ giữ lại trạng thái hiện tại và cập nhật giao diện người dùng (UI) để phản ánh những thay đổi mới. Điều này giúp bạn có thể nhanh chóng thử nghiệm và kiểm tra ứng dụng mà không cần phải chờ đợi thời gian khởi động lại. Hot Reload thường được sử dụng trong quá trình phát triển ứng dụng để giúp bạn có thể nhanh chóng thử nghiệm và kiểm tra ứng dụng mà không cần phải chờ đợi thời gian khởi động lại.
Mở trang câu hỏi này →
13What does StatelessWidget mean?4 lựa chọn
AHas mutable state
BCannot rebuild
CNo internal state
DUses setState
Lời giải
StatelessWidget là một loại widget trong Flutter không có trạng thái thay đổi được. Nó không có phương thức setState và không thể thay đổi trạng thái của widget. Điều này có nghĩa là khi widget được xây dựng, trạng thái của nó sẽ không thay đổi cho đến khi widget được tái tạo lại. StatelessWidget thường được sử dụng khi bạn cần tạo ra một widget đơn giản không có trạng thái thay đổi được, chẳng hạn như một nút bấm hoặc một văn bản. Ví dụ, nếu bạn có một nút bấm và bạn muốn nó có thể được kích hoạt và không kích hoạt, bạn có thể sử dụng một biến boolean để lưu trữ trạng thái của nút bấm. Tuy nhiên, nếu bạn sử dụng một StatelessWidget, bạn sẽ không thể thay đổi trạng thái của nút bấm mà không tái tạo lại widget.
Mở trang câu hỏi này →
APerformance
BAbility to hold mutable state
CPlatform compatibility
DRendering engine
Lời giải
StatelessWidget và StatefulWidget là hai loại widget cơ bản trong Flutter. Câu hỏi đặt ra là sự khác biệt chính giữa chúng là gì. StatelessWidget là một widget không thể thay đổi trạng thái của nó. Khi widget được tạo, trạng thái của nó được xác định và không thể thay đổi sau đó. Trong khi đó, StatefulWidget là một widget có thể thay đổi trạng thái của nó. Trạng thái của widget này có thể được thay đổi sau khi widget được tạo. Sự khác biệt chính giữa hai loại widget này là khả năng giữ trạng thái. StatefulWidget có thể giữ trạng thái của nó, trong khi StatelessWidget không thể. Điều này có nghĩa là nếu bạn cần tạo một widget có thể thay đổi trạng thái, thì bạn nên sử dụng StatefulWidget. Ngược lại, nếu bạn cần tạo một widget không thể thay đổi trạng thái, thì bạn nên sử dụng StatelessWidget.
Mở trang câu hỏi này →
AIt allows a single codebase to render UI using its own engine across different platforms.
BIt uniquely identifies the Form and allows access to its state for validation and saving.
CIt prevents unnecessary rebuilds of widgets that do not change during the app's lifecycle.
DIt ensures the UI avoids system intrusions like notches, status bars, and camera cutouts.
Lời giải
Từ khóa `const` trong tối ưu hóa widget có mục đích ngăn chặn việc rebuild widget không cần thiết trong suốt vòng đời của ứng dụng. Điều này giúp cải thiện hiệu suất và giảm thiểu thời gian tải trang. Khi một widget không thay đổi, sử dụng `const` sẽ ngăn chặn việc rebuild widget đó, từ đó giúp giảm thiểu thời gian và tài nguyên hệ thống. Điều này đặc biệt quan trọng trong các ứng dụng có nhiều widget và giao diện phức tạp. Sử dụng `const` một cách hợp lý sẽ 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 →
AIt manages the focus state of a specific widget, such as a text field, and handles keyboard events.
BIt allows a single child widget to be scrollable when it exceeds the screen's vertical or horizontal space.
CIt is called exactly once when the widget is inserted into the tree, used for one-time initialisation.
DIt creates a Future that completes after a specified duration, often used to simulate network latency.
Lời giải
Mục đích của phương thức `initState()` trong một `StatefulWidget` là để thực hiện các hành động cần thiết khi widget được thêm vào cây widget. Phương thức này được gọi một lần duy nhất khi widget được thêm vào cây widget, và được sử dụng để thực hiện các hoạt động khởi tạo một lần. Ví dụ, bạn có thể sử dụng phương thức này để tải dữ liệu từ mạng, thực hiện các hành động cần thiết khi widget được thêm vào cây widget, hoặc thực hiện các hoạt động khác cần thiết cho widget. Phương thức `initState()` được gọi trước khi widget được render lần đầu tiên, và sau đó nó sẽ không được gọi lại khi widget được render lại.
Mở trang câu hỏi này →
17When is StatefulWidget used?4 lựa chọn
AUI never changes
BData changes over time
CStatic text only
DNo user input
Lời giải
Khi nào thì sử dụng StatefulWidget? StatefulWidget là một loại widget trong Flutter được sử dụng khi trạng thái của widget thay đổi theo thời gian. Điều này có nghĩa là khi dữ liệu thay đổi, widget cũng sẽ thay đổi theo. Ví dụ, khi bạn nhập thông tin vào một form, trạng thái của form sẽ thay đổi và widget sẽ được cập nhật lại. StatefulWidget thường được sử dụng trong các trường hợp như: khi bạn cần cập nhật trạng thái của widget dựa trên dữ liệu từ mạng, khi bạn cần thực hiện các hành động khi trạng thái của widget thay đổi, v.v. Trong khi đó, khi trạng thái của widget không thay đổi theo thời gian, bạn nên sử dụng StatelessWidget để tối ưu hóa hiệu suất của ứng dụng.
Mở trang câu hỏi này →
18When prefer `StatelessWidget`?4 lựa chọn
AWhen you must use `GlobalKey`
BWhen you need `AnimationController` in State
CAlways
DUI depends only on parent args, no internal state that changes with interaction
Lời giải
Khi nào nên sử dụng `StatelessWidget`? Đây là một loại widget không có trạng thái, không có khả năng thay đổi khi tương tác với người dùng. Vì vậy, nó phù hợp khi UI chỉ phụ thuộc vào các tham số từ cha mẹ widget và không có trạng thái nội bộ thay đổi khi tương tác. Ví dụ, một widget chỉ hiển thị một hình ảnh tĩnh không có khả năng thay đổi khi người dùng tương tác với nó. Trong trường hợp này, sử dụng `StatelessWidget` sẽ giúp tối ưu hóa hiệu suất ứng dụng vì nó không cần phải quản lý trạng thái và tái tạo lại widget khi cần thiết.
Mở trang câu hỏi này →
AColumn
BScaffold
CContainer
DMaterialApp
Lời giải
Trong Flutter, widget nào thường được sử dụng làm gốc của một ứng dụng? Để xây dựng một ứng dụng Flutter, bạn cần bắt đầu bằng một widget có thể chứa các widget khác. Trong các lựa chọn trên, MaterialApp là widget được sử dụng phổ biến nhất làm gốc của một ứng dụng Flutter. Nó cung cấp một cấu trúc cơ bản cho ứng dụng, bao gồm một màn hình chính và các widget con khác. MaterialApp cũng cung cấp các tính năng như menu, thanh trạng thái và các yếu tố khác để xây dựng một ứng dụng có giao diện người dùng thân thiện.
Mở trang câu hỏi này →
AScaffold
BrunApp()
Cmain.dart
DSnackBar
Lời giải
Widget được sử dụng để hiển thị một thông báo tạm thời ở dưới cùng của màn hình và tự động biến mất sau một vài giây là SnackBar. Để sử dụng SnackBar, bạn cần thêm một widget SnackBar vào trong một widget Scaffold. Sau đó, bạn có thể thêm một widget SnackBarAction để thực hiện một hành động khi người dùng nhấn vào SnackBar. Ví dụ, bạn có thể thêm một nút 'Xóa' để xóa một item khỏi danh sách.
Mở trang câu hỏi này →