CHƯƠNG 1. CƠ SỞ LÝ THUYẾT TỔNG QUAN VỀ FLUTTER Giới thiệu Flutter[1] Flutter được Google giới thiệu là một bộ SDK(Software Development Kit) mới trong giới phát triển ứng dụng di động. Là một SDK mới của Google dành cho các thiết bị di động giúp nhà phát triển và nhà thiết kế xây dựng nhanh chóng ứng dụng dành cho các thiết bị di động (Android, iOS). Nó như một thủ thuật khôn khéo để tương thích được với framework UI trên cả hai hệ điều hành này.
Các ứng dụng Flutter không biên dịch trực tiếp với các ứng dụng native của Android và iOS. Thay vào đó, chúng chạy trên engine render Flutter (được viết bằng C++) và Flutter Framework (được viết bằng Dart, cũng như các ứng dụng Flutter), cả hai bộ này đều được đóng gói cùng với mọi ứng dụng. Sau đó bộ SDK sẽ đóng gói lại vào trong một ứng dụng để sẵn sàng chạy trên mỗi nền tảng. Bạn tạo ra ứng dụng của mình, một engine mới sẽ chạy các đoạn code của Flutter, và các đoạn mã nguồn vừa đủ để nền tảng Flutter chạy trên cả Android và iOS.
Flutter được phát triển nhằm giải quyết bài toán thường gặp trong thiết bị di động là Fast Development và Native Performance. Nếu như React Native chỉ đảm bảo Fast Development và mã nguồn thuần chỉ đảm bảo Native Performance thì Flutter làm được cả 2 điều trên. Lịch sử phát triển của Flutter[2] Phiên bản đầu tiên của Flutter được gọi là "Sky" và chạy trên hệ điều hành Android. Flutter được công bố tại hội nghị nhà phát triển Dart 2015, với dự định ban đầu để có thể kết xuất ổn định ở mức 120 khung hình trên giây.
Trong bài phát biểu chính ở hội nghị Google Developer Days tại Thượng Hải, Google công bố phiên bản Flutter Release Preview 2, đây là phiên bản lớn cuối cùng trước Flutter 1. Vào ngày 4 tháng 12 năm 2018, Flutter 1.0 đã được phát hành tại sự kiện Flutter Live, là phiên bản "ổn định" đầu tiên của khung ứng dụng này. 5 Xây dựng hệ thống ứng dụng tìm phòng trọ trên di động Đặc điểm chính của Flutter[3] • Ngôn ngữ Dart. Dart là ngôn ngữ hướng đối tượng (OOP), định nghĩa lớp (class defined), thu gom rác (garbage-collected) và được xem như là ngôn ngữ lập trình tối ưu hóa phía client (client-optimized programming language) cho các ứng dụng chạy đa nền tảng.
Được phát triển bời Google, Dart nói chung và Flutter nói riêng được hỗ trợ bởi nhà phát triền lớn mạnh và cộng đồng rộng lớn, nó hỗ trợ interfaces, mixins, abstract classes, reified generics, stactic typing. Dart chủ yếu được sử dụng để phát triền ứng dụng di động, ngoài ra thì nó cũng được sử dụng trong ứng dụng desktop, phát triển hệ thống backend và ứng dụng web application. • Các IDE được khuyến nghị với Flutter là Android Studio, Intellij Idea hoặc đơn giản và phổ biến hơn là Visual Studio Code. • Về cầu nối đối với những ứng dụng di động đa nền tảng, Flutter sử dụng Dart, so với đối thủ lớn nhất hiện giờ là React Native sử dụng Javascript, Flutter đảm bảo được hiệu năng và đảm bảo nó tốt hơn so với React Native.
• React Native và Flutter chia sẻ các mô hình tương tự như trình xử lý sự kiện và mở rộng lớp. • Điểm mạnh nhất của Flutter được giới thiệu chính là Fast Development, Native Performance và dễ dàng tạo xây dựng giao diện bắt mắt, biểu cảm. Ưu, nhược điểm của Flutter[3] Ưu điểm • Ngôn ngữ Dart: Dart - OOP, nó khá dài, nhưng những người quen viết bằng Java / C # sẽ hài lòng với Dart. • Ít phải config khi tạo project mới theo cách thủ công, ngược lại với React Native.
• Chỉ cần tải về Flutter từ git, chạy “flutter doctor”, và nó sẽ cho bạn biết những loại vấn đề bạn có thể có trong hệ thống. Sau đó, tạo một project từ Android 6 Xây dựng hệ thống ứng dụng tìm phòng trọ trên di động Studio hoặc bất kỳ IDE nào sau khi cài đặt Flutter Plug-in sơ bộ và start project. Ngoài ra nó còn có Hot-reload giống như trong React-Native. • Hỗ trợ tuyệt vời cho IDE (Android Studio, IDE IntelliJ, VSCode) • Trình điều hướng tích hợp sẵn.
Sau khi tạo ra một ứng dụng trên Flutter, bạn có thể thấy nó có Navigator được xây dựng sẵn. Bạn có thể tạo một route mới mà không cần kết nối bất kỳ thứ gì (không giống như trong RN, nơi bạn cần kết nối bất kỳ package điều hướng gốc nào vv). • Giải pháp quản lý dữ liệu được tạo sẵn, ví dụ trong Flutter này là "Mọi thứ đều có một Widget" cho nó. Có một StatefulWidget đặc biệt, với sự giúp đỡ của nó mà chúng ta có thể quản lý trạng thái widget và thay đổi nó một cách năng động.
Nhược điểm • Có một rào cản lớn cho những người chỉ học JS, hoặc đến từ RN. Do thực tế là Dart được sử dụng với sự thừa kế, đa hình của nó và tất cả các thứ về OOP. • Không có JSX mà tất cả chúng ta đã quen khi làm RN. Nhìn vào tệp Dart trong đó không có phân chia thành template, styling và data, nó trở nên khó chịu.
• Styling là một nhược điểm. Thực tế là không có sự tách biệt thành Styles, templates và controller, có một vấn đề khi mô tả một thành phần thì chúng ta cũng cần mô tả các styles cùng một lúc. • Animation còn khó khăn hơn. Mặc dù nó có một animation tốt, nhưng nó sẽ khó hơn khi tạo hiệu ứng động, không giống như trong RN.
Trong Flutter, chỉ có thừa kế widget với các điều kiện có thể thay đổi (trạng thái) và không thể thay đổi (không trạng thái). Trong khi ở React- Native chúng ta có thể quản lý vòng đời. Ngoài ra, một nhược điểm lớn là thiếu các công cụ để lưu trạng thái của ứng dụng, vấn đề này có thể, tuy nhiên, được giải quyết bằng cách tuần tự hóa trạng thái hiện tại. 7 Xây dựng hệ thống ứng dụng tìm phòng trọ trên di động TỔNG QUAN VỀ GOOGLE FIREBASE Giới thiệu về Google Firebase[4] Firebase là một dịch vụ điện toán đám được cung cấp bởi Google nhằm giúp các lập trình phát triển nhanh các ứng dụng di động, đơn giản và hiệu quả cao, tương tác tốt với thời gian thực.
Với nhiều dịch vụ chất lượng cao Firebase đã và đang, không chỉ là sự lựa chọn hàng đầu cho các lập trình viên, các công ty khởi nghiệp, mà các công ty, tổ chức lớn có tên tuổi cũng sử dụng Firebase để xây dựng các tính năng, các chương trình mới, cũng như chuyển đổi các dịch vụ trước đây sang hệ thống của Firebase. Cơ sở dữ liệu của Firebase là NoSQL, được tổ chức theo kiểu trees, parent- children. Dịch vụ Firebase Lịch sử của Firebase[4] Firebase (tiền thân là Evolve) được thành lập vào năm 2011. Ban đầu, Evolve chỉ cung cấp cơ sở dữ liệu để các lập trình viên thiết kế các ứng dụng chat.
Tuy nhiên, họ nhanh chóng nhận ra tiềm năng sản phẩm của mình khi nhận thấy các khách hàng không sử dụng cơ sở dữ liệu để làm ứng dụng chat, mà thay vào đó, để lưu các thông tin như game progress. Bộ đôi Lee và Tamplin quyết định tách mảng Realtime ra để thành lập một công ty độc lập – chính là Firebase – vào tháng 4 năm 2012. 8 Xây dựng hệ thống ứng dụng tìm phòng trọ trên di động Sau nhiều lần huy động vốn và gặt hái được những thành công nổi bật, Firebase đã được Google để ý. Vào tháng 10 năm 2014, Firebase gia nhập gia đình Google.
Chức năng chính của Firebase[4] Firebase là sự kết hợp giữa nền tảng cloud với hệ thống máy chủ cực kì mạnh mẽ tới từ Google, để cung cấp những API đơn giản, mạnh mẽ và đa nền tảng trong việc quản lý, sử dụng database. • Firebase Cloud Firestore[5] Cloud Firestore là một Realtime Database linh hoạt và dễ mở rộng cho mobile, Web và server được phát triển từ Firebase và Google Cloud Platform. Cũng giống như Firebase Realtime Database, nhưng là phiên bản nâng cấp và mạnh mẽ hơn, Firestore giúp cho việc đồng bộ dữ liệu giữa các ứng dụng phía khách hàng một các nhanh chóng (Realtime) và hộ trợ lưu offline data trong ứng dụng. Firestore đã và đang dần cải thiện những yếu điểm mà người anh tiền nhiệm Realtime Database còn mắc phải như các truy vấn, kiểu dữ liệu,… Cloud Firestore là một cloud-hosted, NoSQL database mà các ứng dụng phía client có thể trực tiếp truy cập thông qua native SDKs.
Nó lưu dữ liệu theo mô hình dữ liệu NoSQL. Dữ liệu được lưu trữ trong các file tài liệu chứa các trường được ánh xạ vào các giá trị. Các file tài liệu này được lưu trữ trong các tập hợp chúng có thể sử dụng nó để tổ chức dữ liệu và truy vấn dữ liệu. Cloud Firestore hỗ trợ rất nhiều kiểu dữ liệu từ đơn giản như String, Integer hay những kiểu dữ liệu phức tạp như các đối tượng lồng nhau.
• Firebase authentication – Hệ thống xác thực của Firebase Có thể dễ dàng tích hợp các công nghệ xác thực của Google, Facebook, Twitter… hoặc một hệ thống xác thực mà tự tạo ra ở bất kì nền tảng nào như Android, iOS hoặc Web. • Firebase storage Có thể lưu trữ dữ liệu trực tiếp trên server của firebase như hình ảnh, video, tập tin một cách dễ dàng. Firebase còn bổ sung Google security để tải lên và tải về các ứng dụng firebase, để lưu trữ hình ảnh, âm thanh, video hoặc nội dung do người dùng tạo ra. 9 Xây dựng hệ thống ứng dụng tìm phòng trọ trên di động Đặc điểm nổi bật của Firebase[4] • Triển khai ứng dụng nhanh Có thể giảm bớt rất nhiều thời gian cho việc viết các dòng code để quản lý và đồng bộ cơ sở dữ liệu, mọi việc sẽ diễn ra hoàn toàn tự động với các API của Firebase.
Hỗ trợ đa nền tảng giúp thuận lợi và tiết kiệm thời gian trong việc xây dựng ứng dụng đa nền tảng. • Bảo mật Bảo mật tốt do Firebase hoạt động dựa trên nền tảng cloud và thực hiện kết nối thông qua giao thức bảo mật SSL. Cho phép phân quyền người dùng database bằng cú pháp javascipt. • Tính linh hoạt và khả năng mở rộng Firebase sẽ giúp đơn giản hóa việc nâng cấp hay mở rộng dịch vụ, cho phép xây dựng server của riêng.
Việc Firebase sử dụng NoSQL, giúp cho database không bị bó buộc trong các bảng và các trường mà có thể tùy ý xây dựng database theo cấu trúc của riêng. • Ổn định Firebase hoạt động dựa trên nền tảng cloud đến từ Google vì vậy hầu như không phải lo lắng về việc sập server, tấn công mạng như DDOS. Hoạt động trên nền tảng Cloud giúp việc nâng cấp, bảo trì server diễn ra đơn giản, không cần phải dừng server để nâng cấp như truyền thống.