Skip to content

Commit 8a6d364

Browse files
committed
updat room comment
1 parent 8f5ce9d commit 8a6d364

File tree

10 files changed

+125
-54
lines changed

10 files changed

+125
-54
lines changed

lib/app/app.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ class _BodyChildState extends State<BodyChild> {
320320
print('[DEBUG] _BodyChildState initState');
321321

322322
_subscription = widget.authBloc.message$.listen((message) {
323-
var s = S.of(context);
323+
final s = S.of(context);
324324
if (message is UserLogoutMessage) {
325325
if (message is UserLogoutMessageSuccess) {
326326
_showSnackBar(s.logout_success);

lib/data/room_comments/room_comments_repository_impl.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class RoomCommentsRepositoryImpl implements RoomCommentsRepository {
4141
},
4242
merge: true,
4343
);
44-
var documentSnapshot = await _firestore.document('comments/$byId').get();
44+
final documentSnapshot = await _firestore.document('comments/$byId').get();
4545
return RoomCommentEntity.fromDocumentSnapshot(documentSnapshot);
4646
}
4747

lib/pages/detail/comments/comments_tab_bloc.dart

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ class CommentsTabBloc implements BaseBloc {
4949
final updateCommentS = PublishSubject<Tuple2<CommentItem, String>>();
5050
final commentChangedS = PublishSubject<String>();
5151
final submitAddCommentS = PublishSubject<void>();
52+
final controllers = [
53+
getCommentS,
54+
deleteCommentS,
55+
updateCommentS,
56+
commentChangedS,
57+
submitAddCommentS
58+
];
5259

5360
final initialVS = CommentsTabState.initial();
5461

@@ -98,24 +105,8 @@ class CommentsTabBloc implements BaseBloc {
98105
comment$
99106
.where((tuple) => tuple.item2 == null)
100107
.map((tuple) => tuple.item1)
101-
.exhaustMap((comment) async* {
102-
var currentUser = authBloc.currentUser();
103-
if (currentUser == null) {
104-
throw 'Fucking...';
105-
}
106-
await commentsRepository.add(
107-
commentEntity: RoomCommentEntity(
108-
null,
109-
comment,
110-
roomId,
111-
currentUser.uid,
112-
currentUser.avatar,
113-
currentUser.fullName,
114-
null,
115-
null,
116-
),
117-
);
118-
}),
108+
.exhaustMap((content) =>
109+
_addComment(content, authBloc, commentsRepository, roomId)),
119110
],
120111
).publish();
121112

@@ -133,8 +124,8 @@ class CommentsTabBloc implements BaseBloc {
133124
'$_tag ${state.isLoading} ${state.error} ${state.comments.length}')),
134125
stateDistinct$.connect(),
135126
message$.connect(),
136-
getCommentS,
137-
deleteCommentS,
127+
commentChangedS.listen(print),
128+
...controllers,
138129
],
139130
),
140131
);
@@ -206,3 +197,32 @@ Stream<CommentsTabMessage> _deleteComment(
206197
},
207198
);
208199
}
200+
201+
Stream<CommentsTabMessage> _addComment(
202+
String content,
203+
AuthBloc authBloc,
204+
RoomCommentsRepository commentsRepository,
205+
String roomId,
206+
) async* {
207+
final currentUser = authBloc.currentUser();
208+
if (currentUser == null) {
209+
yield const UnauthenticatedError();
210+
}
211+
try {
212+
await commentsRepository.add(
213+
commentEntity: RoomCommentEntity(
214+
null,
215+
content,
216+
roomId,
217+
currentUser.uid,
218+
currentUser.avatar,
219+
currentUser.fullName,
220+
null,
221+
null,
222+
),
223+
);
224+
yield AddCommentSuccess(content);
225+
} catch (e) {
226+
yield AddCommentFailure(content, e);
227+
}
228+
}

lib/pages/detail/comments/comments_tab_page.dart

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,69 @@ class CommentsTabPages extends StatefulWidget {
1717
class _CommentsTabPagesState extends State<CommentsTabPages> {
1818
StreamSubscription<CommentsTabMessage> _subscription;
1919
final focusNode = FocusNode();
20+
final commentController = TextEditingController(text: '');
2021

2122
@override
2223
void didChangeDependencies() {
2324
super.didChangeDependencies();
2425

25-
_subscription ??=
26-
BlocProvider.of<CommentsTabBloc>(context).message$.listen((message) {
27-
print('Message $message');
28-
if (message is DeleteCommentSuccess) {
29-
_showSnackBar('Delete comment success');
30-
}
31-
if (message is DeleteCommentFailure) {
32-
_showSnackBar('Delete comment failure: ${message.error}');
33-
}
34-
if (message is UpdateCommentSuccess) {
35-
_showSnackBar('Update success');
36-
}
37-
if (message is UpdateCommentFailure) {
38-
_showSnackBar('Update comment failure: ${message.error}');
39-
}
40-
if (message is MinLengthOfCommentIs3) {
41-
_showSnackBar('Min length of comment is 3!');
42-
}
43-
}, onError: (e, s) => print('$e $s'));
26+
if (_subscription == null) {
27+
var bloc = BlocProvider.of<CommentsTabBloc>(context);
28+
print(bloc);
29+
30+
commentController
31+
.addListener(() => bloc.commentChanged(commentController.text));
32+
_subscription = bloc.message$.listen(
33+
(message) async {
34+
print('Message $message');
35+
if (message is DeleteCommentSuccess) {
36+
_showSnackBar('Delete comment success');
37+
return;
38+
}
39+
if (message is DeleteCommentFailure) {
40+
_showSnackBar('Delete comment failure: ${message.error}');
41+
return;
42+
}
43+
if (message is UpdateCommentSuccess) {
44+
_showSnackBar('Update success');
45+
return;
46+
}
47+
if (message is UpdateCommentFailure) {
48+
_showSnackBar('Update comment failure: ${message.error}');
49+
return;
50+
}
51+
if (message is MinLengthOfCommentIs3) {
52+
_showSnackBar('Min length of comment is 3!');
53+
return;
54+
}
55+
if (message is UnauthenticatedError) {
56+
_showSnackBar('Unauthenticated. Please login!');
57+
await Future.delayed(const Duration(seconds: 1, milliseconds: 500));
58+
Navigator.popUntil(context, ModalRoute.withName('/'));
59+
return;
60+
}
61+
if (message is AddCommentSuccess) {
62+
_showSnackBar('Add comment succesfully');
63+
commentController.clear();
64+
return;
65+
}
66+
if (message is AddCommentFailure) {
67+
_showSnackBar('Add comment failure');
68+
print(message.error);
69+
return;
70+
}
71+
},
72+
onError: (e, s) => print('$e $s'),
73+
);
74+
}
4475
}
4576

4677
@override
4778
void dispose() {
4879
_subscription.cancel();
80+
commentController.clear();
81+
commentController.dispose();
82+
print('Dispose');
4983
super.dispose();
5084
}
5185

@@ -71,7 +105,7 @@ class _CommentsTabPagesState extends State<CommentsTabPages> {
71105
stream: bloc.state$,
72106
initialData: bloc.state$.value,
73107
builder: (context, snapshot) {
74-
var state = snapshot.data;
108+
final state = snapshot.data;
75109

76110
if (state.isLoading) {
77111
return Center(
@@ -85,7 +119,7 @@ class _CommentsTabPagesState extends State<CommentsTabPages> {
85119
);
86120
}
87121

88-
var comments = state.comments;
122+
final comments = state.comments;
89123
return Scrollbar(
90124
child: ListView.separated(
91125
physics: const BouncingScrollPhysics(),
@@ -118,6 +152,7 @@ class _CommentsTabPagesState extends State<CommentsTabPages> {
118152
children: <Widget>[
119153
Expanded(
120154
child: TextField(
155+
controller: commentController,
121156
expands: false,
122157
focusNode: focusNode,
123158
decoration: InputDecoration(
@@ -129,7 +164,6 @@ class _CommentsTabPagesState extends State<CommentsTabPages> {
129164
filled: true,
130165
),
131166
onSubmitted: (_) => bloc.submitAddComment(),
132-
onChanged: bloc.commentChanged,
133167
keyboardType: TextInputType.multiline,
134168
textInputAction: TextInputAction.newline,
135169
maxLines: null,

lib/pages/detail/comments/comments_tab_state.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,23 @@ class MinLengthOfCommentIs3 implements CommentsTabMessage {
4040
const MinLengthOfCommentIs3();
4141
}
4242

43+
class UnauthenticatedError implements CommentsTabMessage {
44+
const UnauthenticatedError();
45+
}
46+
47+
class AddCommentSuccess implements CommentsTabMessage {
48+
final String content;
49+
50+
const AddCommentSuccess(this.content);
51+
}
52+
53+
class AddCommentFailure implements CommentsTabMessage {
54+
final String content;
55+
final error;
56+
57+
const AddCommentFailure(this.content, this.error);
58+
}
59+
4360
///
4461
/// PartialChange
4562
///

lib/pages/detail/detail/room_detail_tab_page.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class _ThirdCard extends StatelessWidget {
110110

111111
@override
112112
Widget build(BuildContext context) {
113-
var titleTextTheme = Theme.of(context).textTheme.title;
113+
final titleTextTheme = Theme.of(context).textTheme.title;
114114

115115
return SliverToBoxAdapter(
116116
child: Card(
@@ -322,7 +322,7 @@ class _SecondCard extends StatelessWidget {
322322

323323
@override
324324
Widget build(BuildContext context) {
325-
var textTheme = Theme.of(context).textTheme;
325+
final textTheme = Theme.of(context).textTheme;
326326

327327
return SliverToBoxAdapter(
328328
child: Card(
@@ -425,7 +425,7 @@ class _FirstCard extends StatelessWidget {
425425

426426
@override
427427
Widget build(BuildContext context) {
428-
var titleTextTheme = Theme.of(context).textTheme.title;
428+
final titleTextTheme = Theme.of(context).textTheme.title;
429429

430430
return SliverToBoxAdapter(
431431
child: Container(

lib/pages/home/home_bloc.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class HomeBloc implements BaseBloc {
166166
LocalDataSource localData,
167167
ProvinceDistrictWardRepository provinceDistrictWardRepository,
168168
) {
169-
var seedValue = localData.selectedProvince$.value;
169+
final seedValue = localData.selectedProvince$.value;
170170

171171
return localData.selectedProvince$
172172
.switchMap((province) {

lib/pages/home/home_page.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ class _MyHomePageState extends State<MyHomePage> {
137137

138138
void _showMessage(HomeMessage message) {
139139
print('[DEBUG] home_message=$message');
140-
var s = S.of(context);
140+
final s = S.of(context);
141141

142142
if (message is ChangeSelectedProvinceMessage) {
143143
if (message is ChangeSelectedProvinceMessageSuccess) {

lib/pages/saved/saved_bloc.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class SavedBloc implements BaseBloc {
175175
FirestoreRoomRepository roomRepository,
176176
) {
177177
return removeFromSaved.flatMap((roomId) {
178-
var loginState = authBloc.loginState$.value;
178+
final loginState = authBloc.loginState$.value;
179179
if (loginState is Unauthenticated) {
180180
return Stream.value(RemovedSaveRoomMessageError(NotLoginError()));
181181
}

lib/pages/saved/saved_page.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class _SavedPageState extends State<SavedPage> {
9595
stream: _savedBloc.savedListState$,
9696
initialData: _savedBloc.savedListState$.value,
9797
builder: (context, snapshot) {
98-
var data = snapshot.data;
98+
final data = snapshot.data;
9999
print('saved length=${data.roomItems.length}, data=$data');
100100

101101
if (data.error != null) {
@@ -142,7 +142,7 @@ class _SavedPageState extends State<SavedPage> {
142142
itemCount: data.roomItems.length,
143143
physics: BouncingScrollPhysics(),
144144
itemBuilder: (context, index) {
145-
var padding = _getItemPadding(data.roomItems.length, index);
145+
final padding = _getItemPadding(data.roomItems.length, index);
146146
return SavedRoomListItem(
147147
roomItem: data.roomItems[index],
148148
margin: padding,
@@ -252,7 +252,7 @@ class _SavedRoomListItemState extends State<SavedRoomListItem>
252252
final currentLocale =
253253
BlocProvider.of<LocaleBloc>(context).locale$.value.languageCode;
254254

255-
var background = Container(
255+
final background = Container(
256256
child: Padding(
257257
padding: const EdgeInsets.all(8.0),
258258
child: Row(
@@ -282,7 +282,7 @@ class _SavedRoomListItemState extends State<SavedRoomListItem>
282282
),
283283
);
284284

285-
var content = Container(
285+
final content = Container(
286286
margin: widget.margin,
287287
decoration: BoxDecoration(
288288
borderRadius: BorderRadius.circular(4),

0 commit comments

Comments
 (0)