Kiến trúc MVVM trong Flutter – MVVM Pattern Flutter
Kiến trúc MVVM trong Flutter là một trong những pattern được sử dụng nhiều trong quá trình xây dựng ứng dụng Flutter.
4.2.1.1 Tổng quan kiến trúc MVVM
Viết tắt của Model – View – ViewModel.
Là một mô hình hỗ trợ ràng buộc dữ liệu hai chiều (Two-way data binding ) giữa View và ViewModel.
Cho phép tách biệt dữ liệu (Model), mã thực thi (Logic hay ViewModel ) và giao diện người dùng (View). Model
Model là thành phần liên kết với cơ sở dữ liệu, trong Model ln có các hàm truy xuất dữ liệu từ cơ sở dữ liệu.
Là bộ phận có chức năng lưu trữ toàn bộ dữ liệu của ứng dụng. Bộ phận này là một cầu nối giữa 2 thành phần bên dưới là View và Controller. Model thể hiện dưới hình thức là một cơ sở dữ liệu hoặc có khi chỉ đơn giản là một file XML bình thường.
Model thể hiện rõ các thao tác với cơ sở dữ liệu như cho phép xem, truy xuất, xử lý dữ liệu,…
4.2.1.1.1 Model
Model là thành phần liên kết với cơ sở dữ liệu, trong Model ln có các hàm truy xuất dữ liệu từ cơ sở dữ liệu.
Là bộ phận có chức năng lưu trữ tồn bộ dữ liệu của ứng dụng. Bộ phận này là một cầu nối giữa 2 thành phần bên dưới là View và Controller. Model thể hiện dưới hình thức là một cơ sở dữ liệu hoặc có khi chỉ đơn giản là một file XML bình thường. Model thể hiện rõ các thao tác với cơ sở dữ liệu như cho phép xem, truy xuất, xử lý dữ liệu,…
4.2.1.1.2 View
View hay UI hay Presentation Layer là phần giao diện của ứng dụng và nhận
tương tác của người dùng.
Một điểm khác biệt của View trong MVVM là : khả năng thực hiện các hành vi và phản hồi lại người dùng thơng qua tính năng binding, command.
4.2.1.1.3 ViewModel
• Được xem là một thành phần thay thế lớp Controller trong mơ hình MVC. • ViewModel khơng biết được các thơng tin gì về tầng bên trên của nó,
cũng như khơng biết thơng tin gì về View.
• Một ViewModel có thể sử dụng cho nhiều View thơng qua binding data, có thể 1 hay 2 chiều tuỳ nhu cầu của ứng dụng.
• Sự khác biệt ở chỗ : Trong ViewModel có chứa các mã lệnh thực hiện
Data Binding, Command.
4.2.1.2 Triển khai kiến trúc MVVM Flutter
Tạo project mới và khai báo thư viện mới nhất của : provider, http Tạo các folder như bên dưới:
models
Tạo một file model có tên: user.dart class User { Name? name; Picture? picture; String? email; String? phone;
User({this.name, this.picture, this.email, this.phone});
User.fromJson(Map<String, dynamic> json) : name = new Name.fromJson(json['name']), picture = new Picture.fromJson(json['picture']), email = json['email'],
phone = json['phone'];
@override
String toString() {
// TODO: implement toString
return phone! + " " + email! + " " + name!.first!; } } class Name { String? last; String? first; Name({this.last, this.first});
Name.fromJson(Map<String, dynamic> json) : last = json['last'], first = json['first']; } class Picture { String? medium; Picture({this.medium});
Picture.fromJson(Map<String, dynamic> json) : medium = json['large'];
}
data_sources
Tạo file api_urls.dart: 1
2
3
class ApiUrls{
final Uri API_USER_LIST = Uri.parse('https://api.randomuser.me/?results=50');
}
view_models
Tạo file user_list_view_model.dart 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import 'package:flutter/material.dart'; import 'package:mvvm/data_sources/api_services.dart'; import 'package:mvvm/models/user.dart';
class UserListViewModel with ChangeNotifier{
List<User> userList = [];
fetchUserList() async {
this.userList = await ApiServices().fetchUser(); notifyListeners();
} }
views
Tạo file user_list_screen.dart 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:mvvm/data_sources/api_services.dart'; import 'package:mvvm/models/user.dart'; import 'package:mvvm/resources/strings.dart'; import 'package:mvvm/view_models/user_list_view_model.dart'; import 'package:provider/provider.dart';
class UserListScreen extends StatefulWidget { @override
_UserListScreenState createState() => _UserListScreenState();
}
class _UserListScreenState extends State<UserListScreen> { @override
void initState() {
// TODO: implement initState super.initState();
Provider.of<UserListViewModel>(context, listen: false).fetchUserList(); }
@override
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
final userListOnProvider = Provider.of<UserListViewModel>(context); return Scaffold( appBar: AppBar( title: Text(USER_LIST), centerTitle: true, ), body: Container( padding: EdgeInsets.only(left: 10), height: MediaQuery.of(context).size.height, width: MediaQuery.of(context).size.height, child: userListOnProvider.userList.length!= 0 ? ListView.builder( itemCount: userListOnProvider.userList.length, itemBuilder: (BuildContext context, int index) {
return UserItem(user: userListOnProvider.userList[index],); } ): Center( child: Container( height: 100, width: 100, child: CircularProgressIndicator(), ), ) ), ); } }
class UserItem extends StatelessWidget { User? user;
UserItem({this.user});
@override
Widget build(BuildContext context) {
return new Container(
margin: new EdgeInsets.only(top: 20.0), child: new Row(
children: <Widget>[ new Container( height: 80.0, width: 80.0,
margin: new EdgeInsets.only(right: 20.0), child: new CircleAvatar(
backgroundImage: new NetworkImage(user!.picture!.medium!), ), ), new Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ new Text( user!.name!.first! + " " + user!.name!.last!, style: new TextStyle(
fontSize: 20.0, color: Colors.black, ),
),
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
margin: new EdgeInsets.only(top: 10.0), child: new Text(
user!.email!, style: new TextStyle( fontSize: 15.0, color: Colors.grey, ), ), ), ], ) ], ), ); } } resources
Trong file này chứa các file utils hoặc Widgets, strings , sẽ dùng chung cho toàn bộ dự án.
4.2.2.1 Intents - kịch bản chatbot Dr.Cowin
Intent name Training phrases
Text Response
iKienThucCoBan Kiến thức cơ bản về sức khỏe?
Sức khỏe cơ bản?
Bạn phải chăm sóc tốt cho bản thân ở cả 2 phương diện Tâm lý và Thể chất để chống chọi với không chỉ Covid-19 mà còn với nhiều căn bệnh cấp/mãn tính khác trong đời sống hàng ngày,
Bạn muốn biết thêm về:
Sức khỏe nói chung
Sức khỏe
[button] Bảo vệ sức khỏe thể chất
iTamLy Tâm lý
Tinh thần
Sức khỏe tâm lý
Bảo vệ tâm lý
Điều trị tâm lý
Sức khỏe tâm lý hay tinh thần của bạn sẽ
được hình thành từ quá trình phát triển trong suốt
cuộc đời bạn và nếu nhìn nhận ở góc độ sinh học, tâm lý ln bị tác động mạnh mẽ nhất bởi hoocmon và mơi trường sống. Vì vậy để tránh việc các
hoocmon tác động xấu lên suy nghĩ của bạn,
Dr.Cowin đưa ra những lời khuyên sau: (thông tin
được đúc kết từ nhiều tài liệu, nghiên cứu về tâm
lý, y tế, giáo dục)
1. Tập luyện thể thao, học thiền, yoga hoặc tập các bài tập tăng cường tính tập trung để điều
hịa suy nghĩ, phát triển tư duy, giảm tỏa stress. 2. Bạn có thể thử việc thi thoảng ăn
chay/nhịn ăn hoặc ăn chay hoàn toàn (CHỈ KHI sức khỏe bạn THỰC SỰ TỐT), để bảo vệ
hoocmon khỏi những tạp chất xấu tích tụ từ các loại thịt, làm chậm tốc độ lão hóa của cơ thể..
3. Có thể sử dụng những thực phẩm chức năng có các hoạt chất tác động tốt tới hoocmon (L- Cysine…)
4. Trò chuyện, chia sẻ với thái độ thân ái, cư xử hiền hòa với người xung quanh cũng là cách
giúp bạn lâu lão hóa, bảo về sức khỏe thể chất lẫn tinh thần.
5. Sinh hoạt điều độ để bảo toàn đồng hồ
sinh học.
iTheChat Thể chất
Sức khỏe thể chất
Giữ gìn cơ thể mạnh khỏe để bảo vệ khơng chỉ cho bản thân mà cịn cho những người thân yêu xung quanh mình.
1. Giữ gìn vệ sinh thân thể, thực hiện quy tắc 5K
2. Ăn uống điều độ, cân bằng dinh dưỡng. 3. Ngủ nghỉ đúng giờ để bảo vệ đồng hồ
sinh học
4. Tập luyện thể dục thể thao với cường độ phù hợp, nâng cao sức khỏe nền và thể hình.
5. Trị chuyện, chia sẻ với thái độ thân ái, cư xử hiền hòa với người xung quanh cũng là cách
giúp bạn lâu lão hóa, bảo về sức khỏe thể chất lẫn tinh thần.
6. Vận động mọi người 1 cách khéo léo về việc chăm sóc cơ thể, chăm chỉ dọn dẹp không gian sống để mầm bệnh không tồn đọng trong ngơi nhà của bạn.
iNhapCanh Quy trình nhập cảnh?
Nhập cảnh?
Đi máy bay về?
Hãy cho CoWin biết, bạn thuộc nhóm đối
tượng nào?
[button] 1. Cơng dân Việt Nam hoặc người nước ngồi là thân nhân của công dân Việt Nam
[button] 2. Người nước ngoài là chuyên gia, nhà đầu tư, nhà quản lý doanh nghiệp, lao động kỹ thuật cao,… có thỏa thuận hợp tác và thân nhân
Đi nước ngoài
về?
Đi ngước
ngoài?
[button] 3. Chuyên gia làm việc ngắn ngày (dưới 14 ngày)
[button] 4. Người nước ngồi nhập cảnh vì ngoại giao/cơng vụ
[Button] 5. Học sinh, sinh viên
iNhapCanh_1 QUY TRÌNH NHẬP CẢNH TRÊN
CHUYẾN BAY THƯƠNG MẠI QUỐC TẾ
THƯỜNG LỆ, CÁCH LY TẬP TRUNG DƯỚI 14 NGÀY
*Quy trình này chỉ áp dụng với: Người nước ngoài
là chuyên gia, nhà đầu tư, nhà quản lý doanh
nghiệp, lao động kỹ thuật cao, các đối tượng theo thỏa thuận hợp tác (gọi tắt là chuyên gia) và thân nhân (cha, mẹ, vợ, chẳng, con) nhập cảnh vào Việt Nam từ 14 ngày trở lên và Học sinh, sinh viên * Tuyệt đối không sử dụng phương tiện giao thông công cộng để vận chuyển người nhập cảnh đến khu cách ly tập trung, về nơi lưu trú, từ nơi lưu trú đến
nơi làm việc.
* Theo dõi sức khỏe 14 ngày tiếp theo sau khi kết thúc cách ly tại nơi lưu trú:
- Mở kết nối liên tục và các cài đặt ứng dụng khai báo sức khỏe Vietnam Health Declaration, NCOVI, Bluezone
- Khai báo tình trạng sức khỏe và các tiếp
xúc theo hướng dẫn.
1. Có hộ chiếu hợp lệ. 2. Giấy chấp thuận nhập cảnh (đối với người nước
ngồi) do cơ quan có thấm
quyền cấp.
3. Có Giấy xác nhận âm tính với vi rút SARS-CoV-2 của
cơ quan có thấm quyền trước ngày khởi hành 3-5
ngày.
4. Có bảo hiểm ytế hoặc cam kết chỉ trả chỉ phí trong,
trường hợp mắc COVID-19. 5. Đăng ký và có xác nhận
tiếp nhận của cơ sở cách ly tại khách sạn và dịch vụ đưa
đón.
6. Khai báo y tế điện tử trong vòng 12 giờ trước khi khởi hành
B. Trên máy bay: Đeo khẩu trang và tuân thủ hướng dẫn phòng chống lây nhiễm
C. Tại cửa khẩu nhập cảnh
1. Sử dụng khẩu trang và kiểm tra thân nhiệt.
2. Kiểm tra tính hợp lệ của việc thực hiện các yêu cầu
trước khi lên máy bay. 3. Cài đặt đủ 03 ứng dụng:
Vietnam Health Declaration, NCOVI và ứng dụng truy vết.(Bluezone).
4. Thực hiện biện pháp phòng chống dịch khi đi chuyển về thẳng địa điểm
cách ly đã đăng ký.
D. Cách ly tập trung tại khách sạn (7 ngày
đầu tiên)
1. Đeo khẩu trang và thực
hiện phòng chống lây nhiễm tại nơi cách ly.
2. Lấy mẫu xét nghiệm ngày
đầu nhập cảnh trong trường
hợp chưa được lấy mẫu tại sân bay. Thực hiện lấy mẫu xét nghiệm đảm bảo 2 lần
ngày đầu và ngày thứ 6. 3. Trường hợp có kết quả xét
nghiệm âm tính với SARS- CoV-2 với mâu bệnh phẩm lấy vào ngày thứ 6, được chuyển về địa điểm cách ly tại nơi lưu trú.
E. Cách ly tại nơi lưu trú (7 ngày tiếp theo)
1. Đeo khẩu trang và thực
tiện các biện pháp vệ sinh cá nhân phòng chống lây nhiễm. 2. Không sử dụng phương
tiện giao thông công cộng để di chuyển từ nơi lưu trú đến
nơi làm việc.
3. Kết nối liên tục và cập nhật tình hình sức khỏe hàng Tigày trên các ứng dụng đã khai báo.
4. Lấy mẫu xét nghiệm lần cuối vào ngày thứ 14 kế từ khi nhập cảnh. iTrieuChung Triệu chứng Covid19? Triệu chứng? Dấu hiệu nhận biết?
Dấu hiệu nhiễm Covid?
COVID-19 tác động đến mỗi người theo những cách khác nhau. Hầu hết những người nhiễm vi-rút sẽ có triệu chứng bệnh từ nhẹ đến
trung bình và có thể hồi phục mà không cần nhập viện.
Các triệu chứng thường gặp nhất: 1. sốt
2. ho 3. mệt mỏi
4. mất vị giác hoặc khứu giác 5. đau họng
Các triệu chứng ít gặp hơn: 1. đau đầu
2. đau nhức cơ 3. tiêu chảy
4. da nổi mẩn hay ngón tay hoặc ngón chân bị tấy đỏ hoặc tím tái
5. mắt đỏ hoặc ngứa Các triệu chứng nghiêm trọng:
1. khó thở
2. mất khả năng nói hay cử động hoặc thấy lú lẫn
3. đau ngực
Hãy báo cán bộ y tế địa phương lập tức nếu bạn gặp phải các triệu chứng nghiêm trọng. Luôn gọi điện trước khi gặp bác sĩ hoặc đến cơ sở y tế.
Những người có triệu chứng nhẹ và khơng có biểu hiện bệnh nào khác nên điều trị triệu chứng tại nhà.
Thông thường, các triệu chứng sẽ xuất hiện
sau 5-6 ngày kể từ khi một người nhiễm vi-rút. Tuy nhiên, thời gian này có thể lên tới 14 ngày.
Bản dịch do SDL Inc thực hiện. For informational purposes only. Consult your local medical authority for advice.
iLayNhiem Covid lây lan?
Covid đã lan
truyền như thế nào?
Cách lây lan
Lây lan
COVID-19 lây lan khi người nhiễm bệnh thở ra các giọt bắn và các hạt rất nhỏ có chứa vi-rút. Những giọt bắn và hạt này có thể bị người khác hít vào hoặc rơi vào mắt, mũi hoặc miệng của họ. Trong một số trường hợp, họ có thể gây ô
nhiễm các bề mặt họ chạm vào. Những người ở
gần hơn 6 feet so với người bị nhiễm bệnh có nhiều khả năng bị nhiễm bệnh nhất.
COVID-19 lây lan theo ba cách chính: 1. Hít vào khơng khí khi ở gần người bị nhiễm bệnh đang thở ra những giọt nhỏ và các hạt có chứa vi-rút.
2. Để những giọt nhỏ và các hạt có
chứa vi-rút rơi vào mắt, mũi hoặc miệng, đặc biệt là thông qua sự bắn tóe và tia xịt như ho hoặc hắt
hơi.
3. Chạm vào mắt, mũi hoặc miệng bằng tay có vi-rút trên đó.
iNghiNhiem Tơi nghĩ mình đã nhiễm covid Bị nhiễm covid phải làm gì? Làm gì khi bị nhiễm covid? Bị nhiễm bệnh Nhiễm covid Nhiễm bệnh Tôi đã nhiễm bệnh.
Hãy liên lạc đến cơ quan y tế địa phương để được hướng dẫn điều trị từ xa.Trong trường hợp bạn đang có dấu hiệu cảnh báo cấp cứu
của COVID-19 như khó thở, đau hoặc tức ngực
thường xuyên, trạng thái lẫn lộn mới, Không thể
thức dậy hay duy trì sự tỉnh táo, da, móng tay hoặc môi nhợt nhạt, xám hoặc có màu xanh, tùy vào tơng da.
Gọi 911 hoặc gọi trước cho cơ sở cấp cứu địa phương: Thông báo cho nhân viên trực tổng đài rằng q vị đang tìm kiếm sự chăm sóc cho một người nhiễm hoặc có thể nhiễm COVID- 19.
iPhongChong Phịng tránh Phòng chống Phòng ngừa
Giữ khoảng cách an tồn với người khác (ít nhất 1 mét), kể cả khi họ khơng có biểu hiện bệnh. Đeo khẩu trang ở nơi công cộng, nhất là khi ở trong nhà hoặc khi không thể giữ khoảng cách.
Chọn những không gian mở, thơng thống thay vì những khơng gian kín. Mở cửa sổ nếu ở
trong nhà.
Thường xuyên rửa tay. Dùng xà phòng và
nước hoặc dung dịch rửa tay chứa cồn.
Tiêm vaccine khi đến lượt. Tuân thủ chỉ dẫn của địa phương về việc tiêm vaccine.
Khi ho hoặc hắt hơi, hãy che mũi và miệng bằng khăn giấy hoặc khuỷu tay.
4.2.2.2 Kịch bản entity
Entity Reference value Synonym
ePhongTranh Phòng tránh Phòng chống;
phòng ngừa; đề phòng
eLayNhiem Lây nhiễm Lây lan; lan truyền
eCapCuu Cấp cứu Khẩn cấp;
eTaiGia Tại gia Tại nhà;
Tự cách ly
eBoiBo Bồi bổ Bồi bổ sức khỏe;
Ăn uống đầy đủ, tăng
cường tập luyện thể dục thể thao
eHanChe Hạn chế Tránh;
Giảm bớt việc
eDiChung Di chứng Triệu chứng sau nhiễm
eTamLy Tâm lý Tinh thần
eTheChat Thể chất Thân thể, Tâm
eVeSucKhoe Về sức khỏe Về y tế