diff --git a/lib/features/agents/presentation/screens/agent_detail_screen.dart b/lib/features/agents/presentation/screens/agent_detail_screen.dart index 9735507..9820041 100644 --- a/lib/features/agents/presentation/screens/agent_detail_screen.dart +++ b/lib/features/agents/presentation/screens/agent_detail_screen.dart @@ -1598,9 +1598,13 @@ class _SpecializationCardWidgetState extends State<_SpecializationCardWidget> { : widget.card.values.take(_initialCount).toList(); final hasMore = widget.card.values.length > _initialCount; + // Consistent minimum height across all cards so the layout stays uniform + // regardless of how many values each card has (icon + title + up to 3 + // rows + show more button fits comfortably). return Container( width: 298, - padding: const EdgeInsets.symmetric(vertical: 16), + constraints: const BoxConstraints(minHeight: 240), + padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 12), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(15), @@ -1611,11 +1615,13 @@ class _SpecializationCardWidgetState extends State<_SpecializationCardWidget> { ), child: Column( mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, children: [ Icon(_icon, size: 32, color: AppColors.accentOrange), const SizedBox(height: 8), Text( widget.card.name, + textAlign: TextAlign.center, style: const TextStyle( fontFamily: 'Fractul', fontSize: 14, diff --git a/lib/features/agents/presentation/screens/agent_search_screen.dart b/lib/features/agents/presentation/screens/agent_search_screen.dart index 014d905..88f94ed 100644 --- a/lib/features/agents/presentation/screens/agent_search_screen.dart +++ b/lib/features/agents/presentation/screens/agent_search_screen.dart @@ -187,6 +187,7 @@ class _AgentSearchScreenState extends ConsumerState { ), ), onSubmitted: (value) { + if (value.trim().isEmpty) return; ref.read(searchAgentsProvider.notifier).search(value); }, ), @@ -196,13 +197,24 @@ class _AgentSearchScreenState extends ConsumerState { const SizedBox(width: 0), GestureDetector( onTap: () { - ref - .read(searchAgentsProvider.notifier) - .search(_searchController.text); + final query = _searchController.text.trim(); + if (query.isEmpty) { + // No input — don't trigger a refresh + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Please enter a keyword'), + behavior: SnackBarBehavior.floating, + duration: Duration(seconds: 2), + ), + ); + return; + } + ref.read(searchAgentsProvider.notifier).search(query); }, child: Container( width: 62, height: 42, + alignment: Alignment.center, decoration: BoxDecoration( color: AppColors.accentOrange, border: Border.all( @@ -211,12 +223,10 @@ class _AgentSearchScreenState extends ConsumerState { ), borderRadius: BorderRadius.circular(7), ), - child: Center( - child: SvgPicture.string( - '', - width: 24, - height: 24, - ), + child: const Icon( + Icons.search, + color: Colors.white, + size: 24, ), ), ), diff --git a/lib/features/profile/presentation/widgets/profile_shared_widgets.dart b/lib/features/profile/presentation/widgets/profile_shared_widgets.dart index 202787b..119a4e7 100644 --- a/lib/features/profile/presentation/widgets/profile_shared_widgets.dart +++ b/lib/features/profile/presentation/widgets/profile_shared_widgets.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:real_estate_mobile/core/constants/app_colors.dart'; class ProfileFormField extends StatelessWidget { @@ -10,6 +11,8 @@ class ProfileFormField extends StatelessWidget { final TextCapitalization textCapitalization; final bool obscureText; final Widget? suffixIcon; + final List? inputFormatters; + final int? maxLength; const ProfileFormField({ super.key, @@ -21,6 +24,8 @@ class ProfileFormField extends StatelessWidget { this.textCapitalization = TextCapitalization.words, this.obscureText = false, this.suffixIcon, + this.inputFormatters, + this.maxLength, }); @override @@ -53,6 +58,8 @@ class ProfileFormField extends StatelessWidget { keyboardType: keyboardType, textCapitalization: textCapitalization, obscureText: obscureText, + inputFormatters: inputFormatters, + maxLength: maxLength, textAlignVertical: TextAlignVertical.center, style: const TextStyle( fontFamily: 'SourceSerif4', @@ -62,6 +69,7 @@ class ProfileFormField extends StatelessWidget { ), decoration: InputDecoration( isDense: true, + counterText: '', contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10), border: border,