CHƯƠNG I.Giới thiệu về đề tài: Tại sao App OPEN DAY chọn Flutter mà không phải là ngôn ngữ khác? Nếu bạn đang tìm kiếm các phương pháp thay thế để phát triển ứng dụng Android, bạn nên cân nhắc thử Flutter của Google, một framework dựa trên ngôn ngữ lập trình Dart. Các ứng dụng được xây dựng với Flutter hầu như không thể phân biệt với những ứng dụng được xây dựng bằng cách sử dụng Android SDK, cả về giao diện và hiệu suất. Hơn nữa, với những tinh chỉnh nhỏ, chúng có thể chạy trên thiết bị iOS. Phát triển ứng dụng thống nhất: Flutter có các công cụ và thư viện để giúp bạn dễ dàng đưa ý tưởng của mình vào cuộc sống trên iOS và Android.
Nếu bạn chưa có kinh nghiệm phát triển trên thiết bị di động, thì Flutter là một cách dễ dàng và nhanh chóng để xây dựng các ứng dụng di động tuyệt đẹp. Nếu bạn là một nhà phát triển iOS hoặc Android có kinh nghiệm, bạn có thể sử dụng Flutter cho các View của bạn và tận dụng nhiều code Java / Kotlin / ObjC / Swift hiện có của bạn. Framework hiện đại và reactive: Dễ dàng tạo giao diện người dùng của bạn với framework hiện đại, reactive của Flutter và tập hợp các platform, layout và widget phong phú. Giải quyết các thách thức giao diện người dùng khó khăn của bạn với các API mạnh mẽ và linh hoạt cho 2D, animation, gesture, hiệu ứng và hơn thế nữa.
UI đẹp và biểu cảm: Thỏa mãn người dùng của bạn với các widget built-in đẹp mắt của Flutter theo Material Design và Cupertino (iOS-flavor), các API chuyển động phong phú, scroll tự nhiên mượt mà và tự nhận thức được nền tảng. 6 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP GVHD: Phạm Xuân Bình Chạy ở 60 fps, giao diện. Người dùng được tạo ra với Flutter thực thi tốt hơn nhiều so với những ứng dụng được tạo ra với các framework phát triển đa nền tảng khác chẳng hạn như React Native và Ionic. Một số lí do khiến bạn có thể hứng thú với Flutter: o Flutter sử dụng Dart, một ngôn ngữ nhanh, hướng đối tượng với nhiều tính năng hữu ích như mixin, generic, isolate, và static type.
o Flutter có các thành phần UI của riêng nó, cùng với một cơ chế để kết xuất chúng trên nền tảng Android và iOS. Hầu hết các thành phần giao diện người dùng, đều sẵn dùng, phù hợp với các nguyên tắc của Material Design. o Các ứng dụng Flutter có thể được phát triển bằng cách4 sử dụng IntelliJ IDEA, một IDE rất giống với Android Studio. Hiện nay có rất nhiều ngôn ngữ hổ trợ da nền tảng một cái tên lớn phải nhắc đến là React Native.
Các công ty lớn như UberEats, Discord và Facebook đã chuyển sang React Native – như một phần tất yếu của sự dịch chuyển công nghệ. Nhưng Google cũng không chịu thua. Họ đã nhận thấy độ phủ sóng của React Native. Sau 2 năm nghe ngóng, Google cho ra mắt phiên bản alpha của Flutter.
Hỗ trợ hot reload: Thông thường với lập trình Android bằng Android Studio. Mỗi lần chúng ta thay đổi một dòng code thì đều phải build và chạy lại ứng dụng. Hot reload sẽ giúp chúng ta không phải build lại ứng dụng và chỉ reload lại màn hình đã thay đổi code mà thôi. Điều này sẽ tiết kiệm rất nhiều thời gian cho developer.
Code structure: Ngược với React Native, Flutter không tách biệt data, style, và templates. Mình biết bạn có thể cảm thấy kì lạ nếu như bạn đã quen với React native. Tuy nhiên, cách tiếp cận này cũng thuận tiện và được khá nhiều người chấp thuận. 7 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP GVHD: Phạm Xuân Bình Flutter không cần thêm ngôn ngữ tạo giao diện như JSX hoặc XML hay các công cụ đặc biệt để tạo layout.
Khi sử dụng Flutter, bạn có thể tiết kiệm thời gian khi không cần phải chuyển từ chế độ thiết kế sang code và ngược lại. Flutter cho phép bạn làm mọi thứ trong cùng một màn hình. Ngoài ra, tất cả các công cụ cần thiết đều có thể truy cập từ cùng một vị trí. Cài đặt môi trường phát triển: Flutter được đơn giản hóa quá trình cài đặt.
Framework này cũng cung cấp một công cụ hữu ích để kiểm tra lỗi hệ thống được gọi là ” Flutter doctor”. Hiệu suất sử dụng: Flutter là kiến trúc cho phép chúng ta xây dựng các ứng dụng native, có hiệu suất nhanh. Bởi vì Flutter không cần cầu nối, nó có thể hoạt động nhanh hơn nhiều. Do đó, Flutter có thể chạy animation với 60 khung hình /giây.Mục đích nghiên cứu: - Cũng cố và nắm chắc kiến thức về lập trình di động - Tạo ra một phần mềm ứng dụng vào thực tế.
- Phương pháp để xây dựng một ứng dụng - Biết được cách để tiếp cận một ngôn ngữ mới - Nắm được những kiến thức cơ bản về Android Studio 1. Phương pháp nghiên cứu: - Thu thập tham khảo các tài liệu trên các trang web - Tham khảo ý kiến của giảng viên hướng dẫn để hoàn thiện phần mềm - Xây dựng một phần mềm với công cụ hỗ trợ Flutter và ngôn ngữ Dart 8 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP GVHD: Phạm Xuân Bình CHƯƠNG II. Giới thiệu về Flutter: Flutter là một Framework viết trên nền ngôn ngữ Dart. Flutter được sinh ra như một Cross-platform framework nhưng khác với những Cross-platform hiện tại, Flutter viết mã và build ra các đoạn mã thực thi tương ứng trên các thiết bị khác nhau thay vì build ra thành các đoạn mã được tối ưu và chạy trên những môi trường trung gian.
Flutter được viết chia làm hai tầng. Tầng ở trên sử dụng ngôn ngữ cung cấp các đoạn mã xây dựng lên một ứng dụng Flutter. Các đoạn mã này cung cấp phương tiện để có thể thay đổi và chỉnh sửa chúng. Từ đó giúp ứng dụng của lập trình viên có thể được tùy chỉnh theo mong muốn.
Tầng Application này giúp lập trình viên thay đổi mã nguồn ứng dụng ở thời điểm compile time. Tầng thứ hai của Flutter nằm ở sâu bên dưới và được viết bằng C++. Tầng Shell này chứa các công tụ trợ giúp ứng dụng Flutter trong quá trình chạy. Nổi bật cần lưu ý ở tầng này là máy ảo Dart VM.
Khái niệm máy ảo là khái niệm về một ứng dụng chạy song song với mã nguồn chính như một phần của ứng dụng. Flutter là SDK dành cho thiết bị di động của Google để tạo ra các giao diện native chất lượng cao trên iOS và Android trong thời gian ngắn. Flutter làm việc với source code có sẵn, được sử dụng bởi các nhà phát triển và các tổ chức trên khắp thế giới, đồng thời nó open-source và miễn phí. 9 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP GVHD: Phạm Xuân Bình Flutter có các công cụ và thư viện để giúp bạn dễ dàng đưa ý tưởng của mình vào cuộc sống trên iOS và Android.
Nếu bạn chưa có kinh nghiệm phát triển trên thiết bị di động, thì Flutter là một cách dễ dàng và nhanh chóng để xây dựng các ứng dụng di động tuyệt đẹp. Nếu bạn là một nhà phát triển iOS hoặc Android có kinh nghiệm, bạn có thể sử dụng Flutter cho các View của bạn và tận dụng nhiều code Java / Kotlin / ObjC / Swift hiện có của bạn. Flutter sử dụng Dart, một ngôn ngữ nhanh, hướng đối tượng với nhiều tính năng hữu ích như mixin, generic, isolate, và static type. Flutter có các thành phần UI của riêng nó, cùng với một cơ chế để kết xuất chúng trên nền tảng Android và iOS.
Hầu hết các thành phần giao diện người dùng, đều sẵn dùng, phù hợp với các nguyên tắc của Material Design. 10 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP GVHD: Phạm Xuân Bình 2. Mô hình cấu tạo nên một project Flutter: Hình 1. Mô hình cấu tạo nên một project Flutter Phần lớn nhất chính là: My App Bên trong Material App sẽ có các thuộc tính: title, theme, và home.
Trong đó, tên title có ý nghĩa tương đương với Android @string/app_name để được đặt trong AndroidManifest với thuộc tính application:android: name, hay với iOS là Product Name, hay chí ít là Identity#Display name. Tên theme này có vai trò tương tự như phần theme trong values/styles của Android. Cuối cùng là home. Vai trò của tên này tương ứng với việc bạn định nghĩa Activity 11 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP GVHD: Phạm Xuân Bình Scaffold: đóng vai trò như phần nền để bố trí các thành phần khác theo phong các Material Design hay Material Theming.
Nếu bạn đã quen với việc viết ứng dụng Android theo phong cách mặc định là Google cung cấp thông qua theme Theme.AppCompat hay android:Theme.Material thì bạn không còn lạ gì với Scaffold này. Nó tương tự như vậy và giống như là sự tổng hợp của DrawerLayout và CoordinatorLayout vậy. AppBar: Nó tương tự như Toolbar hay ActionBar trong Android Sdk và Support Lib. Tuy nhiên, nó không đơn giản như Toolbar hay ActionBar, vì thực sự bạn phải chỉ định Widget con của nó bằng tay, thay vì dùng hàng loạt methods để thực hiện các thao tác đã định sẵn với các Widgets mặc định trong Android như setText hay setNavigationIcon.
Column và Row: Đây sẽ là những widget quen thuộc đối với các bạn chuyên code Android, vì chúng tương đồng với LinearLayout. Trong khi Row tương ứng với LinearLayout với orientation là horizontal, tức chiều ngang, thì Column resemble vertical LinearLayout, tức chiều dọc. Còn đối với các bạn chưa thao tác với Android Sdk, thì chúng sẽ sắp xếp tuần tự các widget con theo một hướng ngang từ start sang end đối với Row, hay từ top xuống bottom với Column Center: Đây sẽ là một Widget có thể gây cho bạn sự lầm lẫn khá tai hại bởi hành vi của nó có khác khi nó đi một mình hay đi chung với ai đó. Nếu nó đi một mình, và parent của nó không đi kèm – hay nói theo kiểu vui của tôi là không có cặp kè – với Widget ngang hàng (với tên parent đó) nào khác và bản thân của nó cũng không “nắm tay” ai, thì kích thước của nó sẽ tăng lên chiếm trọn không gian.
Còn nếu nó phải đi kèm với ai đó, thì nó sẽ e dè mà điều chỉnh kích thước chỉ vừa đủ bọc con/child của nó mà thôi. 12 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP GVHD: Phạm Xuân Bình 2. Ưu Điểm của Flutter: Fast Development: Tính năng Hot Reload hoạt động trong milliseconds để hiện thị giao diện tới bạn. Sử dụng tập hợp các widget có thể customizable để xây dựng giao diện trong vài phút.
Ngoài ra Hot Reload còn giúp bạn thêm các tính năng, fix bug tiết kiệm thời gian hơn mà không cần phải thông qua máy ảo, máy android hoặc iOS.