1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-26 06:49:22 +00:00

Handle comments notifications

This commit is contained in:
Pierre HUBERT 2019-11-02 12:46:17 +01:00
parent 5250eb59b4
commit 053035f350
5 changed files with 96 additions and 5 deletions

View File

@ -84,6 +84,20 @@ class PostsHelper {
} }
} }
/// Get a single post information
Future<Post> getSingle(int postID) async {
final response = await APIRequest(
uri: "posts/get_single",
args: {"postID": postID.toString()},
needLogin: true,
).exec();
if (!response.isOK)
throw Exception("Could not get information about the post!");
return _apiToPost(response.getObject());
}
/// Create a new post /// Create a new post
/// ///
/// This function crash in case of error /// This function crash in case of error

View File

@ -0,0 +1,62 @@
import 'package:comunic/helpers/posts_helper.dart';
import 'package:comunic/lists/posts_list.dart';
import 'package:comunic/ui/widgets/posts_list_widget.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
/// Single post route
///
/// @author Pierre HUBERT
class SinglePostRoute extends StatelessWidget {
final int postID;
const SinglePostRoute({
Key key,
@required this.postID,
}) : assert(postID != null),
super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(tr("Post")),
),
body: _SinglePostRouteBody(postID: postID),
);
}
}
class _SinglePostRouteBody extends StatefulWidget {
final int postID;
const _SinglePostRouteBody({
Key key,
@required this.postID,
}) : assert(postID != null),
super(key: key);
@override
__SinglePostRouteBodyState createState() => __SinglePostRouteBodyState();
}
class __SinglePostRouteBodyState extends State<_SinglePostRouteBody> {
Future<PostsList> _getPost() async {
try {
return PostsList()..add(await PostsHelper().getSingle(widget.postID));
} on Exception catch (e) {
print(e);
return null;
}
}
@override
Widget build(BuildContext context) {
return PostsListWidget(
getPostsList: _getPost,
showPostsTarget: true,
);
}
}

View File

@ -8,6 +8,7 @@ import 'package:comunic/models/notification.dart' as n;
import 'package:comunic/ui/widgets/account_image_widget.dart'; import 'package:comunic/ui/widgets/account_image_widget.dart';
import 'package:comunic/utils/date_utils.dart'; import 'package:comunic/utils/date_utils.dart';
import 'package:comunic/utils/intl_utils.dart'; import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/navigation_utils.dart';
import 'package:comunic/utils/ui_utils.dart'; import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -242,6 +243,7 @@ class _NotificationTile extends StatelessWidget {
leading: AccountImageWidget( leading: AccountImageWidget(
user: srcUser, user: srcUser,
), ),
onTap: () => _onTap(context),
title: Text(message), title: Text(message),
subtitle: Text(diffTimeFromNowToStr(notification.timeCreate)), subtitle: Text(diffTimeFromNowToStr(notification.timeCreate)),
trailing: PopupMenuButton<_PopupMenuActions>( trailing: PopupMenuButton<_PopupMenuActions>(
@ -263,4 +265,12 @@ class _NotificationTile extends StatelessWidget {
break; break;
} }
} }
void _onTap(BuildContext context) {
if (notification.onElemType == n.NotificationElementType.POST) {
openPostFullScreen(notification.onElemId, context);
}
// TODO : mark the notification as seen
}
} }

View File

@ -76,9 +76,7 @@ class _PostsListWidgetState extends State<PostsListWidget> {
/// Load the list of posts /// Load the list of posts
Future<void> _loadPostsList({bool getOlder = false}) async { Future<void> _loadPostsList({bool getOlder = false}) async {
if (_loading) return;
if(_loading)
return;
_loading = true; _loading = true;

View File

@ -1,3 +1,4 @@
import 'package:comunic/ui/routes/single_post_route.dart';
import 'package:comunic/ui/routes/user_page_route.dart'; import 'package:comunic/ui/routes/user_page_route.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
@ -19,3 +20,9 @@ void openUserPage({@required int userID, @required BuildContext context}) {
), ),
); );
} }
/// Open a post in full screen
void openPostFullScreen(int postID, BuildContext context) {
Navigator.of(context)
.push(MaterialPageRoute(builder: (c) => SinglePostRoute(postID: postID)));
}