Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Hoàng Văn Đạt
mypoint_flutter_app
Commits
6b980613
Commit
6b980613
authored
Nov 14, 2025
by
DatHV
Browse files
update project structure
parent
bfff9e47
Changes
507
Show whitespace changes
Inline
Side-by-side
lib/model
/auth
/working_site_model.dart
→
lib/
features/personal/
model/working_site_model.dart
View file @
6b980613
import
'package:json_annotation/json_annotation.dart'
;
import
'../../screen/membership/models/membership_level_model.dart'
;
part
'working_site_model.g.dart'
;
@JsonSerializable
()
...
...
lib/model
/auth
/working_site_model.g.dart
→
lib/
features/personal/
model/working_site_model.g.dart
View file @
6b980613
File moved
lib/
screen
/personal/personal_edit_item_model.dart
→
lib/
features
/personal/personal_edit_item_model.dart
View file @
6b980613
import
'package:flutter/cupertino.dart'
;
import
'package:mypoint_flutter_app/extensions/datetime_extensions.dart'
;
import
'package:mypoint_flutter_app/preference/data_preference.dart'
;
import
'package:mypoint_flutter_app/
screen
/personal/personal_gender.dart'
;
import
'../../config
s
/callbacks.dart'
;
import
'package:mypoint_flutter_app/
core/utils/
extensions/datetime_extensions.dart'
;
import
'package:mypoint_flutter_app/
shared/
preference
s
/data_preference.dart'
;
import
'package:mypoint_flutter_app/
features
/personal/personal_gender.dart'
;
import
'../../
app/
config/callbacks.dart'
;
import
'../location_address/location_address_viewmodel.dart'
;
enum
SectionPersonalEditType
{
...
...
lib/
screen
/personal/personal_edit_screen.dart
→
lib/
features
/personal/personal_edit_screen.dart
View file @
6b980613
import
'package:flutter/foundation.dart'
;
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/preference/data_preference.dart'
;
import
'package:mypoint_flutter_app/
screen
/personal/personal_edit_item_model.dart'
;
import
'package:mypoint_flutter_app/
screen
/personal/personal_edit_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
screen
/personal/personal_gender.dart'
;
import
'../../
base
/base_screen.dart'
;
import
'../../
base
/basic_state.dart'
;
import
'../../
resources
/base_color.dart'
;
import
'../../widgets/alert/data_alert_model.dart'
;
import
'../../widgets/custom_navigation_bar.dart'
;
import
'package:mypoint_flutter_app/
shared/
preference
s
/data_preference.dart'
;
import
'package:mypoint_flutter_app/
features
/personal/personal_edit_item_model.dart'
;
import
'package:mypoint_flutter_app/
features
/personal/personal_edit_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
features
/personal/personal_gender.dart'
;
import
'../../
shared/widgets/base_view
/base_screen.dart'
;
import
'../../
shared/widgets/base_view
/basic_state.dart'
;
import
'../../
core/theme
/base_color.dart'
;
import
'../../
shared/
widgets/alert/data_alert_model.dart'
;
import
'../../
shared/
widgets/custom_navigation_bar.dart'
;
class
PersonalEditScreen
extends
BaseScreen
{
const
PersonalEditScreen
({
super
.
key
});
...
...
@@ -141,7 +140,7 @@ class _PersonalEditScreenState extends BaseState<PersonalEditScreen> with BasicS
);
}
_onTapItemChangeValue
(
PersonalEditItemModel
item
)
async
{
Future
<
void
>
_onTapItemChangeValue
(
PersonalEditItemModel
item
)
async
{
if
(
item
.
sectionType
==
SectionPersonalEditType
.
province
||
item
.
sectionType
==
SectionPersonalEditType
.
district
)
{
viewModel
.
navigateToLocationScreen
(
item
);
}
else
if
(
item
.
sectionType
==
SectionPersonalEditType
.
birthday
)
{
...
...
@@ -291,7 +290,7 @@ class _PersonalEditScreenState extends BaseState<PersonalEditScreen> with BasicS
onSelected
(
gender
);
},
);
})
.
toList
()
,
}),
const
Divider
(
height:
100
),
],
);
...
...
lib/
screen
/personal/personal_edit_viewmodel.dart
→
lib/
features
/personal/personal_edit_viewmodel.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/extensions/string_extension.dart'
;
import
'package:mypoint_flutter_app/network
ing
/restful_api_client_all_request.dart'
;
import
'package:mypoint_flutter_app/
screen
/personal/personal_edit_item_model.dart'
;
import
'package:mypoint_flutter_app/
screen
/personal/personal_gender.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'../../config
s
/constants.dart'
;
import
'../../preference/data_preference.dart'
;
import
'package:mypoint_flutter_app/
core/utils/
extensions/string_extension.dart'
;
import
'package:mypoint_flutter_app/
core/
network/restful_api_client_all_request.dart'
;
import
'package:mypoint_flutter_app/
features
/personal/personal_edit_item_model.dart'
;
import
'package:mypoint_flutter_app/
features
/personal/personal_gender.dart'
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
import
'../../
app/
config/constants.dart'
;
import
'../../
shared/
preference
s
/data_preference.dart'
;
import
'../../shared/router_gage.dart'
;
import
'../../utils/validation_utils.dart'
;
import
'../../
core/
utils/validation_utils.dart'
;
import
'../location_address/location_address_viewmodel.dart'
;
class
PersonalEditViewModel
extends
RestfulApiViewModel
{
...
...
@@ -26,33 +26,33 @@ class PersonalEditViewModel extends RestfulApiViewModel {
final
profile
=
DataPreference
.
instance
.
profile
;
if
(
profile
==
null
)
return
;
province
.
value
=
AddressBaseModel
(
code:
profile
?
.
workerSite
?.
locationProvinceCode
,
name:
profile
?
.
workerSite
?.
locationProvinceName
,
code:
profile
.
workerSite
?.
locationProvinceCode
,
name:
profile
.
workerSite
?.
locationProvinceName
,
);
district
.
value
=
AddressBaseModel
(
code:
profile
?
.
workerSite
?.
locationDistrictCode
,
name:
profile
?
.
workerSite
?.
locationDistrictName
,
code:
profile
.
workerSite
?.
locationDistrictCode
,
name:
profile
.
workerSite
?.
locationDistrictName
,
);
birthday
=
profile
?
.
workerSite
?.
birthday
?.
toDateFormat
(
'yyyy-MM-dd'
);
birthday
=
profile
.
workerSite
?.
birthday
?.
toDateFormat
(
'yyyy-MM-dd'
);
gender
=
PersonalGender
.
from
(
profile
.
workerSite
?.
sex
??
"U"
);
var
name
=
profile
?
.
workerSite
?.
fullname
??
""
;
var
name
=
profile
.
workerSite
?.
fullname
??
""
;
editDataModel
.
value
=
PersonalEditDataModel
(
name:
name
,
nickname:
profile
?
.
workerSite
?.
nickname
,
phone:
profile
?
.
workerSite
?.
phoneNumber
,
email:
profile
?
.
workerSite
?.
email
,
identificationNumber:
profile
?
.
workerSite
?.
identificationNumber
,
nickname:
profile
.
workerSite
?.
nickname
,
phone:
profile
.
workerSite
?.
phoneNumber
,
email:
profile
.
workerSite
?.
email
,
identificationNumber:
profile
.
workerSite
?.
identificationNumber
,
birthday:
birthday
,
gender:
gender
,
address:
profile
?
.
workerSite
?.
addressFull
,
address:
profile
.
workerSite
?.
addressFull
,
province:
province
.
value
,
district:
district
.
value
,
);
isValidate
.
value
=
validate
();
}
updateItemEditData
(
PersonalEditItemModel
item
,
String
value
)
{
void
updateItemEditData
(
PersonalEditItemModel
item
,
String
value
)
{
if
(
editDataModel
.
value
==
null
)
return
;
switch
(
item
.
sectionType
??
SectionPersonalEditType
.
nickname
)
{
case
SectionPersonalEditType
.
name
:
...
...
@@ -104,7 +104,7 @@ class PersonalEditViewModel extends RestfulApiViewModel {
});
}
navigateToLocationScreen
(
PersonalEditItemModel
item
)
async
{
Future
<
void
>
navigateToLocationScreen
(
PersonalEditItemModel
item
)
async
{
if
(
item
.
sectionType
==
null
)
return
;
if
(
item
.
sectionType
==
SectionPersonalEditType
.
province
)
{
final
result
=
await
Get
.
toNamed
(
...
...
@@ -146,7 +146,7 @@ class PersonalEditViewModel extends RestfulApiViewModel {
if
(
model
.
birthday
==
null
)
{
return
false
;
}
if
(
model
.
gender
==
null
||
model
.
gender
==
'notAllowed'
)
{
if
(
model
.
gender
==
null
||
model
.
gender
==
PersonalGender
.
unknown
)
{
return
false
;
}
if
((
model
.
email
??
''
).
isNotEmpty
&&
!
isValidEmail
(
model
.
email
!))
{
...
...
lib/
screen
/personal/personal_gender.dart
→
lib/
features
/personal/personal_gender.dart
View file @
6b980613
File moved
lib/
screen
/personal/personal_screen.dart
→
lib/
features
/personal/personal_screen.dart
View file @
6b980613
import
'package:flutter/foundation.dart'
;
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/directional/directional_screen.dart'
;
import
'package:mypoint_flutter_app/extensions/num_extension.dart'
;
import
'package:mypoint_flutter_app/preference/data_preference.dart'
;
import
'package:mypoint_flutter_app/preference/point/point_manager.dart'
;
import
'../../base/base_screen.dart'
;
import
'../../base/basic_state.dart'
;
import
'../../directional/directional_action_type.dart'
;
import
'../../preference/package_info.dart'
;
import
'../../preference/point/header_home_model.dart'
;
import
'../../resources/base_color.dart'
;
import
'package:mypoint_flutter_app/shared/navigation/directional_screen.dart'
;
import
'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart'
;
import
'package:mypoint_flutter_app/shared/preferences/data_preference.dart'
;
import
'package:mypoint_flutter_app/shared/preferences/point/point_manager.dart'
;
import
'../../shared/widgets/base_view/base_screen.dart'
;
import
'../../shared/widgets/base_view/basic_state.dart'
;
import
'../../app/routing/directional_action_type.dart'
;
import
'../../core/services/package_info.dart'
;
import
'../../core/theme/base_color.dart'
;
import
'../../shared/router_gage.dart'
;
import
'../../services/logout_service.dart'
;
import
'package:mypoint_flutter_app/web/web_helper.dart'
;
import
'../../widgets/alert/data_alert_model.dart'
;
import
'../../core/services/logout_service.dart'
;
import
'../../shared/widgets/alert/data_alert_model.dart'
;
import
'../home/header_home_viewmodel.dart'
;
import
'../home/models/header_home_model.dart'
;
import
'../popup_manager/popup_runner_helper.dart'
;
class
PersonalScreen
extends
BaseScreen
{
...
...
lib/
screen/home
/model
s
/pipi_detail_model.dart
→
lib/
features/pipi
/model/pipi_detail_model.dart
View file @
6b980613
import
'package:mypoint_flutter_app/
direc
tion
al
/directional_screen.dart'
;
import
'package:mypoint_flutter_app/
shared/naviga
tion/directional_screen.dart'
;
class
PipiSupportItemModel
{
final
String
?
id
;
...
...
lib/
screen
/pipi/pipi_detail_screen.dart
→
lib/
features
/pipi/pipi_detail_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/
screen
/pipi/pipi_detail_viewmodel.dart'
;
import
'package:mypoint_flutter_app/widgets/image_loader.dart'
;
import
'
../home/
model
s
/pipi_detail_model.dart'
;
import
'package:mypoint_flutter_app/
features
/pipi/pipi_detail_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
shared/
widgets/image_loader.dart'
;
import
'model/pipi_detail_model.dart'
;
class
PipiDetailScreen
extends
StatefulWidget
{
const
PipiDetailScreen
({
super
.
key
});
...
...
lib/
screen
/pipi/pipi_detail_viewmodel.dart
→
lib/
features
/pipi/pipi_detail_viewmodel.dart
View file @
6b980613
import
'package:get/get_rx/src/rx_types/rx_types.dart'
;
import
'package:mypoint_flutter_app/network
ing
/restful_api_client_all_request.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'
../home/
model
s
/pipi_detail_model.dart'
;
import
'package:mypoint_flutter_app/
core/
network/restful_api_client_all_request.dart'
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
import
'model/pipi_detail_model.dart'
;
class
PipiDetailViewModel
extends
RestfulApiViewModel
{
final
RxList
<
PipiSupportItemModel
>
items
=
<
PipiSupportItemModel
>[].
obs
;
...
...
@@ -16,9 +16,9 @@ class PipiDetailViewModel extends RestfulApiViewModel {
await
callApi
<
PipiDetailResponseModel
>(
request:
()
=>
client
.
getPipiDetail
(),
onSuccess:
(
data
,
_
)
{
items
.
assignAll
(
data
?
.
items
??
[]);
items
.
assignAll
(
data
.
items
??
[]);
},
onFailure:
(
msg
,
_
,
_
_
)
async
{
onFailure:
(
msg
,
_
,
_
)
async
{
items
.
clear
();
},
);
...
...
lib/
screen
/popup_manager/popup_manager_model.dart
→
lib/
features
/popup_manager/popup_manager_model.dart
View file @
6b980613
import
'package:json_annotation/json_annotation.dart'
;
import
'package:mypoint_flutter_app/
direc
tion
al
/directional_screen.dart'
;
import
'package:mypoint_flutter_app/
shared/naviga
tion/directional_screen.dart'
;
part
'popup_manager_model.g.dart'
;
@JsonSerializable
()
...
...
lib/
screen
/popup_manager/popup_manager_model.g.dart
→
lib/
features
/popup_manager/popup_manager_model.g.dart
View file @
6b980613
File moved
lib/
screen
/popup_manager/popup_manager_screen.dart
→
lib/
features
/popup_manager/popup_manager_screen.dart
View file @
6b980613
import
'dart:async'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/material.dart'
;
import
'package:mypoint_flutter_app/
screen
/popup_manager/popup_manager_model.dart'
;
import
'package:mypoint_flutter_app/
screen
/popup_manager/popup_manager_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
features
/popup_manager/popup_manager_model.dart'
;
import
'package:mypoint_flutter_app/
features
/popup_manager/popup_manager_viewmodel.dart'
;
/// Logger tuỳ bạn hook vào hệ thống hiện có (Firebase, MoEngage, …)
void
logPopupShowing
(
{
required
String
popupId
,
required
String
requestId
})
{
...
...
@@ -31,7 +30,7 @@ Future<void> showPopupManagerScreen(
barrierDismissible:
false
,
barrierLabel:
'popup'
,
transitionDuration:
const
Duration
(
milliseconds:
220
),
pageBuilder:
(
_
,
_
_
,
__
_
)
{
pageBuilder:
(
_
,
_
,
_
)
{
return
_BasePopupView
(
model:
modelPopup
,
initialCountdown:
timeCountDown
,
...
...
@@ -40,7 +39,7 @@ Future<void> showPopupManagerScreen(
},
);
},
transitionBuilder:
(
_
,
anim
,
_
_
,
child
)
{
transitionBuilder:
(
_
,
anim
,
_
,
child
)
{
return
Transform
.
scale
(
scale:
0.96
+
(
0.04
*
anim
.
value
),
child:
Opacity
(
opacity:
anim
.
value
,
child:
child
));
},
);
...
...
lib/features/popup_manager/popup_manager_viewmodel.dart
0 → 100644
View file @
6b980613
import
'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart'
;
import
'package:mypoint_flutter_app/features/popup_manager/popup_manager_model.dart'
;
import
'../../core/network/restful_api_viewmodel.dart'
;
class
PopupManagerViewModel
extends
RestfulApiViewModel
{
PopupManagerViewModel
.
_
();
static
final
PopupManagerViewModel
instance
=
PopupManagerViewModel
.
_
();
final
Set
<
String
>
_shownIds
=
{};
List
<
PopupManagerModel
>?
_popupData
;
bool
_loaded
=
false
;
Future
<
void
>?
_loadingFuture
;
Future
<
void
>
ensureLoaded
()
async
{
if
(
_loaded
)
return
;
if
(
_loadingFuture
!=
null
)
{
return
_loadingFuture
;
}
_loadingFuture
=
_getPopupManagerDataInternal
();
await
_loadingFuture
;
}
Future
<
void
>
_getPopupManagerDataInternal
()
async
{
try
{
final
response
=
await
client
.
getPopupManagerCommonScreen
();
_popupData
=
response
.
data
??
[];
_loaded
=
true
;
}
catch
(
e
)
{
_popupData
=
[];
_loaded
=
true
;
rethrow
;
}
finally
{
_loadingFuture
=
null
;
}
}
PopupManagerModel
?
getForScreen
(
String
screenName
)
{
if
(
_popupData
==
null
||
_popupData
!.
isEmpty
)
return
null
;
final
idx
=
_popupData
!.
indexWhere
(
(
e
)
=>
(
e
.
screenToShow
??
''
).
trim
().
toUpperCase
()
==
screenName
.
trim
().
toUpperCase
(),
);
if
(
idx
<
0
)
return
null
;
final
found
=
_popupData
![
idx
];
if
(
_shownIds
.
contains
(
found
.
id
))
return
null
;
return
found
;
}
Future
<
void
>
markShownOnce
(
String
popupId
)
async
{
_shownIds
.
add
(
popupId
);
}
Future
<
void
>
reset
()
async
{
_shownIds
.
clear
();
_popupData
=
[];
_loaded
=
false
;
_loadingFuture
=
null
;
}
}
lib/
screen
/popup_manager/popup_runner_helper.dart
→
lib/
features
/popup_manager/popup_runner_helper.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:mypoint_flutter_app/
screen
/popup_manager/popup_manager_screen.dart'
;
import
'../../
directional
/directional_action_type.dart'
;
import
'package:mypoint_flutter_app/
features
/popup_manager/popup_manager_screen.dart'
;
import
'../../
app/routing
/directional_action_type.dart'
;
import
'popup_manager_viewmodel.dart'
;
class
PopupRunner
{
...
...
lib/
screen
/qr_code/qr_code_screen.dart
→
lib/
features
/qr_code/qr_code_screen.dart
View file @
6b980613
import
'package:barcode_widget/barcode_widget.dart'
;
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/
extensions/num_extension
.dart'
;
import
'package:mypoint_flutter_app/extensions/
string
_extension.dart'
;
import
'package:mypoint_flutter_app/preference/point/point_manager.dart'
;
import
'package:mypoint_flutter_app/
screen
/qr_code/qr_code_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
screen
/qr_code/scan_code_screen.dart'
;
import
'package:mypoint_flutter_app/widgets/custom_navigation_bar.dart'
;
import
'package:mypoint_flutter_app/widgets/dashed_line.dart'
;
import
'package:mypoint_flutter_app/
core/services/deep_link_service
.dart'
;
import
'package:mypoint_flutter_app/
core/utils/
extensions/
num
_extension.dart'
;
import
'package:mypoint_flutter_app/
shared/
preference
s
/point/point_manager.dart'
;
import
'package:mypoint_flutter_app/
features
/qr_code/qr_code_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
features
/qr_code/scan_code_screen.dart'
;
import
'package:mypoint_flutter_app/
shared/
widgets/custom_navigation_bar.dart'
;
import
'package:mypoint_flutter_app/
shared/
widgets/dashed_line.dart'
;
import
'package:qr_flutter/qr_flutter.dart'
;
import
'../../
base
/base_screen.dart'
;
import
'../../
base
/basic_state.dart'
;
import
'../../preference/data_preference.dart'
;
import
'../../
shared/widgets/base_view
/base_screen.dart'
;
import
'../../
shared/widgets/base_view
/basic_state.dart'
;
import
'../../
shared/
preference
s
/data_preference.dart'
;
class
QRCodeScreen
extends
BaseScreen
{
const
QRCodeScreen
({
super
.
key
});
...
...
@@ -43,7 +43,7 @@ class _QRCodeScreenState extends BaseState<QRCodeScreen> with BasicState {
};
}
_freshPoint
()
async
{
Future
<
void
>
_freshPoint
()
async
{
_points
.
value
=
(
await
UserPointManager
().
fetchUserPoint
())
??
0
;
}
...
...
@@ -158,7 +158,7 @@ class _QRCodeScreenState extends BaseState<QRCodeScreen> with BasicState {
);
}
_showAlertAndResumeScanCode
(
String
message
)
{
void
_showAlertAndResumeScanCode
(
String
message
)
{
showAlertError
(
content:
message
,
showCloseButton:
false
,
...
...
@@ -172,18 +172,15 @@ class _QRCodeScreenState extends BaseState<QRCodeScreen> with BasicState {
return
ScanTabView
(
controller:
_scanCtl
,
onCodeDetected:
(
code
,
format
)
async
{
final
id
=
_viewModel
.
getResultCodeID
(
code
)
??
''
;
// if (id.isEmpty) {
// final url = code.toUri();
// if (url == null) {
// _showAlertAndResumeScanCode('Mã QR không hợp lệ');
// } else {
// print('_buildScanQRCode $url');
// _scanCtl.resume();
// }
// return;
// }
_viewModel
.
getDirectionFromId
(
code
);
final
bankId
=
_viewModel
.
getResultCodeID
(
code
)
??
''
;
if
(
bankId
.
isEmpty
)
{
final
directionSuccess
=
DeepLinkService
().
handleIncomingUri
(
code
);
if
(!
directionSuccess
)
{
_showAlertAndResumeScanCode
(
'Mã QR không hợp lệ. Vui lòng thử lại!'
);
}
return
;
}
_viewModel
.
getDirectionFromId
(
bankId
);
},
);
}
...
...
lib/
screen
/qr_code/qr_code_viewmodel.dart
→
lib/
features
/qr_code/qr_code_viewmodel.dart
View file @
6b980613
import
'package:mypoint_flutter_app/config
s
/constants.dart'
;
import
'package:mypoint_flutter_app/network
ing
/restful_api_client_all_request.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
app/
config/constants.dart'
;
import
'package:mypoint_flutter_app/
core/
network/restful_api_client_all_request.dart'
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
class
QRPackageCodeValue
{
final
String
type
;
...
...
@@ -13,13 +13,13 @@ class QRPackageCodeValue {
class
QRCodeViewModel
extends
RestfulApiViewModel
{
void
Function
(
String
message
)?
onShowAlertError
;
getDirectionFromId
(
String
id
)
async
{
Future
<
void
>
getDirectionFromId
(
String
id
)
async
{
showLoading
();
final
response
=
await
client
.
getDirectionOfflineBrand
(
id
);
final
direction
=
response
.
data
;
if
(
response
.
isSuccess
&&
direction
!=
null
)
{
hideLoading
();
final
directionSuccess
=
await
direction
.
begin
();
final
directionSuccess
=
direction
.
begin
();
if
(
directionSuccess
!=
true
)
{
onShowAlertError
?.
call
(
ErrorCodes
.
serverErrorMessage
);
}
else
{
...
...
lib/
screen
/qr_code/scan_code_screen.dart
→
lib/
features
/qr_code/scan_code_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:mobile_scanner/mobile_scanner.dart'
;
class
ScanTabController
{
...
...
@@ -123,7 +122,7 @@ class _ScanTabViewState extends State<ScanTabView> {
child:
Center
(
child:
ValueListenableBuilder
<
MobileScannerState
>(
valueListenable:
_cam
,
builder:
(
_
,
state
,
_
_
)
{
builder:
(
_
,
state
,
_
)
{
final
on
=
state
.
torchState
==
TorchState
.
on
;
return
InkWell
(
onTap:
()
=>
_cam
.
toggleTorch
(),
...
...
lib/
screen
/quiz_campaign/quiz_campaign_header.dart
→
lib/
features
/quiz_campaign/quiz_campaign_header.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'../../configs/callbacks.dart'
;
import
'../../widgets/back_button.dart'
;
import
'../../shared/widgets/back_button.dart'
;
class
QuizCampaignHeader
extends
StatelessWidget
{
final
int
currentIndex
;
...
...
lib/
screen
/quiz_campaign/quiz_campaign_model.dart
→
lib/
features
/quiz_campaign/quiz_campaign_model.dart
View file @
6b980613
import
'../../widgets/alert/popup_data_model.dart'
;
import
'../../
shared/
widgets/alert/popup_data_model.dart'
;
enum
SurveyQuestionType
{
textarea
,
...
...
Prev
1
…
13
14
15
16
17
18
19
20
21
…
26
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment