Flutter và những câu hỏi thường gặp khi phỏng vấn
Nếu bạn đã biết ít nhiều về Flutter, bài viết này sẽ giúp bạn hệ thống lại những kiến thức bạn cần phải nắm rõ để chuẩn bị cho một buổi phỏng vấn thành công. Ngược lại, nếu bạn hoàn toàn chưa biết Flutter là gì? Thì bài viết này chắc chắn sẽ giúp bạn hiểu được những điều cơ bản.
Flutter là gì?
Flutter là một open-source UI SDK (Software Development Kit) được tạo ra bởi Google. Flutter được sử dụng để phát triển các ứng dụng cho cả Android, iOS, Linux, Mac, Windows và cả web sử dụng một codebase. Để lập trình với Flutter bạn sử dụng một ngôn ngữ lập trình gọi là Dart.
Dart là gì?
Là một ngôn ngữ lập trình đa mục đích, được tối ưu hóa về phía khách hàng cho nhiều nền tảng được phát triển bởi Google có thể dùng để xây dựng ứng dụng di động, desktop, web, server.
Dart là một ngôn ngữ hướng đối tượng, được xác định theo lớp, với cơ chế garbage-collected, sử dụng cú pháp kiểu C và có thể biên dịch thành JavaScript.
Design-specific widgets
Flutter framework bao gồm 2 bộ widget phù hợp với các ngôn ngữ design tương ứng.
Material Design widget dùng để triển khai ngôn ngữ thiết kế cùng tên của Google.
Cupertino widget triển khai các hướng dẫn giao diện người dùng iOS Human của Apple
Quy ước đặt tên của Flutter/Dart
UpperCamelCase - Class, kiểu enum, typedefs, các extensions và tham số
lowerCamelCase - Định danh, hằng số và phương thức.
lowercase_with_underscore - Thư viện, packages, đường dẫn, source files.
Flutter Doctor
Lệnh dùng để kiểm tra môi trường được thiết lập trong máy của bạn sau đó trả về một báo cáo về tình trạng cài đặt Flutter trong máy của bạn và chỉ ra cho bạn những phần mềm mà có thể bạn sẽ cần hay những task bạn cần thực hiện.
Flutter Clean
Lệnh dùng xóa bộ nhớ cache trong quá trình build project.
File pubspec.yaml là gì?
pubspec.yaml là file mà bạn cung cấp tất cả những tài nguyên cần thiết cho Flutter project của bạn ví dụ như: các plugin, Dart version, font, images. Đồng thời, đây cũng là nơi cấu hình tên project cũng như là phần mô tả.
Các lệnh Flutter pub
Flutter pub get - Dùng để lấy các dependency được liệt kê bên trong file pubspec.yaml. Nếu bộ cache hệ thống không chứa sẵn các dependency thì pub get sẽ cập nhật lại cache, download các dependency cần thiết. Lệnh này cũng tạo một file .packages để kết nối package ngược lại với cách của hệ thống.
flutter pub upgrade - lấy phiên bản mới nhất của các dependency được liệt kê bên trong file pubspec.yaml.
Widget là gì? Có mấy loại widget?
Có phải mọi thứ bên trong Flutter đều là widget? Widget là những thành phần có liên quan đến giao diện người dùng. Có 2 loại widget:
StatelessWidget
- StatefulWidget
Sự khác biệt giữa stateful và stateless widget?
Stateless widget yêu cầu một trạng thái (State) cố định, widget chỉ được khởi tạo trạng thái một lần đồng nghĩa với việc các phương thức của nó cũng như vậy. Một cách hiểu đơn giản hơn là Stateless widget không thể thay đổi trạng thái trong suốt quá trình chạy ứng dụng, nếu bạn muốn thay đổi widget đó bạn phải tạo một instance mới.
Stateful widget thì ngược lại, nó có thể biến đổi và thay đổi trạng thái(State) nhiều lần trong suốt quá trình chạy ứng dụng.
State nghĩa là gì? Công dụng của setState()
State là một bộ biến chứa các giá trị/thuộc tính của một widget.
setState() là một cách cơ bản để bạn có thể đưa ra yêu cầu refresh hoặc rebuild màn hình ứng dụng với giá trị/thuộc tính mới.
Các method của Stateful widget
createState() — trả về một state object cho widget
initState() — gọi sau khi tạo object để khởi tạo
didChangeDependencies() — sau khi khởi thạo để xem được lần build đầu tiên.
build() —gọi ngay sau đó để build
didChangeDependencies() - gọi mỗi lúc chúng ta cần render UI và trả về một widget’s tree.
didUpdateWidget() — khi có thay đổi ở parent widget và chũng ta cần vẽ lại UI
deactivate() — gọi trước dispose() khi object này bị xóa khỏi widget’s tree
dispose() — deallocating tất cả widget and state.
Khác biệt giữa hot reload, hot restart và full restart?
Hot reload có khả năng tải lại code của ứng dụng và re-build lại widget tree mà không cần khởi động lại. Đồng thời việc nó không chạy lại các hàm main hay initState() sẽ giúp tiết kiệm thời gian và không bị mất trạng thái hiện tại.
Hot restart sẽ tải lại toàn bộ thay đổi, khởi động lại ứng dụng Flutter và cũng khởi tạo lại trạng thái ứng ứng dụng.
Full restart khởi động lại toàn bộ ứng dụng iOS, Android hay web, vì phải compile lại Java/ Kotlin/ ObjC/ Swift code nên nó sẽ mất khá nhiều thời gian. Đối với web, Full restart cũng khởi động lại Dart Development Compiler.
3 cách điều hướng màn hình
Điều hướng trực tiếp với MaterialPageRoute:
Điều hướng tĩnh với map route - tạo một map trong MaterialApp sau đó sử dụng tên để push.
Tạo route map trong MaterialApp:
Push bằng tên:
Điều hướng động sử dụng onGenerateRoute trong class MaterialApp
Các chế độ build của Flutter
Bộ công cụ của Flutter cung cấp 3 chế độ:
Debug mode - sử dụng trong quá trình phát triển ứng dụng, khi bạn dùng hot reload
Profile mode - sử dụng khi bạn muốn phân tích performance
- Release mode - Khi app của bạn đã sẵn sàng cho việc đưa vào sử dụng
Các kiểu tham số bên trong Dart Function
Có 2 kiểu tham số là: bắt buộc và không bắt buộc.
class Future bên trong ngôn ngữ Dart
Future dùng để đại diện cho một giá trị hay một error sẵn có trong tương lai.
Receiver của Future có thể gọi xử lý các giá trị hay error đã sẵn có đó.
future là gì?
future là một thể hiện của Future class đại diện cho các hoạt dộng của lập trình bất đồng bộ. Có 2 trạng thái là: uncomplete hoặc completed
Uncompleted: khi bạn gọi một hàm không đồng bộ mà nó trả về một future với trạng thái uncompleted thì Future này đang chờ cho các hoạt động không đồng bộ của hàm kết thúc hoặc trả về một error.
Completed: nếu một hành động không đồng bộ thực hiện thành công: future có thể hoàn thành với một giá trị hoặc hoàn thành với một error.
Lập trình đồng bộ
Trong lập trình đồng bộ, code sẽ được thực thi theo thứ tự từng dòng.
Synchronous operation — Chặn các hoạt động khác nó diễn ra khi nó đang chạy.
Synchronous function — Chỉ thực hiện trên các hoạt động đồng bộ
Lập trình không đồng bộ
Lập trình không đồng bộ cho phép chương trình của bạn hoàn thành công việc trong khi đang chờ tác vụ khác.
Asynchronous operation — Khi được khởi tạo, hoạt động của lập trình không đồng bộ có thể bị chen ngang bởi tác vụ khác.
Asynchronous function — Thực hiện ít nhất một hoạt động bất đồng bộ và có thể thực hiện hoạt động đồng bộ.
async và await là gì?
async và await là những từ khóa cung cấp cho chúng ta cách khai báo chương trình bất đồng bộ.
async - đặt trước thân một hàm để nó trở thành bất đồng bộ.
await - chỉ sử dụng bên trong async để đánh dấu kết thúc việc bất đồng bộ.
So sánh giữa asnyc và async*?
async thuộc class Future — thêm từ khóa async vào thân hàm, nó sẽ return kết quả kiểu Future.
- async* thuộc class Stream - thêm từ khóa async* vào hàm, nó sẽ trả về rất nhiều future cũng một lúc. Kết quả là kiểu Stream.
Null-aware Operators
Trong Dart, Null-aware Operators cho phép bạn tính toán dựa trên giá trị đó có phải là null hay không, nó giúp bạn viết gọn các biểu thức dài. Ví dụ:
??
??=
?.
Spread Operator
Bạn có thể sử dụng spread operator (...) để chèn tất cả giá trị của một list vào một list khác. Ví dụ:
Collection if
Xây dựng một collection có sử dụng điều kiện
Collection for
Xây dựng một collection có sử dụng vòng lặp
dynamic — var — final
dynamic — có thể thay đổi các kiểu dữ liệu và giá trị.
var — không thể thay đổi kiểu dữ liệu nhưng có thể thay đổi giá trị.
final — không thể thay đổi cả kiểu lẫn giá trị về sau.
Những lợi ích từ Flutter
Phát triển đa nền tảng và nhanh.
Cộng đồng sử dụng rộng lớn.
Live, Hot Reloading giúp thuận tiện cho quá trình xây dựng ứng dụng.
Cung cấp sự quen thuộc về Performance, giao diện và cảm nhận.
Tác giả: Sri Kathiravan
Dịch bởi Devera Academy