diff --git a/.fandogh/fandogh.yaml b/.fandogh/fandogh.yaml index 05b34a4..1d5bac1 100644 --- a/.fandogh/fandogh.yaml +++ b/.fandogh/fandogh.yaml @@ -3,11 +3,11 @@ name: app-test spec: allow_http: false disable_default_domains: true - image: app-test:0.0.4 + image: app:1.1.1 image_pull_policy: IfNotPresent path: / replicas: 1 resources: - memory: 50Mi + memory: 150Mi domains: - - name: dev.didvan.app \ No newline at end of file + - name: web.didvan.app \ No newline at end of file diff --git a/lib/services/network/request_helper.dart b/lib/services/network/request_helper.dart index 5e28117..9ae260c 100644 --- a/lib/services/network/request_helper.dart +++ b/lib/services/network/request_helper.dart @@ -1,6 +1,5 @@ import 'package:didvan/models/requests/news.dart'; import 'package:didvan/models/requests/radar.dart'; -import 'package:didvan/models/requests/studio.dart'; class RequestHelper { static const String baseUrl = 'https://api.didvan.app'; @@ -90,30 +89,6 @@ class RequestHelper { MapEntry('search', args.search), ]); - static String markStudioItem(int id) => _baseStudioUrl + '/$id/mark'; - static String studioItemComments(int id) => _baseStudioUrl + '/$id/comments'; - static String addStudioItemComment(int id) => - _baseStudioUrl + '/$id/comments/add'; - static String feedbackStudioItemComment(int radarId, int id) => - _baseStudioUrl + '/$radarId/comments/$id/feedback'; - static String studioItemDetails(int id, StudioRequestArgs args) => - _baseStudioUrl + - '/$id' + - _urlConcatGenerator([ - MapEntry('page', args.page.toString()), - MapEntry('search', args.search), - MapEntry('order', args.order), - MapEntry('type', args.type), - ]); - static String studioItemOverviews({required StudioRequestArgs args}) => - _baseStudioUrl + - _urlConcatGenerator([ - MapEntry('page', args.page.toString()), - MapEntry('search', args.search), - MapEntry('order', args.order), - MapEntry('type', args.type), - ]); - static String _urlConcatGenerator(List> additions) { String result = ''; additions.removeWhere((element) => element.value == null); diff --git a/lib/views/home/settings/profile/profile.dart b/lib/views/home/settings/profile/profile.dart index 071d6ac..5b666e7 100644 --- a/lib/views/home/settings/profile/profile.dart +++ b/lib/views/home/settings/profile/profile.dart @@ -100,13 +100,15 @@ class _ProfileState extends State { email = value; }, initialValue: state.user.email, - validator: (value) async { + validator: (value) { + if (value.isEmpty) return null; bool emailValid = RegExp( r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+") .hasMatch(value); if (!emailValid) { return 'ایمیل وارد شده معتبر نمی‌باشد'; } + return null; }, ), // const SizedBox(height: 16), diff --git a/lib/views/home/studio/studio.dart b/lib/views/home/studio/studio.dart index 08c8e37..5f5f4ca 100644 --- a/lib/views/home/studio/studio.dart +++ b/lib/views/home/studio/studio.dart @@ -1,130 +1,26 @@ -import 'package:didvan/constants/app_icons.dart'; -import 'package:didvan/models/view/action_sheet_data.dart'; -import 'package:didvan/utils/action_sheet.dart'; -import 'package:didvan/views/home/studio/studio_state.dart'; -import 'package:didvan/views/home/studio/widgets/slider.dart'; -import 'package:didvan/views/home/studio/widgets/tab_bar.dart'; +import 'package:didvan/config/theme_data.dart'; +import 'package:didvan/constants/assets.dart'; import 'package:didvan/views/home/widgets/logo_app_bar.dart'; -import 'package:didvan/views/home/widgets/search_field.dart'; -import 'package:didvan/views/widgets/didvan/divider.dart'; -import 'package:didvan/views/widgets/didvan/icon_button.dart'; -import 'package:didvan/views/widgets/didvan/radial_button.dart'; -import 'package:didvan/views/widgets/item_title.dart'; +import 'package:didvan/views/widgets/state_handlers/empty_state.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -class Studio extends StatefulWidget { +class Studio extends StatelessWidget { const Studio({Key? key}) : super(key: key); - @override - State createState() => _StudioState(); -} - -class _StudioState extends State { - final FocusNode _focusNode = FocusNode(); - @override Widget build(BuildContext context) { - return CustomScrollView( - slivers: [ - SliverToBoxAdapter( - child: Row( - children: [ - const Expanded(child: LogoAppBar(type: 'studio')), - Padding( - padding: - EdgeInsets.only(top: MediaQuery.of(context).padding.top), - child: DidvanIconButton( - icon: DidvanIcons.bookmark_regular, - onPressed: () {}, - ), - ), - ], - ), - ), - const SliverToBoxAdapter( - child: StudioTabBar(), - ), - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.all(16.0), - child: SearchField( - title: 'جستجو در استودیو', - onChanged: (value) {}, - focusNode: _focusNode, - ), - ), - ), - const SliverToBoxAdapter( - child: StudioSlider(), - ), - const SliverPadding( - padding: EdgeInsets.symmetric(horizontal: 16), - sliver: SliverToBoxAdapter( - child: DidvanDivider( - verticalPadding: 0, - ), - ), - ), - SliverPadding( - padding: const EdgeInsets.symmetric(horizontal: 16), - sliver: SliverToBoxAdapter( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const ItemTitle(title: 'تازه‌ترین‌ها'), - DidvanIconButton( - gestureSize: 36, - icon: DidvanIcons.sort_regular, - onPressed: _showSortDialog, - ), - ], - ), + return Column( + children: [ + const LogoAppBar(), + Expanded( + child: EmptyState( + asset: Assets.emptyStudio, + title: 'استودیو آینده', + subtitle: 'به زودی...', + titleColor: Theme.of(context).colorScheme.title, ), ), ], ); } - - void _showSortDialog() { - final state = context.read(); - ActionSheetUtils.showBottomSheet( - data: ActionSheetData( - content: StatefulBuilder( - builder: (context, setState) => Column( - children: [ - DidvanRadialButton( - title: 'جدیدترین‌ها', - onSelected: () => setState( - () => state.selectedSortTypeIndex = 0, - ), - value: state.selectedSortTypeIndex == 0, - ), - const SizedBox(height: 24), - DidvanRadialButton( - title: 'پربازدیدترین‌ها', - onSelected: () => setState( - () => state.selectedSortTypeIndex = 1, - ), - value: state.selectedSortTypeIndex == 1, - ), - const SizedBox(height: 24), - DidvanRadialButton( - title: 'پربحث‌ترین‌ها', - onSelected: () => setState( - () => state.selectedSortTypeIndex = 2, - ), - value: state.selectedSortTypeIndex == 2, - ), - ], - ), - ), - title: 'مرتب‌‌سازی', - titleIcon: DidvanIcons.sort_regular, - hasDismissButton: false, - confrimTitle: 'مرتب سازی', - onConfirmed: () {}, - ), - ); - } } diff --git a/lib/views/widgets/didvan/text_field.dart b/lib/views/widgets/didvan/text_field.dart index 065b6d7..5508be8 100644 --- a/lib/views/widgets/didvan/text_field.dart +++ b/lib/views/widgets/didvan/text_field.dart @@ -18,7 +18,7 @@ class DidvanTextField extends StatefulWidget { final dynamic initialValue; final bool obsecureText; final bool acceptSpace; - final Function(String value)? validator; + final String? Function(String value)? validator; final TextInputType? textInputType; const DidvanTextField({ Key? key, diff --git a/pubspec.yaml b/pubspec.yaml index 8b76c42..8c847b0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.5+5 +version: 1.1.0+1 environment: sdk: ">=2.12.0 <3.0.0"