Skip to content

Commit

Permalink
🐛 (fix) not able to proceed from follow suggest user screen if users …
Browse files Browse the repository at this point in the history
…coun is less than 5
  • Loading branch information
TheAlphamerc committed Jun 25, 2022
1 parent 31093ec commit 81363a1
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 43 deletions.
34 changes: 17 additions & 17 deletions lib/state/searchState.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import 'appState.dart';
class SearchState extends AppState {
bool isBusy = false;
SortUser sortBy = SortUser.MaxFollower;
List<UserModel>? _userFilterlist;
List<UserModel>? _userFilterList;
List<UserModel>? _userlist;

List<UserModel>? get userlist {
if (_userFilterlist == null) {
if (_userFilterList == null) {
return null;
} else {
return List.from(_userFilterlist!);
return List.from(_userFilterList!);
}
}

Expand All @@ -26,17 +26,17 @@ class SearchState extends AppState {
(DatabaseEvent event) {
final snapshot = event.snapshot;
_userlist = <UserModel>[];
_userFilterlist = <UserModel>[];
_userFilterList = <UserModel>[];
if (snapshot.value != null) {
var map = snapshot.value as Map?;
if (map != null) {
map.forEach((key, value) {
var model = UserModel.fromJson(value);
model.key = key;
_userlist!.add(model);
_userFilterlist!.add(model);
_userFilterList!.add(model);
});
_userFilterlist!
_userFilterList!
.sort((x, y) => y.followers!.compareTo(x.followers!));
notifyListeners();
}
Expand All @@ -56,9 +56,9 @@ class SearchState extends AppState {
/// If user has use search filter and change screen and came back to search screen It will reset user list.
/// This function call when search page open.
void resetFilterList() {
if (_userlist != null && _userlist!.length != _userFilterlist!.length) {
_userFilterlist = List.from(_userlist!);
_userFilterlist!.sort((x, y) => y.followers!.compareTo(x.followers!));
if (_userlist != null && _userlist!.length != _userFilterList!.length) {
_userFilterList = List.from(_userlist!);
_userFilterList!.sort((x, y) => y.followers!.compareTo(x.followers!));
// notifyListeners();
}
}
Expand All @@ -69,8 +69,8 @@ class SearchState extends AppState {
if (name != null &&
name.isEmpty &&
_userlist != null &&
_userlist!.length != _userFilterlist!.length) {
_userFilterlist = List.from(_userlist!);
_userlist!.length != _userFilterList!.length) {
_userFilterList = List.from(_userlist!);
}
// return if userList is empty or null
if (_userlist == null && _userlist!.isEmpty) {
Expand All @@ -79,7 +79,7 @@ class SearchState extends AppState {
}
// sortBy userlist on the basis of username
else if (name != null) {
_userFilterlist = _userlist!
_userFilterList = _userlist!
.where((x) =>
x.userName != null &&
x.userName!.toLowerCase().contains(name.toLowerCase()))
Expand All @@ -97,26 +97,26 @@ class SearchState extends AppState {
String get selectedFilter {
switch (sortBy) {
case SortUser.Alphabetically:
_userFilterlist!
_userFilterList!
.sort((x, y) => x.displayName!.compareTo(y.displayName!));
return "Alphabetically";

case SortUser.MaxFollower:
_userFilterlist!.sort((x, y) => y.followers!.compareTo(x.followers!));
_userFilterList!.sort((x, y) => y.followers!.compareTo(x.followers!));
return "Popular";

case SortUser.Newest:
_userFilterlist!.sort((x, y) => DateTime.parse(y.createdAt!)
_userFilterList!.sort((x, y) => DateTime.parse(y.createdAt!)
.compareTo(DateTime.parse(x.createdAt!)));
return "Newest user";

case SortUser.Oldest:
_userFilterlist!.sort((x, y) => DateTime.parse(x.createdAt!)
_userFilterList!.sort((x, y) => DateTime.parse(x.createdAt!)
.compareTo(DateTime.parse(y.createdAt!)));
return "Oldest user";

case SortUser.Verified:
_userFilterlist!.sort((x, y) =>
_userFilterList!.sort((x, y) =>
y.isVerified.toString().compareTo(x.isVerified.toString()));
return "Verified user";

Expand Down
26 changes: 13 additions & 13 deletions lib/state/suggestionUserState.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ class SuggestionsState extends AppState {

_userlist = list.take(20).toList();
_userlist!.removeWhere((element) => isFollowing(element));
_selectedusers = List.from(_userlist!);
_selectedUsers = List.from(_userlist!);
}
}

/// Check if user followerlist contain your or not
/// Check if user followerList contain your or not
/// If your id exist in follower list it mean you are following him
bool isFollowing(UserModel user) {
if (user.followersList != null &&
Expand All @@ -51,27 +51,27 @@ class SuggestionsState extends AppState {
}
}

List<UserModel> _selectedusers = [];
int get selectedusersCount => _selectedusers.length;
List<UserModel> _selectedUsers = [];
int get selectedUsersCount => _selectedUsers.length;

bool isSelected(UserModel user) {
return _selectedusers.contains(user);
return _selectedUsers.contains(user);
}

void toggleAllSelections() {
if (_selectedusers.length == _userlist!.length) {
_selectedusers = [];
if (_selectedUsers.length == _userlist!.length) {
_selectedUsers = [];
} else {
_selectedusers = List.from(_userlist!);
_selectedUsers = List.from(_userlist!);
}
notifyListeners();
}

void toggleUserSelection(UserModel user) {
if (isSelected(user)) {
_selectedusers.remove(user);
_selectedUsers.remove(user);
} else {
_selectedusers.add(user);
_selectedUsers.add(user);
}

notifyListeners();
Expand All @@ -87,9 +87,9 @@ class SuggestionsState extends AppState {

Future<void> followUsers() async {
try {
if (_selectedusers.length > 0) {
if (_selectedUsers.length > 0) {
/// Add current user id to the following list of all selected users
for (final user in _selectedusers) {
for (final user in _selectedUsers) {
user.followersList ??= [];
user.followersList!.add(currentUser!.userId!);
user.followers = user.followersList!.length;
Expand All @@ -105,7 +105,7 @@ class SuggestionsState extends AppState {
/// Add all selected users to current user following list
currentUser!.followingList ??= [];
currentUser!.followingList!
.addAll(_selectedusers.map((e) => e.userId!));
.addAll(_selectedUsers.map((e) => e.userId!));
currentUser!.following = currentUser!.followingList!.length;
await kDatabase
.child('profile')
Expand Down
6 changes: 3 additions & 3 deletions lib/ui/page/common/sidebar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ class _SidebarMenuState extends State<SidebarMenu> {
const SizedBox(
width: 17,
),
_tappbleText(context, state.userModel!.getFollower,
_textButton(context, state.userModel!.getFollower,
' Followers', 'FollowerListPage'),
const SizedBox(width: 10),
_tappbleText(context, state.userModel!.getFollowing,
_textButton(context, state.userModel!.getFollowing,
' Following', 'FollowingListPage'),
],
),
Expand All @@ -116,7 +116,7 @@ class _SidebarMenuState extends State<SidebarMenu> {
}
}

Widget _tappbleText(
Widget _textButton(
BuildContext context, String count, String text, String navigateTo) {
return InkWell(
onTap: () {
Expand Down
20 changes: 13 additions & 7 deletions lib/ui/page/feed/suggestedUsers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ class _SuggestedUsersState extends State<SuggestedUsers> {
searchState.userlist != null &&
searchState.userlist!.isNotEmpty;

final userToFollowCount = isFollowListAvailable
? state.userlist!.length > 5
? 5
: state.userlist!.length
: 0;

return Scaffold(
bottomNavigationBar: !isFollowListAvailable
? null
Expand All @@ -54,28 +60,28 @@ class _SuggestedUsersState extends State<SuggestedUsers> {
children: [
Padding(
padding: const EdgeInsets.only(left: 16),
child: state.selectedusersCount >= 5
child: state.selectedUsersCount >= userToFollowCount
? SizedBox()
: Text(
'${5 - state.selectedusersCount} more to follow',
'${userToFollowCount - state.selectedUsersCount} more to follow',
style: TextStyles.titleStyle,
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: CustomFlatButton(
onPressed: state.selectedusersCount < 5
onPressed: state.selectedUsersCount < userToFollowCount
? null
: () async {
isLoading.value = true;
await state.followUsers();
isLoading.value = false;
},
label: 'Follow ${state.selectedusersCount}',
isWraped: true,
label: 'Follow ${state.selectedUsersCount}',
isWrapped: true,
borderRadius: 50,
labelStyle: TextStyles.onPrimaryTitleText,
color: state.selectedusersCount < 5
color: state.selectedUsersCount < userToFollowCount
? Colors.grey[350]
: TwitterColor.dodgeBlue,
isLoading: isLoading,
Expand Down Expand Up @@ -147,7 +153,7 @@ class _SuggestedUsersState extends State<SuggestedUsers> {
onPressed: () {
state.toggleAllSelections();
},
icon: state.selectedusersCount ==
icon: state.selectedUsersCount ==
state.userlist!.length
? Icon(
Icons.check_circle,
Expand Down
6 changes: 3 additions & 3 deletions lib/widgets/customFlatButton.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,22 @@ class CustomFlatButton extends StatelessWidget {
this.isLoading,
this.color,
this.labelStyle,
this.isWraped = false,
this.isWrapped = false,
this.borderRadius = 6.0,
this.padding = const EdgeInsets.symmetric(horizontal: 16, vertical: 10)})
: super(key: key);
final VoidCallback? onPressed;
final String label;
final TextStyle? labelStyle;
final ValueNotifier<bool>? isLoading;
final bool isWraped;
final bool isWrapped;
final Color? color;
final EdgeInsetsGeometry padding;
final double borderRadius;
@override
Widget build(BuildContext context) {
return SizedBox(
width: isWraped ? null : double.infinity,
width: isWrapped ? null : double.infinity,
child: ValueListenableBuilder<bool>(
valueListenable: isLoading ?? ValueNotifier(false),
builder: (context, loading, child) {
Expand Down

0 comments on commit 81363a1

Please sign in to comment.