From 56dfad708fe270c8ffa57d0bc4aba0c751cb1fdf Mon Sep 17 00:00:00 2001 From: Furkan Acar Date: Sun, 12 Feb 2023 13:49:24 +0300 Subject: [PATCH 1/3] demands page filter menu fixed --- assets/translations/ar-SY.json | 1 + assets/translations/en-US.json | 1 + assets/translations/tr-TR.json | 1 + lib/pages/demands_page/demands_page.dart | 128 ++++++++++++++---- .../demands_page/widgets/demand_title.dart | 12 +- .../widgets/demands_page_appbar.dart | 27 ---- .../widgets/generic_grid_list.dart | 46 ++++++- .../widgets/mobile_list_view.dart | 9 +- 8 files changed, 162 insertions(+), 63 deletions(-) diff --git a/assets/translations/ar-SY.json b/assets/translations/ar-SY.json index 3c8dc6f0..3d90777f 100644 --- a/assets/translations/ar-SY.json +++ b/assets/translations/ar-SY.json @@ -71,6 +71,7 @@ "you_can_only_select_10_categories": "En fazla 10 ihtiyaç eklenebilir.", "clear": "Temizle", "help_demands": "Yardım Talepleri", + "help_demands_not_found": "Yardım Talepleri Bulunamadı", "my_support_demand": "Destek Talebim", "create_demand": "Talep Oluştur", "recreate_demand": "Talebi Yeniden Oluştur", diff --git a/assets/translations/en-US.json b/assets/translations/en-US.json index 3c8dc6f0..3d90777f 100644 --- a/assets/translations/en-US.json +++ b/assets/translations/en-US.json @@ -71,6 +71,7 @@ "you_can_only_select_10_categories": "En fazla 10 ihtiyaç eklenebilir.", "clear": "Temizle", "help_demands": "Yardım Talepleri", + "help_demands_not_found": "Yardım Talepleri Bulunamadı", "my_support_demand": "Destek Talebim", "create_demand": "Talep Oluştur", "recreate_demand": "Talebi Yeniden Oluştur", diff --git a/assets/translations/tr-TR.json b/assets/translations/tr-TR.json index 3c8dc6f0..3d90777f 100644 --- a/assets/translations/tr-TR.json +++ b/assets/translations/tr-TR.json @@ -71,6 +71,7 @@ "you_can_only_select_10_categories": "En fazla 10 ihtiyaç eklenebilir.", "clear": "Temizle", "help_demands": "Yardım Talepleri", + "help_demands_not_found": "Yardım Talepleri Bulunamadı", "my_support_demand": "Destek Talebim", "create_demand": "Talep Oluştur", "recreate_demand": "Talebi Yeniden Oluştur", diff --git a/lib/pages/demands_page/demands_page.dart b/lib/pages/demands_page/demands_page.dart index 00118d5d..5c37ffc9 100644 --- a/lib/pages/demands_page/demands_page.dart +++ b/lib/pages/demands_page/demands_page.dart @@ -3,12 +3,14 @@ import 'package:afet_destek/data/repository/demands_repository.dart'; import 'package:afet_destek/gen/translations/locale_keys.g.dart'; import 'package:afet_destek/pages/demands_page/state/demands_cubit.dart'; import 'package:afet_destek/pages/demands_page/widgets/demand_filter_popup.dart'; +import 'package:afet_destek/pages/demands_page/widgets/demand_title.dart'; import 'package:afet_destek/pages/demands_page/widgets/demands_page_appbar.dart'; import 'package:afet_destek/pages/demands_page/widgets/generic_grid_list.dart'; import 'package:afet_destek/pages/demands_page/widgets/list_view_responsive.dart'; import 'package:afet_destek/pages/demands_page/widgets/mobile_list_view.dart'; import 'package:afet_destek/shared/extensions/translation_extension.dart'; import 'package:afet_destek/shared/state/app_cubit.dart'; +import 'package:afet_destek/shared/theme/color_extensions.dart'; import 'package:afet_destek/shared/widgets/loader.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; @@ -68,6 +70,7 @@ class _DemandsPageViewState extends State<_DemandsPageView> { @override Widget build(BuildContext context) { + final size = MediaQuery.of(context).size; final state = context.watch().state; final demands = state.demands; @@ -81,8 +84,70 @@ class _DemandsPageViewState extends State<_DemandsPageView> { isAuthorized: widget.isAuthorized, hasAnyFilters: state.hasAnyFilters, ), - body: demands.isEmpty - ? Center( + body: Column( + mainAxisAlignment: size.width >= 1000 + ? MainAxisAlignment.start + : MainAxisAlignment.center, + children: [ + if (size.width >= 1000 && demands.isEmpty) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 100), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + DemandTitle( + title: LocaleKeys.help_demands_not_found.getStr(), + ), + Builder( + builder: (ctx) { + return TextButton.icon( + onPressed: () => Scaffold.of(ctx).openEndDrawer(), + icon: Stack( + children: [ + Icon( + Icons.filter_list, + color: context.appColors.black, + ), + if (state.hasAnyFilters) ...[ + Positioned( + top: 0, + right: 0, + child: Container( + width: 8, + height: 8, + decoration: BoxDecoration( + color: context.appColors.mainRed, + shape: BoxShape.circle, + ), + ), + ), + ], + ], + ), + label: Text( + LocaleKeys.filter.getStr(), + style: Theme.of(context) + .textTheme + .headlineSmall + ?.copyWith( + color: context.appColors.black, + ), + ), + ); + }, + ), + ], + ), + SizedBox( + height: size.height / 2 - 100, + ), + ], + ), + ), + if (demands.isEmpty) + Center( child: Text( state.hasAnyFilters ? LocaleKeys.can_not_find_result_try_clearing_filters @@ -91,36 +156,41 @@ class _DemandsPageViewState extends State<_DemandsPageView> { textAlign: TextAlign.center, ), ) - : Center( - child: ListViewResponsive( - desktop: GenericListView( - scrollController: _scrollController, - demands: demands, - state: state, - maxWidth: 1450, - crossAxisCount: 3, - ), - mobile: MobileList( - scrollController: _scrollController, - demands: demands, - state: state, - ), - tablet: GenericListView( - scrollController: _scrollController, - demands: demands, - state: state, - maxWidth: 1000, - crossAxisCount: 2, - ), - largeDesktop: GenericListView( - scrollController: _scrollController, - demands: demands, - state: state, - maxWidth: 2200, - crossAxisCount: 4, + else + Expanded( + child: Center( + child: ListViewResponsive( + desktop: GenericListView( + scrollController: _scrollController, + demands: demands, + state: state, + maxWidth: 1450, + crossAxisCount: 3, + ), + mobile: MobileList( + scrollController: _scrollController, + demands: demands, + state: state, + ), + tablet: GenericListView( + scrollController: _scrollController, + demands: demands, + state: state, + maxWidth: 1000, + crossAxisCount: 2, + ), + largeDesktop: GenericListView( + scrollController: _scrollController, + demands: demands, + state: state, + maxWidth: 2200, + crossAxisCount: 4, + ), ), ), ), + ], + ), endDrawer: DemandFilterDrawer( demandsCubit: context.read(), ), diff --git a/lib/pages/demands_page/widgets/demand_title.dart b/lib/pages/demands_page/widgets/demand_title.dart index 0210e602..4538391e 100644 --- a/lib/pages/demands_page/widgets/demand_title.dart +++ b/lib/pages/demands_page/widgets/demand_title.dart @@ -1,19 +1,21 @@ -import 'package:afet_destek/gen/translations/locale_keys.g.dart'; -import 'package:afet_destek/shared/extensions/translation_extension.dart'; +import 'package:afet_destek/shared/theme/color_extensions.dart'; import 'package:flutter/material.dart'; class DemandTitle extends StatelessWidget { const DemandTitle({ super.key, + required this.title, }); - + final String title; @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(15), child: Text( - LocaleKeys.help_demands.getStr(), - style: Theme.of(context).textTheme.displaySmall, + title, + style: Theme.of(context).textTheme.headlineSmall?.copyWith( + color: context.appColors.black, + ), ), ); } diff --git a/lib/pages/demands_page/widgets/demands_page_appbar.dart b/lib/pages/demands_page/widgets/demands_page_appbar.dart index d1220d6b..d00a7a21 100644 --- a/lib/pages/demands_page/widgets/demands_page_appbar.dart +++ b/lib/pages/demands_page/widgets/demands_page_appbar.dart @@ -132,33 +132,6 @@ class DemandPageAppBar extends StatelessWidget implements PreferredSizeWidget { ), ), const SizedBox(width: 12), - Builder( - builder: (ctx) { - return IconButton( - icon: Stack( - children: [ - const Icon(Icons.filter_list), - if (hasAnyFilters) ...[ - Positioned( - top: 0, - right: 0, - child: Container( - width: 8, - height: 8, - decoration: BoxDecoration( - color: context.appColors.mainRed, - shape: BoxShape.circle, - ), - ), - ), - ], - ], - ), - onPressed: () => Scaffold.of(ctx).openEndDrawer(), - ); - }, - ), - const SizedBox(width: 8), ], ), ); diff --git a/lib/pages/demands_page/widgets/generic_grid_list.dart b/lib/pages/demands_page/widgets/generic_grid_list.dart index 37151f94..03f3c2f8 100644 --- a/lib/pages/demands_page/widgets/generic_grid_list.dart +++ b/lib/pages/demands_page/widgets/generic_grid_list.dart @@ -1,7 +1,10 @@ import 'package:afet_destek/data/models/demand.dart'; +import 'package:afet_destek/gen/translations/locale_keys.g.dart'; import 'package:afet_destek/pages/demands_page/state/demands_state.dart'; import 'package:afet_destek/pages/demands_page/widgets/demand_card.dart'; import 'package:afet_destek/pages/demands_page/widgets/demand_title.dart'; +import 'package:afet_destek/shared/extensions/translation_extension.dart'; +import 'package:afet_destek/shared/theme/color_extensions.dart'; import 'package:afet_destek/shared/widgets/app_info_banner.dart'; import 'package:afet_destek/shared/widgets/loader.dart'; import 'package:flutter/material.dart'; @@ -33,7 +36,48 @@ class GenericListView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const AppInfoBanner(), - const DemandTitle(), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + DemandTitle(title: LocaleKeys.help_demands.getStr()), + Builder( + builder: (ctx) { + return TextButton.icon( + onPressed: () => Scaffold.of(ctx).openEndDrawer(), + icon: Stack( + children: [ + Icon( + Icons.filter_list, + color: context.appColors.black, + ), + if (state.hasAnyFilters) ...[ + Positioned( + top: 0, + right: 0, + child: Container( + width: 8, + height: 8, + decoration: BoxDecoration( + color: context.appColors.mainRed, + shape: BoxShape.circle, + ), + ), + ), + ], + ], + ), + label: Text( + LocaleKeys.filter.getStr(), + style: + Theme.of(context).textTheme.headlineSmall?.copyWith( + color: context.appColors.black, + ), + ), + ); + }, + ), + ], + ), Expanded( child: MasonryGridView.builder( // crossAxisCount: crossAxisCount, diff --git a/lib/pages/demands_page/widgets/mobile_list_view.dart b/lib/pages/demands_page/widgets/mobile_list_view.dart index ca7ef568..069e8ab5 100644 --- a/lib/pages/demands_page/widgets/mobile_list_view.dart +++ b/lib/pages/demands_page/widgets/mobile_list_view.dart @@ -1,8 +1,10 @@ import 'package:afet_destek/data/models/demand.dart'; +import 'package:afet_destek/gen/translations/locale_keys.g.dart'; import 'package:afet_destek/pages/demands_page/state/demands_cubit.dart'; import 'package:afet_destek/pages/demands_page/state/demands_state.dart'; import 'package:afet_destek/pages/demands_page/widgets/demand_card.dart'; import 'package:afet_destek/pages/demands_page/widgets/demand_title.dart'; +import 'package:afet_destek/shared/extensions/translation_extension.dart'; import 'package:afet_destek/shared/theme/color_extensions.dart'; import 'package:afet_destek/shared/widgets/app_info_banner.dart'; import 'package:afet_destek/shared/widgets/loader.dart'; @@ -37,7 +39,12 @@ class MobileList extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (index == 0) ...[const AppInfoBanner(), const DemandTitle()], + if (index == 0) ...[ + const AppInfoBanner(), + DemandTitle( + title: LocaleKeys.help_demands.getStr(), + ) + ], Padding( padding: const EdgeInsets.symmetric( horizontal: 16, From cbd7d364ce0683dce4b621502f5ee1b5420c8520 Mon Sep 17 00:00:00 2001 From: Furkan Acar Date: Sun, 12 Feb 2023 14:14:59 +0300 Subject: [PATCH 2/3] kvkk page page mobile webview added --- lib/pages/kvkk_page/kvkk_page.dart | 36 ++++++++++++++++++++++++++---- pubspec.lock | 32 ++++++++++++++++++++++++++ pubspec.yaml | 1 + 3 files changed, 65 insertions(+), 4 deletions(-) diff --git a/lib/pages/kvkk_page/kvkk_page.dart b/lib/pages/kvkk_page/kvkk_page.dart index 403422c3..752cbcb0 100644 --- a/lib/pages/kvkk_page/kvkk_page.dart +++ b/lib/pages/kvkk_page/kvkk_page.dart @@ -7,6 +7,7 @@ import 'package:afet_destek/shared/widgets/responsive_app_bar.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:webview_flutter/webview_flutter.dart'; class TermsPage extends StatefulWidget { const TermsPage._({required this.title, required this.body}); @@ -17,10 +18,12 @@ class TermsPage extends StatefulWidget { required String title, required String body, }) async { - setUiIframeParameter( - key: 'browser_page', - id: 'browser_url', - ); + if (kIsWeb) { + setUiIframeParameter( + key: 'browser_page', + id: 'browser_url', + ); + } await Navigator.of(context).push( MaterialPageRoute( builder: (context) => TermsPage._(body: body, title: title), @@ -33,6 +36,25 @@ class TermsPage extends StatefulWidget { } class _TermsPageState extends State { + late final WebViewController controller; + + @override + void initState() { + super.initState(); + if (!kIsWeb) { + controller = WebViewController() + ..loadRequest(Uri.parse('https://afetdestekkvvk.web.app/')); + } + } + + @override + void dispose() { + if (!kIsWeb) { + controller.clearLocalStorage(); + } + super.dispose(); + } + @override Widget build(BuildContext context) { final size = MediaQuery.of(context).size; @@ -80,6 +102,12 @@ class _TermsPageState extends State { }, ), ) + else + Expanded( + child: WebViewWidget( + controller: controller, + ), + ), ], ), ), diff --git a/pubspec.lock b/pubspec.lock index b77d8b89..8007c732 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1282,6 +1282,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + sha256: f7ec234830f86d0ef2bd664e8460b0038b8c1a83ff076035cad74ac70273753c + url: "https://pub.dev" + source: hosted + version: "4.0.2" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: "5f49a6e5fc59e21fcec5e1bbcd401afbee9792a24a4f3d9cef9b5bb0cd1e3767" + url: "https://pub.dev" + source: hosted + version: "3.2.4" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: "8b2262dda5d26eabc600a7282a8c16a9473a0c765526afb0ffc33eef912f7968" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: "92e7e7fa468f1df597fb9d37bcf1f303175cbe147c4dbdf06ecc323d950116eb" + url: "https://pub.dev" + source: hosted + version: "3.0.5" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index ad52528e..c93cc7fd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,6 +42,7 @@ dependencies: universal_html: 2.0.8 url_launcher: 6.1.9 url_strategy: 0.2.0 + webview_flutter: 4.0.2 dev_dependencies: build_runner: 2.3.3 From df37f7bd0904fd26a1f4b41f5a5f7828a128d17f Mon Sep 17 00:00:00 2001 From: Furkan Acar Date: Sun, 12 Feb 2023 14:50:42 +0300 Subject: [PATCH 3/3] fixed button added to demand page --- assets/translations/ar-SY.json | 1 + assets/translations/en-US.json | 1 + assets/translations/tr-TR.json | 1 + lib/pages/demands_page/demands_page.dart | 28 +++++++++++++++---- .../widgets/demand_filter_popup.dart | 15 +++++----- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/assets/translations/ar-SY.json b/assets/translations/ar-SY.json index 3d90777f..3a2f334d 100644 --- a/assets/translations/ar-SY.json +++ b/assets/translations/ar-SY.json @@ -70,6 +70,7 @@ "demands_type": "İhtiyaç türü ({})", "you_can_only_select_10_categories": "En fazla 10 ihtiyaç eklenebilir.", "clear": "Temizle", + "clear_filters": "Filtereleri Temizle", "help_demands": "Yardım Talepleri", "help_demands_not_found": "Yardım Talepleri Bulunamadı", "my_support_demand": "Destek Talebim", diff --git a/assets/translations/en-US.json b/assets/translations/en-US.json index 3d90777f..3a2f334d 100644 --- a/assets/translations/en-US.json +++ b/assets/translations/en-US.json @@ -70,6 +70,7 @@ "demands_type": "İhtiyaç türü ({})", "you_can_only_select_10_categories": "En fazla 10 ihtiyaç eklenebilir.", "clear": "Temizle", + "clear_filters": "Filtereleri Temizle", "help_demands": "Yardım Talepleri", "help_demands_not_found": "Yardım Talepleri Bulunamadı", "my_support_demand": "Destek Talebim", diff --git a/assets/translations/tr-TR.json b/assets/translations/tr-TR.json index 3d90777f..3a2f334d 100644 --- a/assets/translations/tr-TR.json +++ b/assets/translations/tr-TR.json @@ -70,6 +70,7 @@ "demands_type": "İhtiyaç türü ({})", "you_can_only_select_10_categories": "En fazla 10 ihtiyaç eklenebilir.", "clear": "Temizle", + "clear_filters": "Filtereleri Temizle", "help_demands": "Yardım Talepleri", "help_demands_not_found": "Yardım Talepleri Bulunamadı", "my_support_demand": "Destek Talebim", diff --git a/lib/pages/demands_page/demands_page.dart b/lib/pages/demands_page/demands_page.dart index 5c37ffc9..167dad2c 100644 --- a/lib/pages/demands_page/demands_page.dart +++ b/lib/pages/demands_page/demands_page.dart @@ -148,12 +148,28 @@ class _DemandsPageViewState extends State<_DemandsPageView> { ), if (demands.isEmpty) Center( - child: Text( - state.hasAnyFilters - ? LocaleKeys.can_not_find_result_try_clearing_filters - .getStr() - : LocaleKeys.no_demand_yet.getStr(), - textAlign: TextAlign.center, + child: Column( + children: [ + Text( + state.hasAnyFilters + ? LocaleKeys.can_not_find_result_try_clearing_filters + .getStr() + : LocaleKeys.no_demand_yet.getStr(), + textAlign: TextAlign.center, + ), + const SizedBox( + height: 20, + ), + ElevatedButton( + onPressed: () { + context.read().setFilters( + categoryIds: null, + filterRadiusKm: null, + ); + }, + child: Text(LocaleKeys.clear_filters.getStr()), + ) + ], ), ) else diff --git a/lib/pages/demands_page/widgets/demand_filter_popup.dart b/lib/pages/demands_page/widgets/demand_filter_popup.dart index 46e72235..aabb2d8d 100644 --- a/lib/pages/demands_page/widgets/demand_filter_popup.dart +++ b/lib/pages/demands_page/widgets/demand_filter_popup.dart @@ -231,15 +231,14 @@ class _DemandFilterDrawerState extends State { ElevatedButton getElevatedButton({required bool isFilterButton}) { return ElevatedButton( onPressed: isFilterButton ? _onSave : _onClear, - style: ButtonStyle( - backgroundColor: MaterialStatePropertyAll( - isFilterButton ? context.appColors.mainRed : context.appColors.white, - ), - shape: MaterialStatePropertyAll( - RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), + style: ElevatedButton.styleFrom( + backgroundColor: isFilterButton + ? context.appColors.mainRed + : context.appColors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), ), + padding: EdgeInsets.zero, ), child: Text( isFilterButton ? LocaleKeys.filter.getStr() : LocaleKeys.clear.getStr(),