Skip to content

Commit 7631821

Browse files
committed
♻️ (refactor): Code refractor
1.Added userListPage 2. 🔥Remove multiple instance of firebase. 3.⚡ Rename global constant name. 4.➖ Removing Firestore plugin.
1 parent 444c555 commit 7631821

File tree

15 files changed

+156
-156
lines changed

15 files changed

+156
-156
lines changed

lib/helper/utility.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import 'package:firebase_analytics/firebase_analytics.dart';
2+
import 'package:firebase_database/firebase_database.dart';
23
import 'package:flutter/material.dart';
34
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
45
import 'package:flutter_twitter_clone/widgets/newWidget/customLoader.dart';
56
import 'package:intl/intl.dart';
67
import 'package:share/share.dart';
78
import 'package:url_launcher/url_launcher.dart';
89

9-
final analytics = FirebaseAnalytics();
10-
final screenloader = CustomLoader();
10+
final kAnalytics = FirebaseAnalytics();
11+
final DatabaseReference kDatabase = FirebaseDatabase.instance.reference();
12+
final kScreenloader = CustomLoader();
1113
String getAgendaTime(String startDatetime, String endDatetime) {
1214
var start =
1315
new DateFormat.jm().format(DateTime.parse(startDatetime)).toString();
@@ -168,7 +170,7 @@ void cprint(dynamic data, {String errorIn, String event}) {
168170
}
169171

170172
void logEvent(String event, {Map<String, dynamic> parameter}) {
171-
analytics.logEvent(name: event, parameters: parameter);
173+
kAnalytics.logEvent(name: event, parameters: parameter);
172174
}
173175

174176
void share(String message, {String subject}) {

lib/main.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:firebase_database/firebase_database.dart';
12
import 'package:flutter/material.dart';
23
import 'package:flutter_twitter_clone/helper/theme.dart';
34
import 'package:flutter_twitter_clone/state/searchState.dart';
@@ -17,6 +18,7 @@ void main() {
1718
}
1819

1920
class MyApp extends StatelessWidget {
21+
2022
@override
2123
Widget build(BuildContext context) {
2224
return MultiProvider(

lib/page/common/usersListPage.dart

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_twitter_clone/helper/theme.dart';
3+
import 'package:flutter_twitter_clone/page/common/widget/userListWidget.dart';
4+
import 'package:flutter_twitter_clone/state/authState.dart';
5+
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
6+
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
7+
import 'package:provider/provider.dart';
8+
9+
class UsersListPage extends StatelessWidget {
10+
UsersListPage({
11+
Key key,
12+
this.pageTitle = "",
13+
this.appBarIcon,
14+
this.emptyScreenText,
15+
this.emptyScreenSubTileText,
16+
this.userList,
17+
}) : super(key: key);
18+
19+
final String pageTitle;
20+
final String emptyScreenText;
21+
final String emptyScreenSubTileText;
22+
final int appBarIcon;
23+
final List<String> userList;
24+
25+
@override
26+
Widget build(BuildContext context) {
27+
return Scaffold(
28+
backgroundColor: TwitterColor.mystic,
29+
appBar: CustomAppBar(
30+
isBackButton: true,
31+
title: customTitleText(pageTitle),
32+
icon: appBarIcon),
33+
body: Consumer<AuthState>(
34+
builder: (context, state, child) {
35+
return UserListWidget(
36+
fetchingListbool: state.isbusy ?? false,
37+
list: userList,
38+
emptyScreenText: emptyScreenText,
39+
emptyScreenSubTileText: emptyScreenSubTileText,
40+
);
41+
},
42+
),
43+
);
44+
}
45+
}

lib/page/profile/follow/widget/userList.dart renamed to lib/page/common/widget/userListWidget.dart

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_twitter_clone/helper/constant.dart';
33
import 'package:flutter_twitter_clone/helper/theme.dart';
4-
import 'package:flutter_twitter_clone/helper/utility.dart';
54
import 'package:flutter_twitter_clone/model/user.dart';
5+
import 'package:flutter_twitter_clone/state/authState.dart';
6+
import 'package:flutter_twitter_clone/state/feedState.dart';
67
import 'package:flutter_twitter_clone/state/notificationState.dart';
78
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
89
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
910
import 'package:flutter_twitter_clone/widgets/newWidget/emptyList.dart';
1011
import 'package:flutter_twitter_clone/widgets/newWidget/rippleButton.dart';
11-
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
1212
import 'package:provider/provider.dart';
1313

1414
class UserListWidget extends StatelessWidget {
1515
final List<String> list;
1616
final fetchingListbool;
1717
final String emptyScreenText;
1818
final String emptyScreenSubTileText;
19-
final bool isFollowing;
20-
const UserListWidget(
19+
String myId;
20+
UserListWidget(
2121
{Key key,
2222
this.list,
2323
this.emptyScreenText,
24-
this.isFollowing = false,
2524
this.fetchingListbool,
2625
this.emptyScreenSubTileText})
2726
: super(key: key);
2827
Widget _userTile(BuildContext context, User user) {
28+
bool isFollow = isFollowing(user);
2929
return Container(
3030
padding: EdgeInsets.symmetric(vertical: 10),
3131
color: TwitterColor.white,
@@ -70,19 +70,18 @@ class UserListWidget extends StatelessWidget {
7070
borderRadius: BorderRadius.circular(25),
7171
child: Container(
7272
padding: EdgeInsets.symmetric(
73-
horizontal: isFollowing ? 15 : 20, vertical: 3),
73+
horizontal: isFollow ? 15 : 20, vertical: 3),
7474
decoration: BoxDecoration(
75-
color: isFollowing
76-
? TwitterColor.dodgetBlue
77-
: TwitterColor.white,
75+
color:
76+
isFollow ? TwitterColor.dodgetBlue : TwitterColor.white,
7877
border:
7978
Border.all(color: TwitterColor.dodgetBlue, width: 1),
8079
borderRadius: BorderRadius.circular(25),
8180
),
8281
child: Text(
83-
isFollowing ? 'Following' : 'Follow',
82+
isFollow ? 'Following' : 'Follow',
8483
style: TextStyle(
85-
color: isFollowing ? TwitterColor.white : Colors.blue,
84+
color: isFollow ? TwitterColor.white : Colors.blue,
8685
fontSize: 17,
8786
fontWeight: FontWeight.bold),
8887
),
@@ -110,17 +109,27 @@ class UserListWidget extends StatelessWidget {
110109
return bio;
111110
}
112111
}
113-
return null;
112+
return null;
113+
}
114+
115+
bool isFollowing(User model) {
116+
if (model.followersList != null &&
117+
model.followersList.any((x) => x == myId)) {
118+
return true;
119+
} else {
120+
return false;
121+
}
114122
}
115123

116124
@override
117125
Widget build(BuildContext context) {
118-
var notificationState = Provider.of<NotificationState>(context);
126+
var state = Provider.of<AuthState>(context, listen: false);
127+
myId = state.userModel.key;
119128
return list != null && list.isNotEmpty
120129
? ListView.separated(
121130
itemBuilder: (context, index) {
122131
return FutureBuilder(
123-
future: notificationState.getuserDetail(list[index]),
132+
future: state.getuserDetail(list[index]),
124133
builder: (context, AsyncSnapshot<User> snapshot) {
125134
if (snapshot.hasData) {
126135
return _userTile(context, snapshot.data);

lib/page/feed/composeTweet/composeTweet.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class _ComposeTweetReplyPageState extends State<ComposeTweetPage> {
9191
}
9292
var state = Provider.of<FeedState>(context, listen: false);
9393
var authState = Provider.of<AuthState>(context, listen: false);
94-
screenloader.showLoader(context);
94+
kScreenloader.showLoader(context);
9595
var user = authState.userModel;
9696
var profilePic = user.profilePic ?? dummyProfilePic;
9797
var tags = getHashTags(_textEditingController.text);
@@ -128,7 +128,7 @@ class _ComposeTweetReplyPageState extends State<ComposeTweetPage> {
128128
state.addcommentToPost(reply);
129129
}
130130
}
131-
screenloader.hideLoader();
131+
kScreenloader.hideLoader();
132132
Navigator.pop(context);
133133
}
134134

lib/page/feed/composeTweet/createFeed.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class _CreateFeedPageState extends State<CreateFeedPage> {
7676
return;
7777
}
7878
// state.isBusy = true;
79-
screenloader.showLoader(context);
79+
kScreenloader.showLoader(context);
8080
var name = authState.userModel.displayName ??
8181
authState.userModel.email.split('@')[0];
8282
var pic = authState.userModel.profilePic ?? dummyProfilePic;
@@ -107,7 +107,7 @@ class _CreateFeedPageState extends State<CreateFeedPage> {
107107
state.createTweet(_model);
108108
}
109109
// state.isBusy = false;
110-
screenloader.hideLoader();
110+
kScreenloader.hideLoader();
111111
Navigator.pop(context);
112112
}
113113

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,20 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_twitter_clone/helper/constant.dart';
3-
import 'package:flutter_twitter_clone/helper/theme.dart';
4-
import 'package:flutter_twitter_clone/page/profile/follow/widget/userList.dart';
3+
import 'package:flutter_twitter_clone/page/common/usersListPage.dart';
54
import 'package:flutter_twitter_clone/state/authState.dart';
6-
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
7-
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
85
import 'package:provider/provider.dart';
96

107
class FollowerListPage extends StatelessWidget {
118
FollowerListPage({Key key}) : super(key: key);
129
@override
1310
Widget build(BuildContext context) {
14-
// var authstate = Provider.of<AuthState>(context);
15-
return Scaffold(
16-
backgroundColor: TwitterColor.mystic,
17-
appBar: CustomAppBar(
18-
isBackButton: true,
19-
title: customTitleText(
20-
'Followers',
21-
),
22-
icon: AppIcon.follow,
23-
),
24-
body: Consumer<AuthState>(
25-
builder: (context, state, child) {
26-
return UserListWidget(
27-
fetchingListbool: state.isbusy ?? false,
28-
list: state.profileUserModel?.followersList,
29-
emptyScreenText: '${state?.profileUserModel?.userName ?? state.userModel.userName} doesn\'t have any followers',
30-
emptyScreenSubTileText: 'When someone follow them, they\'ll be listed here.',
31-
);
32-
},
33-
),
11+
var state = Provider.of<AuthState>(context);
12+
return UsersListPage(
13+
pageTitle: 'Followers',
14+
userList: state.profileUserModel?.followersList,
15+
appBarIcon:AppIcon.follow,
16+
emptyScreenText: '${state?.profileUserModel?.userName ?? state.userModel.userName} doesn\'t have any followers',
17+
emptyScreenSubTileText: 'When someone follow them, they\'ll be listed here.',
3418
);
3519
}
3620
}
Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_twitter_clone/helper/constant.dart';
3-
import 'package:flutter_twitter_clone/helper/theme.dart';
3+
import 'package:flutter_twitter_clone/page/common/usersListPage.dart';
44
import 'package:flutter_twitter_clone/state/authState.dart';
5-
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
6-
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
75
import 'package:provider/provider.dart';
8-
import 'widget/userList.dart';
96

107
class FollowingListPage extends StatefulWidget {
118
FollowingListPage({Key key}) : super(key: key);
@@ -26,26 +23,13 @@ class _FollowingListPageState extends State<FollowingListPage> {
2623

2724
@override
2825
Widget build(BuildContext context) {
29-
return Scaffold(
30-
backgroundColor: TwitterColor.mystic,
31-
appBar: CustomAppBar(
32-
isBackButton: true,
33-
title: customTitleText(
34-
'Following',
35-
),
36-
icon: AppIcon.follow,
37-
),
38-
body: Consumer<AuthState>(
39-
builder: (context, state, child) {
40-
return UserListWidget(
41-
isFollowing: true,
42-
fetchingListbool: state.isbusy ?? false,
43-
list: state.profileFollowingList,
44-
emptyScreenText: '${state?.profileUserModel?.userName ?? state.userModel.userName} isn\'t follow anyone',
45-
emptyScreenSubTileText : 'When they do they\'ll be listed here.'
46-
);
47-
},
48-
),
49-
);
26+
var state = Provider.of<AuthState>(context);
27+
return UsersListPage(
28+
pageTitle: 'Followers',
29+
userList: state.profileFollowingList,
30+
appBarIcon: AppIcon.follow,
31+
emptyScreenText:
32+
'${state?.profileUserModel?.userName ?? state.userModel.userName} isn\'t follow anyone',
33+
emptyScreenSubTileText: 'When they do they\'ll be listed here.');
5034
}
5135
}

lib/page/search/SearchPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class _SearchPageState extends State<SearchPage> {
3434
Widget _userTile(User user) {
3535
return ListTile(
3636
onTap: () {
37-
analytics.logViewSearchResults(searchTerm: user.userName);
37+
kAnalytics.logViewSearchResults(searchTerm: user.userName);
3838
Navigator.of(context).pushNamed('/ProfilePage/' + user?.userId);
3939
},
4040
leading: customImage(context, user.profilePic, height: 40),

0 commit comments

Comments
 (0)