ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINHKHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO THỰC TẬP LẬP TRÌNH MOBILE VỚI FLUTTER Công ty thực tập : VINOVA Người phụ trách : Nguyễn Việt Anh – Flutter Leader T
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP LẬP TRÌNH MOBILE VỚI FLUTTER
Công ty thực tập : VINOVA Người phụ trách : Nguyễn Việt Anh – Flutter Leader Thực tập sinh : Huỳnh Trọng Phục
Trang 2LỜI MỞ ĐẦU
Hiện nay, trên thế giới, hầu như mọi thứ trong cuộc sống đều liên quan đến việc ứng dụng công nghệ thông tin, các hoạt động trong đời sống xã hội như: giao lưu, giải trí, việc làm đều có thể trở nên dễ dàng hơn nhờ chiếc điện thoại nhỏ gọn trong tầm tay đến thế giới đám mây của công nghệ số
Các ứng dụng trên điện thoại đang ngày càng phổ biến và nhiều người sử dụng, đồng thời có thể truy cập từ các nền tảng khác nhau như Android hay IOS Có rất nhiều công ty đang tập trung vào phát triển ứng dụng di động, một trong những công ty đó là Vinova Đây là một công ty đa quốc gia với văn phòng tại Thành phố Hồ Chí Minh, thành phố Đà Nẵng, thành phố Hà Nội và Midview City (Singapore) Công ty được thành lập với châm ngôn “Customer Focus, Integrity, Teamwork, Personal Excellence, and Challenger Spirit.”
Sau ba năm học tập trên trường, do mong muốn có thêm kinh nghiệm thực
tế, cũng như muốn được tham gia lập trình di động trong một môi trường chuyên nghiệp, em có dự định là sẽ thực tập trong hè Vì vậy, em quyết định chọn Vinova
- một môi trường lý tưởng, hiện đại, chuyên nghiệp - là nơi sẽ giúp em thực hiện được dự định này.
Trang 3Trân trọng gửi lời cảm ơn Công ty VINOVA đã tạo điều kiện cho em có cơ hội được thực tập tại công ty
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của nhóm trainer, nhóm thực tập chúng em đã tiếp thu được những kiến thức quan trọng để có thể làm được một ứng dụng di động Chân thành cảm ơn các anh chị trong nhóm trainer đã bỏ ra nhiều thời gian,công sức để hướng dẫn chúng em hoàn thành đợt thực tập này Đặc biệt cảm ơn anh Nguyễn Việt Anh, đã training Flutter, hướng dẫn, giúp đỡ cho chúng em tận tình cả những khó khăn trong công việc, đến những khó khăn việc làm quen với môi trường mới
Em xin cảm ơn anh Phát - leader team mobile, và mọi người trong team mobile đã nhiệt tình giúp đỡ, hỗ trợ em trong quá trình em thực tập tại quý công ty
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều kiện em làm bài báo cáo này
Huỳnh Trọng Phục Thành phố Hồ Chí Minh, ngày 20 tháng 12 năm 2022
Trang 4NHẬN XÉT CỦA KHOA
Trang 5
MỤC LỤC
Chương 1: Giới thiệu công ty thực tập 2
1 Giới thiệu công ty Vinova 2
2 Sản phẩm của công ty 2
Chương 2: Nội dung thực tập 4
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 4
2 Nghiên cứu kỹ thuật 5
3 Thực hiện project 7
4 Lịch làm việc 8
Chương 3: Chi tiết project 9
1 Giới thiệu về ứng dụng - Aunty 9
2 Thực hiện 9
3 Kế hoạch 10
TÀI LIỆU THAM KHẢO 12
TỔNG KẾT 13
Trang 6Chương 1: Giới thiệu công ty thực tập
1 Giới thiệu công ty Vinova.
Tên công ty: Công ty cổ phần Công nghệ VINOVA Tên viết tắt: VINOVA Ltd
Trang web công ty: https://vinova.sg/
Vinova là công ty phần mềm chuyên về phát triển sản phẩm cho các công ty startup Được thành lập năm 2010, Vinova nhanh chóng trở thành một trong top 10 Mobile Applications Development Companies tại Singapore
Khách hàng của Vinova đến từ Mỹ, Singapore, Việt Nam, Thái Lan, Hàn Quốc, Trung Quốc,…
Vinova sử dụng Net, Swift, Flutter, Ruby on Rails, NodeJS, PHP, React Native, Java để phát triển các ứng dụng web, mobile và mobile game của mình, kết hợp với các quy trình phần mềm hiện đại như Scrum, Agile
2 Sản phẩm của công ty.
Là một công ty outsourcing nên các sản phẩm của Vinova cũng rất đa dạng từ công nghệ cho đến nền tảng sử dụng
Trang 7Có thể điểm qua một số sản phẩm của công ty như:
The Straits Times (Android App, iOS App) : Ứng dụng đọc báo của tờ báo lớn nhất Singapore
Trang 84 SG50 Quiz (Mobile Game): Ứng dụng Quiz về Singapore từ du lịch , ẩm thực,…
MyLifeInc Website: Trang web bán lẻ của Eu Yan Sang (Trung Quốc)
Chương 2: Nội dung thực tập
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian : 1 ngày
Nội dung : Giới thiệu về công ty, cách tổ chức của công ty
- Được nghe chị Sara – Admin tại văn phòng HCM giới thiệu về công ty, quá trình thành lập và phát triển (như đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức của công ty
- Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email trong công việc
- Được hướng dẫn set up, sử dụng các công cụ giao tiếp (slack, gmail), công cụ quản
lý source code (Gitlab), công cụ quản lý dự án (Unfuddle)
Kết quả :
- Hiểu thêm về công ty Vinova, quá trình thành lập và phát triển
- Có thêm các kỹ năng về việc sử dụng email trong công việc, làm việc có kế hoạch,
có kỷ luật, có trách nhiệm hơn
Trang 9- Tăng kỹ năng giao tiếp, làm việc nhóm.
2 Nghiên cứu kỹ thuật.
2.1 Các công cụ làm việc.
Thời gian : 1 ngày
Nội dung : Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc
Trong thời gian này, supervisor đã hướng dẫn thực tập sinh tìm hiểu về các công
cụ sẽ giúp ích cho trong công việc sau này Một số phần mềm, ứng dụng như: Slack – dùng để giao tiếp; Gitlab – quản lý source code; Unfuddle – quản lý task, dự án, Postman – dùng để kiểm tra, review API; Hrpartner – quản lý nhân sự công ty Thực hiện : Thực hành sử dụng các phần mềm đã nêu trên
Kết quả : Hiểu biết thêm được các công cụ hỗ trợ cho công việc lập trình, và hoạt động tại công ty
2.2 Tìm hiểu ngôn ngữ Dart.
Thời gian: 2 ngày
Nội dung: Tìm hiểu ngôn ngữ Dart, áp dụng OOP cho ví dụ
Tìm hiểu cách sử dụng từng tính năng chính của Dart, từ các biến và toán tử cho các lớp và thư viện:
- Variables và data types Biết được các cách khai báo biến trong Dart, các kiểu dữ liệu và dung lượng bộ nhớ phân bổ cho từng biến như thế nào
- Control flow statements Biết được syntax, cách dùng của các câu lệnh điều kiện và vòng lặp trong Dart
- Classes và objects Biết cách tạo 1 class , object
- Encapsulation, polymorphism, abstraction, and inheritance Yêu cầu thực tập sinh ứng dụng dược các tính chất của OOP với ngôn ngữ Dart
- Mixins Hiểu được mixins là gì, ứng dụng được mixins
- Functions
- Futures, async, and await Biết sử dụng async và await để đồng bộ chương trình
Thực hiện:
Trang 10- Tham gia đầy đủ các buổi training của công ty
- Làm các bài thực hành, kiểm tra về kiến thức đã học
Kết quả:
- Nắm bắt được ngôn ngữ Dart
- Tăng khả năng tự học của bản thân
- Tăng khả năng giao tiếp với các thành viên trong team
2.3 Tìm hiểu về Flutter.
Thời gian: 2 ngày
Nội dung: Tìm hiểu Flutter SDK, các thành phần giao diện của Flutter
Tìm hiểu cách sử dụng từng tính năng chính của Dart, từ các biến và toán tử cho các lớp và thư viện:
- Stateless and Stateful Widget:
Hiểu được Stateless và Stateful Widget là gì? Khi nào nên sử dụng Stateless và Stateful, và sự khác biệt giữa chúng
- Stateful Widget lifecycle:
Yêu cầu nắm bắt được vòng đời của Stateful Widget, biết sử dụng các method của Stateful Widget
- Basic widgets:
Yêu cầu sử dụng được: Scaffold, AppBar, Column, Row, Icon, ElevatedButton, Container, Text
- Cupertino widgets:
Biết sử dụng Cupertino widgets để có thể tạo giao diện đẹp hơn cho IOS
- Material Components widgets:
Yêu cầu sử dụng được: BottomNavigationBar, Drawer, TabBar, TabView, các loại button, TextField, các loại dialog
Thực hiện:
- Tham gia đầy đủ các buổi training của công ty
- Làm các bài thực hành, kiểm tra về kiến thức đã học
Kết quả:
- Xây dựng được ứng dụng demo
- Nắm bắt được cách tạo 1 ứng dụng với Flutter
Trang 112.4 Tìm hiểu các State Management.
Thời gian: 2 ngày
Nội dung: Biết sử dụng ít nhất một trong các state management sau: Bloc, GetX, Redux
Thực hiện:
- Tìm hiểu Bloc, GetX
- Xây dựng 1 ứng dụng demo
Kết quả:
- Xây dựng được ứng dụng demo
- Hiểu rõ được Bloc và GetX
2.5 Tìm hiểu về Firebase và Flutter nâng cao.
Thời gian: 4 ngày
Nội dung:
- Biết cách set up Firebase cho ứng dụng
- Biết push notification bằng Firebase cloud messaging
- Yêu cầu thực tập sinh biết cách tạo được animation trong Flutter
- Hiểu được MethodChannel là gì và cách thực hiện
Thực hiện:
- Tìm hiểu các nội dung yêu cầu
- Code demo cho từng yêu cầu trên
Kết quả:
- Biết cách thực hiện một project với Firebase
- Cách tạo animation bằng Tween, AnimationController
- Viết được code demo, lấy giá trị của Pin thiết bị bằng MethodChannel
3 Thực hiện project
Sau ba tuần được training và thực hành, thực tập sinh đã nắm được những kiến thức
cơ bản về Flutter, Firebase Trong tháng thứ hai, trainer được tham gia vào một dự án thực tế
Chi tiết dự án sẽ được nói ở phần sau
Trang 124 Lịch làm việc
Mức độ hoàn thành
Nhận xét của người hướng dẫn
1
Tìm hiểu về công ty, cách tổ chức của công ty
Tìm hiểu ngôn ngữ Dart
- Nguyễn Việt Anh
- Trần Văn Việt
2 Tìm hiểu về Flutter Tìm hiểu về State
Management
- Nguyễn Việt Anh
- Trần Văn Việt
3
Tìm hiểu, setup Firebase
Tìm hiểu push notification bằng Firebase cloud messaging
Flutter animation
Flutter MethodChannel
- Nguyễn Việt Anh
- Vũ Thế Hòa
- Trần Văn Việt
4
Tham gia dự án Aunty
Làm việc với PO, BA bàn về dự án
- Nguyễn Việt Anh
- Nguyễn Việt Thắng
5
Code phần Login , Register, Verify phone number, forgot
password
Fix bug
- Nguyễn Việt Anh
6
Code UI cho phần
“Parent Home”
Code “Choose role screen”
Fix bug
- Nguyễn Việt Anh
7 Code phần “Create
request”, “Find Sitter”
Fix bug
Call API cho “Parent
- Nguyễn Việt Anh
Trang 138 Code “Service RequestDetail”, “Job detail”
Fix bug
- Nguyễn Việt Anh
Chương 3: Chi tiết project
1 Giới thiệu về ứng dụng - Aunty
Aunty là ứng dụng được phát triển cho khách hàng ở Singapore
Aunty là một ứng dụng kết nối bố mẹ (parent) với những người trông trẻ (sitter) đáng tin cậy Parent có thể tạo yêu cầu trông trẻ (request), mời sitter đến làm việc, sitter cũng có thể tham gia vào các request khác nếu có thể làm được sau khi gửi yêu cầu và được parent chấp nhận
Đây là ứng dụng kép – parent và sitter dùng chung một ứng dụng Ứng dụng có phân quyền
2 Thực hiện
Team back-end gồm 4 thành viên
Team front-end gồm 4 thành viên
Dùng Unfuddle để quản lý dự án:
Trang 14Gitlab để quản lý source code
3 Kế hoạch
Giai đoạn 1:
- Tham khảo tài liệu, tìm hiểu về dự án
- Set up dự án
- Thực hiện các tính năng Đăng nhập, đăng ký
- Thực hiện tính năng chọn quyền để vào ứng dụng
- Xây dựng màn hình Parent Profile và Sitter Profile
- Xây dựng trang Home của parent
Kết quả:
- Nắm bắt được các chức năng, luồng điều khiển, các giai đoạn phát triển dự án
- Hoàn thành xây dựng UI cho các tính năng đăng nhập, đăng ký, chọn quyền
để vào ứng dụng, trang profile của parent và sitter, parent home
- Hoàn thành gọi API của các màn hình trên do back-end cung cấp
Giai đoạn 2:
- Thực hiện được các tính năng:
Parent:
- Thêm thông tin địa chỉ, con cái
- Tạo service request
- Chỉnh sửa service request
Trang 15- Tìm kiếm sitter, mời được sitter tham gia vào request
- Xem thông tin chi tiết của request
- Hiển thị các jobs, request của parent đã tạo
- Chỉnh sửa service request
- Chỉnh sửa jobs
Sitter:
- Hiển thị các request của parent khác yêu cầu
- Hiển thị các request của parent khác chưa có người nhận
- Apply vào request của parent
- Chỉnh sửa thông tin cá nhân
- Hiển thị danh sách jobs đã nhận Kết quả:
- Hoàn thành các nhiệm vụ đúng thời hạn
- Cải thiện được khả năng refactor code
- Nhận được feedback tốt từ khách hàng
Trang 16TÀI LIỆU THAM KHẢO
1 https://dart.dev/guides/language/language-tour
2 https://flutter.dev/learn
3 https://firebase.google.com/docs
4 https://bloclibrary.dev/#/
5 https://pub.dev/packages/get
6 Và một số tài liệu nội bộ của công ty
Trang 17T NG Ổ K T Ế
Như vậy, chỉ trong vòng ba tuần ngắn ngủi, em đã có thể nắm vững được kiến thức về Flutter, các công nghệ có liên quan Đồng thời, em đã cải thiện được khả năng viết code, refactor code, cũng như khả năng giao tiếp và khả năng làm việc nhóm Và sau đó, em đã có thể tham gia vào dự án thực tế Được tham gia dự án với vai trò một trong những người code chính, tuy công việc có nặng hơn bình thường, nhưng nhờ đó em đã có thể cải thiện rất nhiều các kỹ thuật cũng như kỹ năng của mình Dự án hiện sắp được phát hành trên CH Play và App Store, và đó sẽ là một cột mốc ý nghĩa trong sự nghiệp của em sau này
Cuối cùng, em xin chân thành cảm ơn sự giúp đỡ của các anh chị nhóm Flutter, PO, PA
và nhóm Back-end, đã hỗ trợ em trong quá trình tham gia dự án