From c295c7becf93f848013c1f73973d6aef289229a7 Mon Sep 17 00:00:00 2001 From: Pratham Soni Date: Sat, 5 Nov 2022 08:17:38 +0530 Subject: [PATCH 1/4] adding contribution count --- .../preferences/user_preferences_account.dart | 65 ++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart index c12f759ec39a..4bdb8c2856b3 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_email_sender/flutter_email_sender.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:openfoodfacts/utils/OpenFoodAPIConfiguration.dart'; import 'package:openfoodfacts/utils/UserProductSearchQueryConfiguration.dart'; import 'package:provider/provider.dart'; @@ -216,6 +217,33 @@ class _UserPreferencesPageState extends State { ); } + Future _getMyCount( + final String userId, + final UserProductSearchType type, + final OpenFoodFactsLanguage language, + ) async { + final UserProductSearchQueryConfiguration configuration = + UserProductSearchQueryConfiguration( + type: type, + userId: userId, + pageSize: 1, + language: language, + fields: [], + ); + + final SearchResult result; + try { + result = await OpenFoodAPIClient.searchProducts( + OpenFoodAPIConfiguration.globalUser, + configuration, + queryType: OpenFoodAPIConfiguration.globalQueryType, + ); + } catch (e) { + return null; + } + return result.count; + } + @override Widget build(BuildContext context) { // We need to listen to reflect login's from outside of the preferences page @@ -227,6 +255,11 @@ class _UserPreferencesPageState extends State { final AppLocalizations appLocalizations = AppLocalizations.of(context); final Size size = MediaQuery.of(context).size; + final String currentLanguageCode = + Localizations.localeOf(context).toString(); + final OpenFoodFactsLanguage language = + LanguageHelper.fromJson(currentLanguageCode); + final List result; if (OpenFoodAPIConfiguration.globalUser != null) { @@ -243,6 +276,9 @@ class _UserPreferencesPageState extends State { iconData: Icons.add_circle_outline, context: context, localDatabase: localDatabase, + userId: userId, + type: UserProductSearchType.CONTRIBUTOR, + language: language, ), const UserPreferencesListItemDivider(), _buildProductQueryTile( @@ -254,6 +290,9 @@ class _UserPreferencesPageState extends State { iconData: Icons.edit, context: context, localDatabase: localDatabase, + userId: userId, + type: UserProductSearchType.INFORMER, + language: language, ), const UserPreferencesListItemDivider(), _buildProductQueryTile( @@ -265,6 +304,9 @@ class _UserPreferencesPageState extends State { iconData: Icons.add_a_photo, context: context, localDatabase: localDatabase, + userId: userId, + type: UserProductSearchType.PHOTOGRAPHER, + language: language, ), const UserPreferencesListItemDivider(), _buildProductQueryTile( @@ -367,6 +409,9 @@ class _UserPreferencesPageState extends State { required final IconData iconData, required final BuildContext context, required final LocalDatabase localDatabase, + final String? userId, + final UserProductSearchType? type, + final OpenFoodFactsLanguage? language, }) => _getListTile( title, @@ -377,16 +422,32 @@ class _UserPreferencesPageState extends State { context: context, ), iconData, + userId: userId, + type: type, + language: language, ); Widget _getListTile( final String title, final VoidCallback onTap, - final IconData leading, - ) => + final IconData leading, { + final String? userId, + final UserProductSearchType? type, + final OpenFoodFactsLanguage? language, + }) => UserPreferencesListTile( title: Text(title), onTap: onTap, leading: UserPreferencesListTile.getTintedIcon(leading, context), + trailing: (userId != null && type != null && language != null) + ? FutureBuilder( + future: _getMyCount(userId, type, language), + builder: (BuildContext context, AsyncSnapshot snapshot) { + return Text( + snapshot.data == null ? '0' : snapshot.data.toString(), + ); + }, + ) + : null, ); } From 1d097238f130137f4573df70d51689bf3c18c3a0 Mon Sep 17 00:00:00 2001 From: Pratham Soni Date: Sat, 5 Nov 2022 21:07:15 +0530 Subject: [PATCH 2/4] changes in code style --- .../preferences/user_preferences_account.dart | 74 +++++++------------ 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart index 7d3e22c7ce35..304b63269a62 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart @@ -22,6 +22,7 @@ import 'package:smooth_app/pages/user_management/login_page.dart'; import 'package:smooth_app/query/paged_product_query.dart'; import 'package:smooth_app/query/paged_to_be_completed_product_query.dart'; import 'package:smooth_app/query/paged_user_product_query.dart'; +import 'package:smooth_app/query/product_query.dart'; class UserPreferencesAccount extends AbstractUserPreferences { UserPreferencesAccount({ @@ -217,33 +218,6 @@ class _UserPreferencesPageState extends State { ); } - Future _getMyCount( - final String userId, - final UserProductSearchType type, - final OpenFoodFactsLanguage language, - ) async { - final UserProductSearchQueryConfiguration configuration = - UserProductSearchQueryConfiguration( - type: type, - userId: userId, - pageSize: 1, - language: language, - fields: [], - ); - - final SearchResult result; - try { - result = await OpenFoodAPIClient.searchProducts( - OpenFoodAPIConfiguration.globalUser, - configuration, - queryType: OpenFoodAPIConfiguration.globalQueryType, - ); - } catch (e) { - return null; - } - return result.count; - } - @override Widget build(BuildContext context) { // We need to listen to reflect login's from outside of the preferences page @@ -255,11 +229,6 @@ class _UserPreferencesPageState extends State { final AppLocalizations appLocalizations = AppLocalizations.of(context); final Size size = MediaQuery.of(context).size; - final String currentLanguageCode = - Localizations.localeOf(context).toString(); - final OpenFoodFactsLanguage language = - LanguageHelper.fromJson(currentLanguageCode); - final List result; if (OpenFoodAPIConfiguration.globalUser != null) { @@ -276,9 +245,7 @@ class _UserPreferencesPageState extends State { iconData: Icons.add_circle_outline, context: context, localDatabase: localDatabase, - userId: userId, type: UserProductSearchType.CONTRIBUTOR, - language: language, ), const UserPreferencesListItemDivider(), _buildProductQueryTile( @@ -290,9 +257,7 @@ class _UserPreferencesPageState extends State { iconData: Icons.edit, context: context, localDatabase: localDatabase, - userId: userId, type: UserProductSearchType.INFORMER, - language: language, ), const UserPreferencesListItemDivider(), _buildProductQueryTile( @@ -304,9 +269,7 @@ class _UserPreferencesPageState extends State { iconData: Icons.add_a_photo, context: context, localDatabase: localDatabase, - userId: userId, type: UserProductSearchType.PHOTOGRAPHER, - language: language, ), const UserPreferencesListItemDivider(), _buildProductQueryTile( @@ -403,15 +366,38 @@ class _UserPreferencesPageState extends State { return Column(children: result); } + Future _getMyCount( + final UserProductSearchType type, + ) async { + final UserProductSearchQueryConfiguration configuration = + UserProductSearchQueryConfiguration( + type: type, + userId: OpenFoodAPIConfiguration.globalUser!.userId, + pageSize: 1, + language: ProductQuery.getLanguage(), + fields: [], + ); + + final SearchResult result; + try { + result = await OpenFoodAPIClient.searchProducts( + OpenFoodAPIConfiguration.globalUser, + configuration, + queryType: OpenFoodAPIConfiguration.globalQueryType, + ); + } catch (e) { + return null; + } + return result.count; + } + Widget _buildProductQueryTile({ required final PagedProductQuery productQuery, required final String title, required final IconData iconData, required final BuildContext context, required final LocalDatabase localDatabase, - final String? userId, final UserProductSearchType? type, - final OpenFoodFactsLanguage? language, }) => _getListTile( title, @@ -422,26 +408,22 @@ class _UserPreferencesPageState extends State { context: context, ), iconData, - userId: userId, type: type, - language: language, ); Widget _getListTile( final String title, final VoidCallback onTap, final IconData leading, { - final String? userId, final UserProductSearchType? type, - final OpenFoodFactsLanguage? language, }) => UserPreferencesListTile( title: Text(title), onTap: onTap, leading: UserPreferencesListTile.getTintedIcon(leading, context), - trailing: (userId != null && type != null && language != null) + trailing: (type != null) ? FutureBuilder( - future: _getMyCount(userId, type, language), + future: _getMyCount(type), builder: (BuildContext context, AsyncSnapshot snapshot) { return Text( snapshot.data == null ? '0' : snapshot.data.toString(), From 398e2692057dc01fc52e2afd275e39e86be98afd Mon Sep 17 00:00:00 2001 From: Pratham Soni Date: Sat, 5 Nov 2022 22:52:18 +0530 Subject: [PATCH 3/4] small changes --- .../lib/pages/preferences/user_preferences_account.dart | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart index 304b63269a62..bbb4e22ea7b5 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart @@ -375,20 +375,19 @@ class _UserPreferencesPageState extends State { userId: OpenFoodAPIConfiguration.globalUser!.userId, pageSize: 1, language: ProductQuery.getLanguage(), - fields: [], + fields: [], ); - final SearchResult result; try { - result = await OpenFoodAPIClient.searchProducts( + final SearchResult result = await OpenFoodAPIClient.searchProducts( OpenFoodAPIConfiguration.globalUser, configuration, queryType: OpenFoodAPIConfiguration.globalQueryType, ); + return result.count; } catch (e) { return null; } - return result.count; } Widget _buildProductQueryTile({ From d4d3aea8f7c60668182157856fb0b29f2f2bea8e Mon Sep 17 00:00:00 2001 From: Pratham Soni Date: Mon, 7 Nov 2022 21:40:52 +0530 Subject: [PATCH 4/4] added CircularProgressIndicator --- .../lib/pages/preferences/user_preferences_account.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart index bbb4e22ea7b5..b7a93069ad4f 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart @@ -424,6 +424,12 @@ class _UserPreferencesPageState extends State { ? FutureBuilder( future: _getMyCount(type), builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.connectionState != ConnectionState.done) { + return const SizedBox( + height: LARGE_SPACE, + width: LARGE_SPACE, + child: CircularProgressIndicator.adaptive()); + } return Text( snapshot.data == null ? '0' : snapshot.data.toString(), );