Skip to content

Commit 444c555

Browse files
committed
♻️ (refactor): Code refractor
1. Rename feedPostreply page to ComposeTweet. 2.:art: Improve code structure. 3.:truck: Move bottomIconWidget to Tweet folder. 4.:truck: Code for Tweet , reply, comment is moved in one screen.
1 parent 13d447e commit 444c555

File tree

11 files changed

+192
-156
lines changed

11 files changed

+192
-156
lines changed

lib/helper/routes.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_twitter_clone/page/Auth/selectAuthMethod.dart';
33
import 'package:flutter_twitter_clone/page/Auth/verifyEmail.dart';
44
import 'package:flutter_twitter_clone/page/common/splash.dart';
5+
import 'package:flutter_twitter_clone/page/feed/composeTweet/composeTweet.dart';
56
import 'package:flutter_twitter_clone/page/feed/composeTweet/createFeed.dart';
6-
import 'package:flutter_twitter_clone/page/feed/composeTweet/feedPostreply.dart';
77
import 'package:flutter_twitter_clone/page/message/conversationInformation/conversationInformation.dart';
88
import 'package:flutter_twitter_clone/page/message/newMessagePage.dart';
99
import 'package:flutter_twitter_clone/page/profile/follow/followerListPage.dart';
@@ -68,13 +68,17 @@ class Routes{
6868
else if(pathElements[1].contains('CreateFeedPage')){
6969
return CustomRoute<bool>(builder:(BuildContext context)=> CreateFeedPage(),settings: RouteSettings(name:'CreateFeedPage'));
7070
}
71-
else if(pathElements[1].contains('FeedPostReplyPage')){
71+
else if(pathElements[1].contains('ComposeTweetPage')){
7272
// var postId = pathElements[2];
7373
bool isRetweet = false;
74+
bool isTweet = false;
7475
if(pathElements.length == 3 && pathElements[2].contains('retweet')){
7576
isRetweet = true;
7677
}
77-
return CustomRoute<bool>(builder:(BuildContext context)=> FeedPostReplyPage(isRetweet:isRetweet),settings: RouteSettings(name:'FeedPostReplyPage'));
78+
else if(pathElements.length == 3 && pathElements[2].contains('tweet')){
79+
isTweet = true;
80+
}
81+
return CustomRoute<bool>(builder:(BuildContext context)=> ComposeTweetPage(isRetweet:isRetweet, isTweet: isTweet),settings: RouteSettings(name:'ComposeTweetPage'));
7882
}
7983
else if(pathElements[1].contains('FeedPostDetail')){
8084
var postId = pathElements[2];

lib/page/feed/composeTweet/feedPostreply.dart renamed to lib/page/feed/composeTweet/composeTweet.dart

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
11
import 'dart:io';
2-
32
import 'package:flutter/material.dart';
43
import 'package:flutter/rendering.dart';
54
import 'package:flutter_twitter_clone/helper/constant.dart';
65
import 'package:flutter_twitter_clone/helper/theme.dart';
76
import 'package:flutter_twitter_clone/helper/utility.dart';
87
import 'package:flutter_twitter_clone/model/feedModel.dart';
98
import 'package:flutter_twitter_clone/model/user.dart';
9+
import 'package:flutter_twitter_clone/page/feed/composeTweet/widget/composeBottomIconWidget.dart';
10+
import 'package:flutter_twitter_clone/page/feed/composeTweet/widget/composeTweetImage.dart';
1011
import 'package:flutter_twitter_clone/state/authState.dart';
1112
import 'package:flutter_twitter_clone/state/feedState.dart';
1213
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
1314
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
1415
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
15-
import 'package:flutter_twitter_clone/widgets/tweet/widgets/bottomIconWidget.dart';
16-
import 'package:flutter_twitter_clone/widgets/tweet/widgets/tweetImage.dart';
1716
import 'package:provider/provider.dart';
1817

18+
class ComposeTweetPage extends StatefulWidget {
19+
ComposeTweetPage({Key key, this.isRetweet, this.isTweet = true}) : super(key: key);
1920

20-
class FeedPostReplyPage extends StatefulWidget {
21-
FeedPostReplyPage({Key key, this.isRetweet}) : super(key: key);
22-
23-
// final String postId;
2421
final bool isRetweet;
25-
_FeedPostReplyPageState createState() => _FeedPostReplyPageState();
22+
final bool isTweet;
23+
_ComposeTweetReplyPageState createState() => _ComposeTweetReplyPageState();
2624
}
2725

28-
class _FeedPostReplyPageState extends State<FeedPostReplyPage> {
26+
class _ComposeTweetReplyPageState extends State<ComposeTweetPage> {
2927
bool isScrollingDown = false;
3028
FeedModel model;
3129
ScrollController scrollcontroller;
@@ -42,7 +40,6 @@ class _FeedPostReplyPageState extends State<FeedPostReplyPage> {
4240

4341
@override
4442
void initState() {
45-
// postId = widget.postId;
4643
var feedState = Provider.of<FeedState>(context, listen: false);
4744
model = feedState.tweetToReplyModel;
4845
scrollcontroller = ScrollController();
@@ -92,8 +89,8 @@ class _FeedPostReplyPageState extends State<FeedPostReplyPage> {
9289
_textEditingController.text.length > 280) {
9390
return;
9491
}
95-
var state = Provider.of<FeedState>(context);
96-
var authState = Provider.of<AuthState>(context);
92+
var state = Provider.of<FeedState>(context, listen: false);
93+
var authState = Provider.of<AuthState>(context, listen: false);
9794
screenloader.showLoader(context);
9895
var user = authState.userModel;
9996
var profilePic = user.profilePic ?? dummyProfilePic;
@@ -137,16 +134,14 @@ class _FeedPostReplyPageState extends State<FeedPostReplyPage> {
137134

138135
@override
139136
Widget build(BuildContext context) {
140-
var state = Provider.of<FeedState>(
141-
context,
142-
);
137+
var state = Provider.of<FeedState>(context);
143138

144139
return Scaffold(
145140
appBar: CustomAppBar(
146141
title: customTitleText(''),
147142
onActionPressed: _submitButton,
148143
isCrossButton: true,
149-
submitButtonText: widget.isRetweet ? 'Retweet' : 'Reply',
144+
submitButtonText: widget.isTweet ? 'Tweet' : widget.isRetweet ? 'Retweet' : 'Reply',
150145
isSubmitDisable: _textEditingController.text == null ||
151146
_textEditingController.text.isEmpty ||
152147
_textEditingController.text.length > 280 ||
@@ -160,12 +155,12 @@ class _FeedPostReplyPageState extends State<FeedPostReplyPage> {
160155
SingleChildScrollView(
161156
controller: scrollcontroller,
162157
child: widget.isRetweet
163-
? _FeedPostRetweetPageView(this)
164-
: _FeedPostReplyPageView(this),
158+
? _ComposeRetweet(this)
159+
: _ComposeTweet(this),
165160
),
166161
Align(
167162
alignment: Alignment.bottomCenter,
168-
child: BottomIconWidget(
163+
child: ComposeBottomIconWidget(
169164
textEditingController: _textEditingController,
170165
onImageIconSelcted: _onImageIconSelcted,
171166
),
@@ -177,11 +172,11 @@ class _FeedPostReplyPageState extends State<FeedPostReplyPage> {
177172
}
178173
}
179174

180-
class _FeedPostRetweetPageView
181-
extends WidgetView<FeedPostReplyPage, _FeedPostReplyPageState> {
182-
_FeedPostRetweetPageView(this.viewState) : super(viewState);
175+
class _ComposeRetweet
176+
extends WidgetView<ComposeTweetPage, _ComposeTweetReplyPageState> {
177+
_ComposeRetweet(this.viewState) : super(viewState);
183178

184-
final _FeedPostReplyPageState viewState;
179+
final _ComposeTweetReplyPageState viewState;
185180
Widget _tweet(BuildContext context, FeedModel model) {
186181
return Column(
187182
crossAxisAlignment: CrossAxisAlignment.start,
@@ -283,12 +278,14 @@ class _FeedPostRetweetPageView
283278
Expanded(
284279
child: _descriptionEntry(),
285280
),
286-
SizedBox(width: 16,)
281+
SizedBox(
282+
width: 16,
283+
)
287284
],
288285
),
289286
Padding(
290287
padding: EdgeInsets.only(right: 16, left: 80, bottom: 8),
291-
child: TweetImage(
288+
child: ComposeTweetImage(
292289
image: viewState._image,
293290
onCrossIconPressed: viewState._onCrossIconPressed,
294291
),
@@ -308,11 +305,11 @@ class _FeedPostRetweetPageView
308305
}
309306
}
310307

311-
class _FeedPostReplyPageView
312-
extends WidgetView<FeedPostReplyPage, _FeedPostReplyPageState> {
313-
_FeedPostReplyPageView(this.viewState) : super(viewState);
308+
class _ComposeTweet
309+
extends WidgetView<ComposeTweetPage, _ComposeTweetReplyPageState> {
310+
_ComposeTweet(this.viewState) : super(viewState);
314311

315-
final _FeedPostReplyPageState viewState;
312+
final _ComposeTweetReplyPageState viewState;
316313

317314
Widget _descriptionEntry() {
318315
return TextField(
@@ -321,7 +318,7 @@ class _FeedPostReplyPageView
321318
maxLines: null,
322319
decoration: InputDecoration(
323320
border: InputBorder.none,
324-
hintText: 'Tweet your reply',
321+
hintText: widget.isTweet ? 'What\'s happening?' : 'Tweet your reply',
325322
hintStyle: TextStyle(fontSize: 18)),
326323
);
327324
}
@@ -434,6 +431,7 @@ class _FeedPostReplyPageView
434431
child: Column(
435432
crossAxisAlignment: CrossAxisAlignment.start,
436433
children: <Widget>[
434+
viewState.widget.isTweet ? SizedBox.shrink() :
437435
_tweerCard(context),
438436
Row(
439437
crossAxisAlignment: CrossAxisAlignment.start,
@@ -447,7 +445,7 @@ class _FeedPostReplyPageView
447445
)
448446
],
449447
),
450-
TweetImage(
448+
ComposeTweetImage(
451449
image: viewState._image,
452450
onCrossIconPressed: viewState._onCrossIconPressed,
453451
),

lib/page/feed/composeTweet/createFeed.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import 'package:flutter_twitter_clone/model/feedModel.dart';
44
import 'package:flutter_twitter_clone/helper/constant.dart';
55
import 'package:flutter_twitter_clone/helper/utility.dart';
66
import 'package:flutter_twitter_clone/model/user.dart';
7+
import 'package:flutter_twitter_clone/page/feed/composeTweet/widget/composeBottomIconWidget.dart';
8+
import 'package:flutter_twitter_clone/page/feed/composeTweet/widget/composeTweetImage.dart';
79
import 'package:flutter_twitter_clone/state/authState.dart';
810
import 'package:flutter_twitter_clone/state/feedState.dart';
911
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
1012
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
11-
import 'package:flutter_twitter_clone/widgets/tweet/widgets/bottomIconWidget.dart';
12-
import 'package:flutter_twitter_clone/widgets/tweet/widgets/tweetImage.dart';
1313
import 'package:provider/provider.dart';
1414

1515
class CreateFeedPage extends StatefulWidget {
@@ -151,7 +151,7 @@ class _CreateFeedPageState extends State<CreateFeedPage> {
151151
)
152152
],
153153
),
154-
TweetImage(
154+
ComposeTweetImage(
155155
image: _image,
156156
onCrossIconPressed: () {
157157
setState(() {
@@ -165,7 +165,7 @@ class _CreateFeedPageState extends State<CreateFeedPage> {
165165
),
166166
Align(
167167
alignment: Alignment.bottomCenter,
168-
child: BottomIconWidget(
168+
child: ComposeBottomIconWidget(
169169
textEditingController: _textEditingController,
170170
onImageIconSelcted: (file) {
171171
setState(() {

lib/widgets/tweet/widgets/bottomIconWidget.dart renamed to lib/page/feed/composeTweet/widget/composeBottomIconWidget.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ import 'package:flutter_twitter_clone/helper/theme.dart';
66
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
77
import 'package:image_picker/image_picker.dart';
88

9-
class BottomIconWidget extends StatefulWidget {
9+
class ComposeBottomIconWidget extends StatefulWidget {
1010

1111
final TextEditingController textEditingController;
1212
final Function(File) onImageIconSelcted;
13-
BottomIconWidget({Key key, this.textEditingController, this.onImageIconSelcted}) : super(key: key);
13+
ComposeBottomIconWidget({Key key, this.textEditingController, this.onImageIconSelcted}) : super(key: key);
1414

1515
@override
16-
_BottomIconWidgetState createState() => _BottomIconWidgetState();
16+
_ComposeBottomIconWidgetState createState() => _ComposeBottomIconWidgetState();
1717
}
1818

19-
class _BottomIconWidgetState extends State<BottomIconWidget> {
19+
class _ComposeBottomIconWidgetState extends State<ComposeBottomIconWidget> {
2020

2121
bool reachToWarning = false;
2222
bool reachToOver = false;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import 'dart:io';
2+
3+
import 'package:flutter/material.dart';
4+
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
5+
6+
class ComposeTweetImage extends StatelessWidget {
7+
final File image;
8+
final Function onCrossIconPressed;
9+
const ComposeTweetImage({Key key, this.image, this.onCrossIconPressed})
10+
: super(key: key);
11+
12+
@override
13+
Widget build(BuildContext context) {
14+
return Container(
15+
child: image == null
16+
? Container()
17+
: Stack(
18+
children: <Widget>[
19+
Container(
20+
alignment: Alignment.topRight,
21+
child: Container(
22+
height: 220,
23+
width: fullWidth(context) * .8,
24+
decoration: BoxDecoration(
25+
borderRadius: BorderRadius.all(Radius.circular(10)),
26+
image: DecorationImage(
27+
image: FileImage(image), fit: BoxFit.cover),
28+
),
29+
),
30+
),
31+
Align(
32+
alignment: Alignment.topRight,
33+
child: Container(
34+
padding: EdgeInsets.all(0),
35+
decoration: BoxDecoration(
36+
shape: BoxShape.circle, color: Colors.black54),
37+
child: IconButton(
38+
padding: EdgeInsets.all(0),
39+
iconSize: 20,
40+
onPressed: onCrossIconPressed,
41+
icon: Icon(
42+
Icons.close,
43+
color: Theme.of(context).colorScheme.onPrimary,
44+
),
45+
),
46+
),
47+
)
48+
],
49+
),
50+
);
51+
}
52+
}

lib/page/feed/feedPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class _FeedPageState extends State<FeedPage> {
3535
Widget _floatingActionButton() {
3636
return FloatingActionButton(
3737
onPressed: () {
38-
Navigator.of(context).pushNamed('/CreateFeedPage');
38+
Navigator.of(context).pushNamed('/CreateFeedPage/tweet');
3939
},
4040
child: customIcon(
4141
context,

lib/page/feed/feedPostDetail.dart

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ class _FeedPostDetailState extends State<FeedPostDetail> {
3030
Widget _floatingActionButton() {
3131
return FloatingActionButton(
3232
onPressed: () {
33-
var state = Provider.of<FeedState>(context,);
34-
state.setTweetToReply = state.tweetDetailModel?.last;
35-
Navigator.of(context).pushNamed('/FeedPostReplyPage/' + postId);
33+
var state = Provider.of<FeedState>(context, listen: false);
34+
state.setTweetToReply = state.tweetDetailModel?.last;
35+
Navigator.of(context).pushNamed('/ComposeTweetPage/' + postId);
3636
},
3737
child: Icon(Icons.add),
3838
);
@@ -57,12 +57,8 @@ class _FeedPostDetailState extends State<FeedPostDetail> {
5757
}
5858

5959
void addLikeToComment(String commentId) {
60-
var state = Provider.of<FeedState>(
61-
context,
62-
);
63-
var authState = Provider.of<AuthState>(
64-
context,
65-
);
60+
var state = Provider.of<FeedState>(context, listen: false);
61+
var authState = Provider.of<AuthState>(context, listen: false);
6662
state.addLikeToTweet(state.tweetDetailModel.last, authState.userId);
6763
}
6864

@@ -71,24 +67,19 @@ class _FeedPostDetailState extends State<FeedPostDetail> {
7167
}
7268

7369
void deleteTweet(TweetType type, String tweetId, {String parentkey}) {
74-
var state = Provider.of<FeedState>(
75-
context,
76-
);
70+
var state = Provider.of<FeedState>(context, listen: false);
7771
state.deleteTweet(tweetId, type, parentkey: parentkey);
7872
Navigator.of(context).pop();
7973
if (type == TweetType.Detail) Navigator.of(context).pop();
8074
}
8175

8276
@override
8377
Widget build(BuildContext context) {
84-
var state = Provider.of<FeedState>(
85-
context,
86-
);
78+
var state = Provider.of<FeedState>(context);
8779
return WillPopScope(
8880
onWillPop: () async {
89-
Provider.of<FeedState>(
90-
context,
91-
).removeLastTweetDetail(postId);
81+
Provider.of<FeedState>(context, listen: false)
82+
.removeLastTweetDetail(postId);
9283
return Future.value(true);
9384
},
9485
child: Scaffold(

0 commit comments

Comments
 (0)