@@ -17,35 +17,69 @@ class CommentsTabPages extends StatefulWidget {
1717class _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 ,
0 commit comments