Commit 6b980613 authored by DatHV's avatar DatHV
Browse files

update project structure

parent bfff9e47
import 'dart:ui'; import 'dart:ui';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import '../../../resources/base_color.dart'; import '../../../core/theme/base_color.dart';
part 'campaign_7day_config_model.g.dart'; part 'campaign_7day_config_model.g.dart';
@JsonSerializable() @JsonSerializable()
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import '../../../directional/directional_screen.dart'; import '../../../shared/navigation/directional_screen.dart';
import '../../../widgets/alert/popup_data_model.dart'; import '../../../shared/widgets/alert/popup_data_model.dart';
import 'campaign_7day_config_model.dart'; import 'campaign_7day_config_model.dart';
import 'campaign_7day_reward_model.dart'; import 'campaign_7day_reward_model.dart';
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import '../../../directional/directional_screen.dart'; import '../../../shared/navigation/directional_screen.dart';
import 'campaign_7day_config_model.dart'; import 'campaign_7day_config_model.dart';
part 'campaign_7day_reward_model.g.dart'; part 'campaign_7day_reward_model.g.dart';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/widgets/alert/data_alert_model.dart'; import 'package:mypoint_flutter_app/shared/widgets/alert/data_alert_model.dart';
import '../../base/base_screen.dart'; import '../../shared/widgets/base_view/base_screen.dart';
import '../../base/basic_state.dart'; import '../../shared/widgets/base_view/basic_state.dart';
import '../../preference/data_preference.dart'; import '../../shared/preferences/data_preference.dart';
import '../../resources/base_color.dart'; import '../../core/theme/base_color.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../../widgets/back_button.dart'; import '../../shared/widgets/back_button.dart';
import '../../widgets/support_button.dart'; import '../../shared/widgets/support_button.dart';
import '../login/login_viewmodel.dart'; import '../login/login_viewmodel.dart';
import 'change_pass_viewmodel.dart'; import 'change_pass_viewmodel.dart';
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../base/base_response_model.dart'; import '../../shared/widgets/base_view/base_response_model.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../configs/constants.dart'; import '../../app/config/constants.dart';
import '../../preference/data_preference.dart'; import '../../shared/preferences/data_preference.dart';
import '../create_pass/change_pass_repository.dart'; import '../create_pass/change_pass_repository.dart';
import '../create_pass/create_pass_screen.dart'; import '../create_pass/create_pass_screen.dart';
import '../login/login_viewmodel.dart'; import '../login/login_viewmodel.dart';
import '../otp/forgot_pass_otp_repository.dart';
import '../otp/model/create_otp_response_model.dart';
import '../otp/otp_screen.dart';
class ChangePassViewModel extends RestfulApiViewModel { class ChangePassViewModel extends RestfulApiViewModel {
final RxBool isPasswordVisible = false.obs; final RxBool isPasswordVisible = false.obs;
......
import 'package:flutter/foundation.dart';
import 'package:flutter_contacts/flutter_contacts.dart'; import 'package:flutter_contacts/flutter_contacts.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import '../../../widgets/custom_empty_widget.dart'; import '../../shared/widgets/custom_empty_widget.dart';
import '../../../widgets/custom_search_navigation_bar.dart'; import '../../shared/widgets/custom_search_navigation_bar.dart';
import '../../resources/base_color.dart'; import '../../core/theme/base_color.dart';
import '../invite_friend_campaign/invite_friend_campaign_viewmodel.dart'; import '../invite_friend_campaign/invite_friend_campaign_viewmodel.dart';
class ContactsListScreen extends StatefulWidget { class ContactsListScreen extends StatefulWidget {
...@@ -54,9 +53,8 @@ class _ContactsListScreenState extends State<ContactsListScreen> { ...@@ -54,9 +53,8 @@ class _ContactsListScreenState extends State<ContactsListScreen> {
if (query.isEmpty) return contacts; if (query.isEmpty) return contacts;
final isNumber = RegExp(r'^\d+$').hasMatch(query); final isNumber = RegExp(r'^\d+$').hasMatch(query);
return contacts.where((contact) { return contacts.where((contact) {
final name = contact.displayName?.toLowerCase() ?? ''; final name = contact.displayName.toLowerCase();
final phone = final phone = contact.phones.firstOrNull?.number.replaceAll(RegExp(r'\D'), '') ?? '';
contact.phones?.isNotEmpty == true ? contact.phones!.first.number?.replaceAll(RegExp(r'\D'), '') ?? '' : '';
if (isNumber) { if (isNumber) {
return phone.contains(query); return phone.contains(query);
} else { } else {
...@@ -71,7 +69,7 @@ class _ContactsListScreenState extends State<ContactsListScreen> { ...@@ -71,7 +69,7 @@ class _ContactsListScreenState extends State<ContactsListScreen> {
appBar: CustomSearchNavigationBar(onSearchChanged: _onSearchChanged), appBar: CustomSearchNavigationBar(onSearchChanged: _onSearchChanged),
body: body:
displayContacts.isEmpty displayContacts.isEmpty
? EmptyWidget(size: Size(240, 240)) ? EmptyWidget(isLoading: viewModel.isLoading.value,)
: ListView.builder( : ListView.builder(
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
itemCount: displayContacts.length, itemCount: displayContacts.length,
...@@ -98,7 +96,7 @@ class _ContactsListScreenState extends State<ContactsListScreen> { ...@@ -98,7 +96,7 @@ class _ContactsListScreenState extends State<ContactsListScreen> {
Widget _buildContactCard(Contact contact) { Widget _buildContactCard(Contact contact) {
final name = contact.displayName; final name = contact.displayName;
final phone = contact.phones?.isNotEmpty == true ? contact.phones?.first.number ?? 'Không số' : 'Không số'; final phone = contact.phones.firstOrNull?.number ?? 'Không số';
return ListTile( return ListTile(
leading: CircleAvatar( leading: CircleAvatar(
backgroundImage: const AssetImage('assets/images/ic_pipi_02.png'), backgroundImage: const AssetImage('assets/images/ic_pipi_02.png'),
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_contacts/flutter_contacts.dart'; import 'package:flutter_contacts/flutter_contacts.dart';
import 'package:mypoint_flutter_app/resources/base_color.dart'; import 'package:mypoint_flutter_app/core/theme/base_color.dart';
/// Mở bottom sheet hiển thị danh sách danh bạ để chọn /// Mở bottom sheet hiển thị danh sách danh bạ để chọn
Future<Contact?> showContactPicker(BuildContext context) async { Future<Contact?> showContactPicker(BuildContext context) async {
...@@ -110,7 +110,7 @@ class _ContactPickerSheetState extends State<_ContactPickerSheet> { ...@@ -110,7 +110,7 @@ class _ContactPickerSheetState extends State<_ContactPickerSheet> {
Expanded( Expanded(
child: ListView.separated( child: ListView.separated(
itemCount: _filtered.length, itemCount: _filtered.length,
separatorBuilder: (_, __) => const Divider(height: 1), separatorBuilder: (_, _) => const Divider(height: 1),
itemBuilder: (context, index) { itemBuilder: (context, index) {
final c = _filtered[index]; final c = _filtered[index];
final subtitle = c.phones.isNotEmpty ? c.phones.first.number : 'Không có số'; final subtitle = c.phones.isNotEmpty ? c.phones.first.number : 'Không có số';
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/screen/create_pass/signup_create_password_repository.dart'; import 'package:mypoint_flutter_app/features/create_pass/signup_create_password_repository.dart';
import 'package:mypoint_flutter_app/widgets/custom_toast_message.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_toast_message.dart';
import '../../base/base_response_model.dart'; import '../../shared/widgets/base_view/base_response_model.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../login/login_screen.dart';
import '../main_tab_screen/main_tab_screen.dart'; import '../main_tab_screen/main_tab_screen.dart';
import '../splash/splash_screen_viewmodel.dart';
class ChangePasswordRepository extends RestfulApiViewModel implements ICreatePasswordRepository { class ChangePasswordRepository extends RestfulApiViewModel implements ICreatePasswordRepository {
@override @override
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/screen/create_pass/signup_create_password_repository.dart'; import 'package:mypoint_flutter_app/features/create_pass/signup_create_password_repository.dart';
import 'package:mypoint_flutter_app/widgets/back_button.dart'; import 'package:mypoint_flutter_app/shared/widgets/back_button.dart';
import '../../resources/base_color.dart'; import '../../core/theme/base_color.dart';
import 'create_pass_viewmodel.dart'; import 'create_pass_viewmodel.dart';
class CreatePasswordScreen extends StatelessWidget { class CreatePasswordScreen extends StatelessWidget {
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/screen/create_pass/signup_create_password_repository.dart'; import 'package:mypoint_flutter_app/features/create_pass/signup_create_password_repository.dart';
class CreatePasswordViewModel extends GetxController { class CreatePasswordViewModel extends GetxController {
final ICreatePasswordRepository repository; final ICreatePasswordRepository repository;
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/screen/create_pass/signup_create_password_repository.dart'; import 'package:mypoint_flutter_app/features/create_pass/signup_create_password_repository.dart';
import 'package:mypoint_flutter_app/shared/router_gage.dart'; import 'package:mypoint_flutter_app/shared/router_gage.dart';
import '../../base/base_response_model.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_toast_message.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../shared/widgets/base_view/base_response_model.dart';
import '../splash/splash_screen_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
class ResetCreatePasswordRepository extends RestfulApiViewModel implements ICreatePasswordRepository { class ResetCreatePasswordRepository extends RestfulApiViewModel implements ICreatePasswordRepository {
@override @override
...@@ -18,7 +18,8 @@ class ResetCreatePasswordRepository extends RestfulApiViewModel implements ICrea ...@@ -18,7 +18,8 @@ class ResetCreatePasswordRepository extends RestfulApiViewModel implements ICrea
return client.accountPasswordReset(phoneNumber, password).then((value) { return client.accountPasswordReset(phoneNumber, password).then((value) {
hideLoading(); hideLoading();
if (value.status == "success" || value.code == 200) { if (value.status == "success" || value.code == 200) {
Get.offNamed(loginScreen, arguments: {'phone': phoneNumber}); Get.offNamed(loginScreen, arguments: {'phone': phoneNumber, 'password': password});
showToastMessage("Đặt lại mật khẩu thành công.");
} }
return value; return value;
}); });
......
...@@ -2,16 +2,14 @@ import 'dart:async'; ...@@ -2,16 +2,14 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../base/base_response_model.dart'; import '../../shared/widgets/base_view/base_response_model.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/firebase/push_token_service.dart';
import '../../firebase/push_token_service.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../permission/biometric_manager.dart'; import '../../core/services/biometric_manager.dart';
import '../../preference/data_preference.dart'; import '../../shared/preferences/data_preference.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../biometric/biometric_screen.dart'; import '../biometric/biometric_screen.dart';
import '../main_tab_screen/main_tab_screen.dart';
import '../splash/splash_screen_viewmodel.dart';
abstract class ICreatePasswordRepository { abstract class ICreatePasswordRepository {
late String phoneNumber; late String phoneNumber;
......
import 'package:mypoint_flutter_app/screen/quiz_campaign/quiz_campaign_screen.dart'; import 'package:mypoint_flutter_app/features/quiz_campaign/quiz_campaign_screen.dart';
import '../mobile_card/models/mobile_service_redeem_data.dart'; import '../mobile_card/models/mobile_service_redeem_data.dart';
class CheckInDataModel { class CheckInDataModel {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment