From cef457087eeff18f7b0bd038cb849cd3a4e3320e Mon Sep 17 00:00:00 2001 From: Dante291 Date: Mon, 4 Dec 2023 16:30:32 +0530 Subject: [PATCH 1/3] Enhancing UX for adding content --- lib/constants/routing_constants.dart | 3 +++ lib/router.dart | 9 ++++++++- lib/view_model/main_screen_view_model.dart | 15 --------------- lib/views/after_auth_screens/add_post_page.dart | 10 ++++++++-- .../feed/organization_feed.dart | 14 ++++++++++++++ test/router_test.dart | 12 ++++++++++++ .../after_auth_screens/add_post_page_test.dart | 10 ++++++++++ .../feed/organization_feed_test.dart | 11 +++++++++++ 8 files changed, 66 insertions(+), 18 deletions(-) diff --git a/lib/constants/routing_constants.dart b/lib/constants/routing_constants.dart index 48a3bb2ca..be99cc55b 100644 --- a/lib/constants/routing_constants.dart +++ b/lib/constants/routing_constants.dart @@ -99,4 +99,7 @@ class Routes { /// static variable to access pinnedpostscreen. static const String pinnedPostScreen = '/pinnedpostscreen'; + + /// static variable. + static const String addPostScreen = '/addpostscreen'; } diff --git a/lib/router.dart b/lib/router.dart index 5d942d170..fb19d0a39 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -10,6 +10,7 @@ import 'package:talawa/models/task/task_model.dart'; import 'package:talawa/splash_screen.dart'; import 'package:talawa/view_model/after_auth_view_models/chat_view_models/direct_chat_view_model.dart'; import 'package:talawa/view_model/after_auth_view_models/event_view_models/create_event_view_model.dart'; +import 'package:talawa/views/after_auth_screens/add_post_page.dart'; import 'package:talawa/views/after_auth_screens/app_settings/app_settings_page.dart'; import 'package:talawa/views/after_auth_screens/chat/chat_message_screen.dart'; import 'package:talawa/views/after_auth_screens/chat/select_contact.dart'; @@ -302,11 +303,17 @@ Route generateRoute(RouteSettings settings) { task: task, ), ); - // Returns the DemoPageView Widget by default case Routes.selectContact: return MaterialPageRoute( builder: (context) => const SelectContact(key: Key('selectContact')), ); + case Routes.addPostScreen: + return MaterialPageRoute( + builder: (context) => const AddPost( + key: Key('addpostscreen'), + ), + ); + // Returns the DemoPageView Widget by default default: return MaterialPageRoute( builder: (context) => const DemoPageView( diff --git a/lib/view_model/main_screen_view_model.dart b/lib/view_model/main_screen_view_model.dart index d75783b2a..ba582558a 100644 --- a/lib/view_model/main_screen_view_model.dart +++ b/lib/view_model/main_screen_view_model.dart @@ -7,7 +7,6 @@ import 'package:talawa/plugins/fetch_plugin_list.dart'; import 'package:talawa/services/size_config.dart'; import 'package:talawa/utils/app_localization.dart'; import 'package:talawa/view_model/base_view_model.dart'; -import 'package:talawa/views/after_auth_screens/add_post_page.dart'; // import 'package:talawa/views/after_auth_screens/chat/chat_list_screen.dart'; import 'package:talawa/views/after_auth_screens/events/explore_events.dart'; import 'package:talawa/views/after_auth_screens/feed/organization_feed.dart'; @@ -232,13 +231,6 @@ class MainScreenViewModel extends BaseModel { ), label: AppLocalizations.of(context)!.strictTranslate('Events'), ), - BottomNavigationBarItem( - icon: Icon( - Icons.add_box, - key: keyBNPost, - ), - label: AppLocalizations.of(context)!.strictTranslate('Add'), - ), /// Makes chat inaccessible for the user //TODO: add chat functionality @@ -267,13 +259,6 @@ class MainScreenViewModel extends BaseModel { key: const Key('ExploreEvents'), homeModel: this, ), - AddPost( - key: const Key('AddPost'), - drawerKey: MainScreenViewModel.scaffoldKey, - ), - // const ChatPage( - // key: Key('Chats'), - // ), ProfilePage( key: keySPEditProfile, homeModel: this, diff --git a/lib/views/after_auth_screens/add_post_page.dart b/lib/views/after_auth_screens/add_post_page.dart index 9395e1064..78c7c0659 100644 --- a/lib/views/after_auth_screens/add_post_page.dart +++ b/lib/views/after_auth_screens/add_post_page.dart @@ -39,8 +39,13 @@ class AddPost extends StatelessWidget { //TODO: showing the null pointer exception key: const Key('add_post_icon_button1'), color: Theme.of(context).iconTheme.color, - icon: const Icon(Icons.menu), - onPressed: () => drawerKey!.currentState!.openDrawer(), + icon: const Icon( + Icons.arrow_back, + size: 36, + ), + onPressed: () { + navigationService.pop(); + }, ), // button to upload the post. actions: [ @@ -48,6 +53,7 @@ class AddPost extends StatelessWidget { key: const Key('add_post_text_btn1'), onPressed: () { model.uploadPost(); + navigationService.pop(); // convertImageToBase64(sampleBase64Image); }, child: Text( diff --git a/lib/views/after_auth_screens/feed/organization_feed.dart b/lib/views/after_auth_screens/feed/organization_feed.dart index df7c00f1c..feafbf4ba 100644 --- a/lib/views/after_auth_screens/feed/organization_feed.dart +++ b/lib/views/after_auth_screens/feed/organization_feed.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:talawa/locator.dart'; import 'package:talawa/view_model/after_auth_view_models/feed_view_models/organization_feed_view_model.dart'; import 'package:talawa/view_model/main_screen_view_model.dart'; import 'package:talawa/views/base_view.dart'; @@ -26,6 +27,19 @@ class OrganizationFeed extends StatelessWidget { builder: (context, model, child) { print(model.posts); return Scaffold( + floatingActionButton: FloatingActionButton( + shape: const CircleBorder(side: BorderSide.none), + key: const Key('floating_action_btn'), + backgroundColor: Colors.green, + onPressed: () { + navigationService.pushScreen('/addpostscreen'); + }, + child: const Icon( + Icons.add, + size: 35, + color: Colors.white, + ), + ), appBar: AppBar( // AppBar returns a widget for the header of the page. backgroundColor: Colors.green, diff --git a/test/router_test.dart b/test/router_test.dart index 18e36476b..34c1abbda 100644 --- a/test/router_test.dart +++ b/test/router_test.dart @@ -15,6 +15,7 @@ import 'package:talawa/models/user/user_info.dart'; import 'package:talawa/router.dart'; import 'package:talawa/splash_screen.dart'; import 'package:talawa/view_model/after_auth_view_models/chat_view_models/direct_chat_view_model.dart'; +import 'package:talawa/views/after_auth_screens/add_post_page.dart'; import 'package:talawa/views/after_auth_screens/app_settings/app_settings_page.dart'; import 'package:talawa/views/after_auth_screens/chat/chat_message_screen.dart'; import 'package:talawa/views/after_auth_screens/chat/select_contact.dart'; @@ -338,6 +339,17 @@ void main() { } }); + testWidgets('Test for addPostpage route', (WidgetTester tester) async { + final route = + generateRoute(const RouteSettings(name: Routes.addPostScreen)); + expect(route, isA()); + if (route is MaterialPageRoute) { + final builder = route.builder; + final widget = builder(MockBuildContext()); + expect(widget, isA()); + } + }); + testWidgets('Test for default DemoPage route', (WidgetTester tester) async { final route = generateRoute(const RouteSettings(name: 'default')); expect(route, isA()); diff --git a/test/widget_tests/after_auth_screens/add_post_page_test.dart b/test/widget_tests/after_auth_screens/add_post_page_test.dart index f8090c104..af7e69778 100644 --- a/test/widget_tests/after_auth_screens/add_post_page_test.dart +++ b/test/widget_tests/after_auth_screens/add_post_page_test.dart @@ -62,6 +62,16 @@ void main() { }); group('createAddPostScreen Test', () { + testWidgets('check if back button in app bar works', (tester) async { + await tester.pumpWidget(createAddPostScreen()); + await tester.pump(); + final backButtonFinder = find.byKey(const Key('add_post_icon_button1')); + expect(backButtonFinder, findsOneWidget); + await tester.tap(backButtonFinder); + await tester.pump(); + verify(navigationService.pop()).called(1); + }); + testWidgets('check if createAddPostScreen shows up', (tester) async { await tester.pumpWidget(createAddPostScreen()); await tester.pump(); diff --git a/test/widget_tests/after_auth_screens/feed/organization_feed_test.dart b/test/widget_tests/after_auth_screens/feed/organization_feed_test.dart index e76d9bfbd..6a44f075d 100644 --- a/test/widget_tests/after_auth_screens/feed/organization_feed_test.dart +++ b/test/widget_tests/after_auth_screens/feed/organization_feed_test.dart @@ -168,4 +168,15 @@ void main() { await tester.pumpWidget(createOrganizationFeedScreen2(homeModel: model)); await tester.pumpAndSettle(const Duration(seconds: 1)); }); + testWidgets('check if floating action button is visible and functional', + (tester) async { + final model = locator(); + await tester.pumpWidget(createOrganizationFeedScreen(homeModel: model)); + await tester.pump(); + final fabFinder = find.byKey(const Key('floating_action_btn')); + expect(fabFinder, findsOneWidget); + await tester.tap(fabFinder); + await tester.pump(); + verify(navigationService.pushScreen('/addpostscreen')).called(1); + }); } From e1788093d2e5cb65ee1dc8f9c9db2b09a59d1be9 Mon Sep 17 00:00:00 2001 From: Dante291 Date: Tue, 5 Dec 2023 23:46:25 +0530 Subject: [PATCH 2/3] resolving asked changes --- lib/constants/routing_constants.dart | 2 +- lib/router.dart | 2 +- lib/views/after_auth_screens/feed/organization_feed.dart | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/constants/routing_constants.dart b/lib/constants/routing_constants.dart index be99cc55b..26e2c28b5 100644 --- a/lib/constants/routing_constants.dart +++ b/lib/constants/routing_constants.dart @@ -100,6 +100,6 @@ class Routes { /// static variable to access pinnedpostscreen. static const String pinnedPostScreen = '/pinnedpostscreen'; - /// static variable. + /// static variable to access addPostScreen. static const String addPostScreen = '/addpostscreen'; } diff --git a/lib/router.dart b/lib/router.dart index fb19d0a39..4b348a890 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -310,7 +310,7 @@ Route generateRoute(RouteSettings settings) { case Routes.addPostScreen: return MaterialPageRoute( builder: (context) => const AddPost( - key: Key('addpostscreen'), + key: Key('addPostScreen'), ), ); // Returns the DemoPageView Widget by default diff --git a/lib/views/after_auth_screens/feed/organization_feed.dart b/lib/views/after_auth_screens/feed/organization_feed.dart index feafbf4ba..dc09d970b 100644 --- a/lib/views/after_auth_screens/feed/organization_feed.dart +++ b/lib/views/after_auth_screens/feed/organization_feed.dart @@ -25,7 +25,6 @@ class OrganizationFeed extends StatelessWidget { return BaseView( onModelReady: (model) => model.initialise(isTest: forTest), builder: (context, model, child) { - print(model.posts); return Scaffold( floatingActionButton: FloatingActionButton( shape: const CircleBorder(side: BorderSide.none), From 8e451ace8bee25fbd5e9106949aaae8d0a0b7cb3 Mon Sep 17 00:00:00 2001 From: Dante291 Date: Wed, 6 Dec 2023 00:09:01 +0530 Subject: [PATCH 3/3] fixing constant sizing --- lib/views/after_auth_screens/feed/organization_feed.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/views/after_auth_screens/feed/organization_feed.dart b/lib/views/after_auth_screens/feed/organization_feed.dart index dc09d970b..459af1c7a 100644 --- a/lib/views/after_auth_screens/feed/organization_feed.dart +++ b/lib/views/after_auth_screens/feed/organization_feed.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:talawa/locator.dart'; +import 'package:talawa/services/size_config.dart'; import 'package:talawa/view_model/after_auth_view_models/feed_view_models/organization_feed_view_model.dart'; import 'package:talawa/view_model/main_screen_view_model.dart'; import 'package:talawa/views/base_view.dart'; @@ -33,9 +34,9 @@ class OrganizationFeed extends StatelessWidget { onPressed: () { navigationService.pushScreen('/addpostscreen'); }, - child: const Icon( + child: Icon( Icons.add, - size: 35, + size: SizeConfig.screenHeight! * 0.045, color: Colors.white, ), ),