diff --git a/lib/features/profile/presentation/pages/profile_screen.dart b/lib/features/profile/presentation/pages/profile_screen.dart index e227e113..488322fb 100644 --- a/lib/features/profile/presentation/pages/profile_screen.dart +++ b/lib/features/profile/presentation/pages/profile_screen.dart @@ -192,10 +192,10 @@ class _ProfileScreenState extends State { ), _subscriptionsAndSubscribers(state), if (state.profile.badges.isNotEmpty) Padding(padding: EdgeInsets.only(bottom: 16), child: _badges(state)), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _socialLinks(state)), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _education(state)), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _diplomasAndCertificates(state)), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _activePlans(state)), + if (state.profile.role == 'consultant') _socialLinks(state), + if (state.profile.role == 'consultant') _education(state), + if (state.profile.role == 'consultant') _diplomasAndCertificates(state), + if (state.profile.role == 'consultant') _activePlans(state), _blogPosts(state), ], ), @@ -228,11 +228,11 @@ class _ProfileScreenState extends State { ), _subscriptionsAndSubscribers(state), if (state.profile.badges.isNotEmpty) Padding(padding: EdgeInsets.only(bottom: 16), child: _badges(state)), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _socialLinks(state)), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _education(state)), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _diplomasAndCertificates(state)), + if (state.profile.role == 'consultant') _socialLinks(state), + if (state.profile.role == 'consultant') _education(state), + if (state.profile.role == 'consultant') _diplomasAndCertificates(state), Padding(padding: EdgeInsets.only(bottom: 16), child: _charts()), - if (state.profile.role == 'consultant') Padding(padding: EdgeInsets.only(bottom: 16), child: _activePlans(state)), + if (state.profile.role == 'consultant') _activePlans(state), _newBlogPostButton(), _blogPosts(state), ], @@ -249,6 +249,9 @@ class _ProfileScreenState extends State { bloc: plansCubit, builder: (BuildContext context, PlansState state) { if (state is PlansStateLoaded) { + if (state.plansList.isEmpty) { + return const SizedBox.shrink(); + } return Column( children: [ Padding( @@ -366,57 +369,60 @@ class _ProfileScreenState extends State { } _diplomasAndCertificates(ProfileStateLoaded state) { - if (state.profile.role != 'consultant') { + if (state.profile.role != 'consultant' || state.profile.diplomasAndCertificates == null || state.profile.diplomasAndCertificates!.isEmpty) { return const SizedBox.shrink(); } - return Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Дипломы\nи сертификаты', - style: TextStyle( - color: Color(0xFF323F4B), - fontSize: 24, - height: 1, - fontWeight: FontWeight.w600, + return Padding( + padding: const EdgeInsets.only(bottom: 16), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Дипломы\nи сертификаты', + style: TextStyle( + color: Color(0xFF323F4B), + fontSize: 24, + height: 1, + fontWeight: FontWeight.w600, + ), ), - ), - Text( - widget.author == null ? 'Редактировать' : '', - style: TextStyle( - color: Color(0xFF2F80ED), - fontSize: 16, - fontWeight: FontWeight.w500, + Text( + widget.author == null ? 'Редактировать' : '', + style: TextStyle( + color: Color(0xFF2F80ED), + fontSize: 16, + fontWeight: FontWeight.w500, + ), ), - ), - ], + ], + ), ), - ), - const SizedBox(height: 8), - Container( - width: MediaQuery.of(context).size.width - 2, - padding: const EdgeInsets.symmetric(horizontal: 4), - child: Material( - color: Colors.white, - borderRadius: BorderRadius.circular(12), - child: SingleChildScrollView( - physics: const BouncingScrollPhysics(), - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - child: Row( - children: [ - if (state.profile.diplomasAndCertificates != null) - ...state.profile.diplomasAndCertificates!.map((d) => _diplomaImage(baseUrl + '/storage/' + d.path)).toList(), - ], + const SizedBox(height: 8), + Container( + width: MediaQuery.of(context).size.width - 2, + padding: const EdgeInsets.symmetric(horizontal: 4), + child: Material( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + child: SingleChildScrollView( + physics: const BouncingScrollPhysics(), + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Row( + children: [ + if (state.profile.diplomasAndCertificates != null) + ...state.profile.diplomasAndCertificates!.map((d) => _diplomaImage(baseUrl + '/storage/' + d.path)).toList(), + ], + ), ), ), ), - ), - ], + ], + ), ); } @@ -447,53 +453,56 @@ class _ProfileScreenState extends State { } _education(ProfileStateLoaded state) { - if (state.profile.role != 'consultant') { + if (state.profile.role != 'consultant' || state.profile.educationResource?.completedCourses == null) { return const SizedBox.shrink(); } - return Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Образование', - style: TextStyle( - color: Color(0xFF323F4B), - fontSize: 24, - fontWeight: FontWeight.w600, + return Padding( + padding: const EdgeInsets.only(bottom: 16), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Образование', + style: TextStyle( + color: Color(0xFF323F4B), + fontSize: 24, + fontWeight: FontWeight.w600, + ), ), - ), - Text( - widget.author == null ? 'Редактировать' : '', - style: TextStyle( - color: Color(0xFF2F80ED), - fontSize: 16, - fontWeight: FontWeight.w500, + Text( + widget.author == null ? 'Редактировать' : '', + style: TextStyle( + color: Color(0xFF2F80ED), + fontSize: 16, + fontWeight: FontWeight.w500, + ), ), - ), - ], + ], + ), ), - ), - const SizedBox(height: 8), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: Material( - color: Colors.white, - borderRadius: BorderRadius.circular(12), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - child: Column( - children: [ - if (state.profile.educationResource?.completedCourses != null) - ...state.profile.educationResource!.completedCourses!.map((c) => _educationBlock(c.values.first.title, c.values.first.date)).toList(), - ], + const SizedBox(height: 8), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 4), + child: Material( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Column( + children: [ + if (state.profile.educationResource?.completedCourses != null) + ...state.profile.educationResource!.completedCourses!.map((c) => _educationBlock(c.values.first.title, c.values.first.date)).toList(), + ], + ), ), ), ), - ), - ], + ], + ), ); } @@ -539,7 +548,7 @@ class _ProfileScreenState extends State { return const SizedBox.shrink(); } return Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), + padding: const EdgeInsets.symmetric(horizontal: 4) + const EdgeInsets.only(bottom: 16), child: Material( color: Colors.white, borderRadius: BorderRadius.circular(12), @@ -556,17 +565,19 @@ class _ProfileScreenState extends State { ); }, 'assets/icons/vk.svg', + state.profile.educationResource?.vkLink == null ? true : false, ), const SizedBox(width: 12), _socialLinkButton( () { launchUrl( Uri.parse( - state.profile.educationResource?.tgLink ?? '', + state.profile.educationResource?.vkLink ?? '', ), ); }, 'assets/icons/telegram.svg', + state.profile.educationResource?.vkLink == null ? true : false, ), const SizedBox(width: 12), _socialLinkButton( @@ -578,6 +589,7 @@ class _ProfileScreenState extends State { ); }, 'assets/icons/web.svg', + state.profile.educationResource?.personalSiteLink == null ? true : false, ), ], ), @@ -586,9 +598,9 @@ class _ProfileScreenState extends State { ); } - _socialLinkButton(Function() onTap, String icon) { + _socialLinkButton(Function() onTap, String icon, bool disabled) { return InkWell( - onTap: onTap, + onTap: disabled ? null : onTap, borderRadius: BorderRadius.circular(20), child: Ink( width: MediaQuery.of(context).size.width / 3 - (56 / 3), @@ -601,6 +613,7 @@ class _ProfileScreenState extends State { child: SvgPicture.asset( icon, width: 24, + colorFilter: ColorFilter.mode(Colors.black12, BlendMode.srcIn), ), ), ),