diff --git a/android/app/build.gradle b/android/app/build.gradle index 27162c9..2e19237 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -51,8 +51,8 @@ android { defaultConfig { applicationId "com.bvcoenm.abhiyaan" - minSdkVersion 21 - targetSdkVersion flutter.targetSdkVersion + minSdkVersion 24 + targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f624b9e..0d7cff6 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -3,16 +3,6 @@ - - - - - - - - - - @@ -48,6 +38,15 @@ android:resource="@style/NormalTheme" /> + + + + + + + + + diff --git a/lib/ui/views/auth/register/register_view.dart b/lib/ui/views/auth/register/register_view.dart index 3a6559e..57e7977 100644 --- a/lib/ui/views/auth/register/register_view.dart +++ b/lib/ui/views/auth/register/register_view.dart @@ -317,7 +317,7 @@ class RegisterView extends StatelessWidget { ), 10.verticalSpace, Text( - 'Abhiyaan v1.0.5', + 'Abhiyaan v${AppConstants.appVersion}', textAlign: TextAlign.center, style: FontThemeClass().caption( context, diff --git a/lib/ui/views/auth/register/register_view_model.dart b/lib/ui/views/auth/register/register_view_model.dart index 3f69f43..68a93f1 100644 --- a/lib/ui/views/auth/register/register_view_model.dart +++ b/lib/ui/views/auth/register/register_view_model.dart @@ -131,18 +131,18 @@ class RegisterViewModel extends BaseViewModel { AuthenticationService().showLoadingOverlay(context); final message = Message() ..from = const Address( - "technicalteam.bvcoenm@gmail.com", "Abhiyaan Technical Team") + "technicalteam.bvcoenm@gmail.com", "The Dev Crew Technical Team") ..recipients.add( emailIdTextController.text) // Set the recipient to niranjan@gmail.com - ..subject = 'Abhiyaan Email OTP Verification' + ..subject = 'TDC Email OTP Verification' ..html = ''' -

Abhiyaan App Email Verification

+

TDC App Email Verification

Dear user,

Your verification code is: $otp

Please enter this code in the app to complete the registration process.

Thank you!

-

Abhiyaan Technical Team

+

The Dev Crew Technical Team

'''; diff --git a/lib/ui/views/community/community_view.dart b/lib/ui/views/community/community_view.dart index 13fac4a..e52a490 100644 --- a/lib/ui/views/community/community_view.dart +++ b/lib/ui/views/community/community_view.dart @@ -58,7 +58,10 @@ class CommunityView extends StatelessWidget { Center( child: Text( "Community", - style: fontThemeClass.title(context), + style: fontThemeClass.title( + context, + fontWeight: FontWeight.bold, + ), ), ), QuoteCard( diff --git a/lib/ui/views/event/event_view.dart b/lib/ui/views/event/event_view.dart index 65102c7..2005ddd 100644 --- a/lib/ui/views/event/event_view.dart +++ b/lib/ui/views/event/event_view.dart @@ -40,7 +40,10 @@ class EventView extends StatelessWidget { Center( child: Text( "Events", - style: FontThemeClass().title(context), + style: FontThemeClass().title( + context, + fontWeight: FontWeight.bold, + ), ), ), model.todayEvent?.length == 1 @@ -143,7 +146,7 @@ class EventView extends StatelessWidget { ), ); }, - ).animate(delay: 100.ms).fadeIn(), + ).animate(delay: 110.ms).fadeIn(), ], ), model.sponsors.isEmpty @@ -164,7 +167,7 @@ class EventView extends StatelessWidget { }, ) ], - ).animate(delay: 200.ms).fadeIn(), + ).animate(delay: 130.ms).fadeIn(), model.upcomingEvents.isNotEmpty ? Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -240,14 +243,14 @@ class EventView extends StatelessWidget { ), ); }, - ).animate(delay: 300.ms).fadeIn(), + ).animate(delay: 140.ms).fadeIn(), ], ) : 0.verticalSpace, 4.verticalSpace, model.gallery.isNotEmpty ? const SectionText(title: "Gallery") - .animate(delay: 1000.ms) + .animate(delay: 800.ms) .fadeIn() : 0.verticalSpace, model.gallery.isNotEmpty diff --git a/lib/ui/views/home/home_view.dart b/lib/ui/views/home/home_view.dart index c648877..4e3a270 100644 --- a/lib/ui/views/home/home_view.dart +++ b/lib/ui/views/home/home_view.dart @@ -28,10 +28,13 @@ class HomeView extends StatelessWidget { viewModelBuilder: () => HomeViewModel(context), disposeViewModel: false, onViewModelReady: (viewModel) { + // ignore: use_build_context_synchronously viewModel.init(context).then((value) => viewModel.afterInit(context)); }, builder: (context, model, child) { return UpgradeAlert( + showLater: false, + showIgnore: false, upgrader: Upgrader( durationUntilAlertAgain: const Duration(days: 2), ), diff --git a/lib/ui/views/home/home_view_component.dart b/lib/ui/views/home/home_view_component.dart index 607b168..ee9c119 100644 --- a/lib/ui/views/home/home_view_component.dart +++ b/lib/ui/views/home/home_view_component.dart @@ -527,7 +527,7 @@ class UserGreetingsWidget extends ViewModelWidget { style: fontTheme.title( context, color: context.colorScheme.primaryText, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.bold, ), ).animate().fadeIn(), ), diff --git a/lib/ui/views/profile/preferences/preferences_view.dart b/lib/ui/views/profile/preferences/preferences_view.dart index f923997..3c9e429 100644 --- a/lib/ui/views/profile/preferences/preferences_view.dart +++ b/lib/ui/views/profile/preferences/preferences_view.dart @@ -32,70 +32,80 @@ class PreferencesView extends StatelessWidget { child: Column( children: [ 35.verticalSpace, - InkWell( - onTap: () { - model.updateImageSheet(context); - }, - splashColor: Colors.transparent, - child: Stack( - children: [ - Hero( - tag: "profileImage", - child: ClipOval( - child: CachedNetworkImage( - width: 100.r, - height: 100.r, - fit: BoxFit.cover, - imageUrl: AssetUrls.profileImageUrl == '' || - AssetUrls.profileImageUrl == - 'Not Available' - ? AssetUrls.dummyImageUrl - : AssetUrls.profileImageUrl, - placeholder: (context, url) => - const CircularLoadingIndicator(), - errorWidget: (context, url, error) { - return const Icon(Icons.error); - }, - ), - ), - ), - Positioned( - bottom: 0, - right: 0, - child: Container( - padding: const EdgeInsets.all(5), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100), - color: context - .colorScheme.bottomNavIconActive), - child: Transform.flip( - child: Icon( - Icons.edit, - size: 25.r, - color: context.colorScheme.scaffold, + Column( + children: [ + InkWell( + onTap: () { + model.updateImageSheet(context); + }, + splashColor: Colors.transparent, + child: Stack( + children: [ + Hero( + tag: "profileImage", + child: ClipOval( + child: CachedNetworkImage( + width: 100.r, + height: 100.r, + fit: BoxFit.cover, + imageUrl: AssetUrls.profileImageUrl == '' || + AssetUrls.profileImageUrl == + 'Not Available' + ? AssetUrls.dummyImageUrl + : AssetUrls.profileImageUrl, + placeholder: (context, url) => + const CircularLoadingIndicator(), + errorWidget: (context, url, error) { + return Container( + color: context.colorScheme.card, + child: const Icon( + Icons.error, + color: Colors.red, + )); + }, ), ), - )).animate(delay: 400.ms).scale(), - ], - ), - ), - 8.verticalSpace, - Text( - model.localStorageService.read('userName'), - style: model.fontTheme.title2( - context, - color: context.colorScheme.primaryText, - fontWeight: FontWeight.w600, - ), - ), - 2.verticalSpace, - Text( - model.localStorageService.read('userProfile'), - style: model.fontTheme.body( - context, - color: context.colorScheme.secondarySectionColor, - fontWeight: FontWeight.w500, - ), + ), + Positioned( + bottom: 0, + right: 0, + child: Container( + padding: const EdgeInsets.all(5), + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(100), + color: context + .colorScheme.bottomNavIconActive), + child: Transform.flip( + child: Icon( + Icons.edit, + size: 25.r, + color: context.colorScheme.scaffold, + ), + ), + )).animate(delay: 400.ms).scale(), + ], + ), + ), + 8.verticalSpace, + Text( + model.localStorageService.read('userName'), + style: model.fontTheme.title2( + context, + color: context.colorScheme.primaryText, + fontWeight: FontWeight.w600, + ), + ), + 2.verticalSpace, + Text( + model.localStorageService.read('userProfile'), + style: model.fontTheme.body( + context, + color: context.colorScheme.secondarySectionColor, + fontWeight: FontWeight.w500, + ), + ), + ], ), 30.verticalSpace, model.localStorageService.read('userProfile') == @@ -117,7 +127,7 @@ class PreferencesView extends StatelessWidget { const LogoutButton(), 22.verticalSpace, Text( - 'Abhiyaan v.1.0.5', + 'Abhiyaan v${AppConstants.appVersion}', style: model.fontTheme.paragraph( context, color: context.colorScheme.secondarySectionColor, diff --git a/lib/ui/views/profile/preferences/preferences_view_model.dart b/lib/ui/views/profile/preferences/preferences_view_model.dart index 225615e..2cc79c8 100644 --- a/lib/ui/views/profile/preferences/preferences_view_model.dart +++ b/lib/ui/views/profile/preferences/preferences_view_model.dart @@ -304,7 +304,7 @@ class PreferencesViewModel extends BaseViewModel { isProfileError = false; return Container( width: double.infinity, - padding: EdgeInsets.only( + padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom, top: 10.r, left: 10.r, @@ -314,7 +314,7 @@ class PreferencesViewModel extends BaseViewModel { borderRadius: BorderRadius.circular(32).r, ), child: Column( - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ Center( @@ -339,11 +339,11 @@ class PreferencesViewModel extends BaseViewModel { profileImageUrlController.text); AssetUrls.profileImageUrl = profileImageUrlController.text; - _navigationService.back(); profileViewModel.notifyListeners(); notifyListeners(); updateProfileImage(profileImageUrlController.text); profileImageUrlController.text = ''; + _navigationService.back(); }, child: Stack( alignment: Alignment.center, diff --git a/lib/ui/views/profile/profile_view.dart b/lib/ui/views/profile/profile_view.dart index 9cde073..86651d3 100644 --- a/lib/ui/views/profile/profile_view.dart +++ b/lib/ui/views/profile/profile_view.dart @@ -29,63 +29,62 @@ class ProfileView extends StatelessWidget { disposeViewModel: false, builder: (context, model, child) { return Scaffold( - backgroundColor: Colors.transparent, + backgroundColor: context.colorScheme.scaffold, body: model.isBusy ? const CircularLoadingIndicator() : SafeArea( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 33).r, - child: Column( - children: [ - Container( - width: double.infinity, - decoration: BoxDecoration( - color: context.colorScheme.scaffold, - image: const DecorationImage( - image: AssetImage( - AssetImagePath.profileBackLines), - fit: BoxFit.cover)), - child: const ProfileImageWidget()), + minimum: const EdgeInsets.symmetric(horizontal: 33).r, + child: Column( + children: [ + const ProfileImageWidget(), + // Container( + // width: double.infinity, + // decoration: BoxDecoration( + // color: context.colorScheme.scaffold, + // image: const DecorationImage( + // image: AssetImage( + // AssetImagePath.profileBackLines), + // fit: BoxFit.cover)), + // child: const ProfileImageWidget()), - // Settings - const ProfileSectionText(title: 'Settings'), - 16.verticalSpace, - const ProfileCard(), - 16.verticalSpace, - const DarkModeTile(), - 16.verticalSpace, + // Settings + const ProfileSectionText(title: 'Settings'), + 16.verticalSpace, + const ProfileCard(), + 16.verticalSpace, + const DarkModeTile(), + 16.verticalSpace, - // Others - const ProfileSectionText(title: 'Others'), - 16.verticalSpace, - const RateAppTile(), - 16.verticalSpace, - const HelpSupportTile(), - 16.verticalSpace, - const PrivacyPolicyTile(), + // Others + const ProfileSectionText(title: 'Others'), + 16.verticalSpace, + const RateAppTile(), + 16.verticalSpace, + const HelpSupportTile(), + 16.verticalSpace, + const PrivacyPolicyTile(), - // Socials - const Spacer(), - const Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SocialLinks( - iconpath: AssetImagePath.instagramImg, - url: AssetUrls.instagramUrl, - ), - SocialLinks( - iconpath: AssetImagePath.linkedinImg, - url: AssetUrls.linkedinUrl, - ), - SocialLinks( - iconpath: AssetImagePath.xImg, - url: AssetUrls.twitterUrl, - ), - ], - ), - 20.verticalSpace, - ], - ), + // Socials + const Spacer(), + const Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SocialLinks( + iconpath: AssetImagePath.instagramImg, + url: AssetUrls.instagramUrl, + ), + SocialLinks( + iconpath: AssetImagePath.linkedinImg, + url: AssetUrls.linkedinUrl, + ), + SocialLinks( + iconpath: AssetImagePath.xImg, + url: AssetUrls.twitterUrl, + ), + ], + ), + 20.verticalSpace, + ], ), ), ); diff --git a/lib/ui/views/profile/profile_view_component.dart b/lib/ui/views/profile/profile_view_component.dart index 2e1e6c9..ef6d378 100644 --- a/lib/ui/views/profile/profile_view_component.dart +++ b/lib/ui/views/profile/profile_view_component.dart @@ -115,18 +115,22 @@ class ProfileImageWidget extends ViewModelWidget { InkWell( splashColor: Colors.transparent, child: ClipOval( - child: CachedNetworkImage( - width: 100.r, - height: 100.r, - fit: BoxFit.cover, - imageUrl: AssetUrls.profileImageUrl == '' || - AssetUrls.profileImageUrl == 'Not Available' - ? AssetUrls.dummyImageUrl - : AssetUrls.profileImageUrl, - placeholder: (context, url) => const CircularLoadingIndicator(), - errorWidget: (context, url, error) { - return const Icon(Icons.error); - }, + child: Hero( + tag: "profileImage", + child: CachedNetworkImage( + width: 100.r, + height: 100.r, + fit: BoxFit.cover, + imageUrl: AssetUrls.profileImageUrl == '' || + AssetUrls.profileImageUrl == 'Not Available' + ? AssetUrls.dummyImageUrl + : AssetUrls.profileImageUrl, + placeholder: (context, url) => + const CircularLoadingIndicator(), + errorWidget: (context, url, error) { + return const Icon(Icons.error); + }, + ), ), ), ), @@ -253,6 +257,7 @@ class HelpSupportTile extends ViewModelWidget { ); } } + class RateAppTile extends ViewModelWidget { const RateAppTile({ super.key, @@ -378,3 +383,11 @@ class DarkModeTile extends ViewModelWidget { ))); } } + + +// Widget PaddingWrapper(List children) { +// return Padding( +// padding: EdgeInsets.symmetric(horizontal: 16.r), +// child: children, +// ); +// } \ No newline at end of file diff --git a/lib/ui/views/splash/splash_view.dart b/lib/ui/views/splash/splash_view.dart index 8709452..21bfbe6 100644 --- a/lib/ui/views/splash/splash_view.dart +++ b/lib/ui/views/splash/splash_view.dart @@ -32,7 +32,7 @@ class SplashView extends StatelessWidget { ), ), Text( - 'Version 1.0.5', + 'Version ${AppConstants.appVersion}', style: FontThemeClass().caption( context, color: context.colorScheme.secondaryText, diff --git a/lib/utils/assets_constants.dart b/lib/utils/assets_constants.dart index f0f96fc..8e63814 100644 --- a/lib/utils/assets_constants.dart +++ b/lib/utils/assets_constants.dart @@ -58,3 +58,7 @@ class AnimationAssets { static const String welcome = 'assets/animations/welcome.json'; static const String handLoading = 'assets/animations/hand_loading.json'; } + +class AppConstants { + static const String appVersion = '1.0.6'; +} diff --git a/pubspec.yaml b/pubspec.yaml index c36f4c6..485b582 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,11 @@ name: abhiyaan description: A new Flutter project. publish_to: "none" -version: 1.0.5+6 +version: 1.0.6+10 +# Major.Minor.Patch+Build +# Major - Major changes like UI/UX changes, new features, etc. Those changes that are not backward compatible. +# Minor - Minor changes like bug fixes, performance improvements, etc. Those changes that are backward compatible. +# Patch - Patch changes like small bug fixes, small improvements, etc. Those changes that are backward compatible. environment: sdk: ">=3.1.1 <4.0.0" @@ -32,12 +36,12 @@ dependencies: cached_network_image: ^3.3.0 url_launcher: ^6.2.1 intl: ^0.19.0 - carousel_slider: ^4.2.1 + carousel_slider: ^5.0.0 flutter_native_splash: ^2.3.5 expandable: ^5.0.1 flutter_screenutil: ^5.9.0 share_plus: ^7.2.1 - flutter_local_notifications: ^16.2.0 + flutter_local_notifications: ^17.2.2 app_settings: ^5.1.1 lottie: ^3.0.0 flutter_animate: ^4.3.0