This commit is contained in:
MohammadTaha Basiri 2023-10-08 12:43:43 +03:30
parent 19c2b54f19
commit e18138aa8d
11 changed files with 203 additions and 117 deletions

View File

@ -19,10 +19,10 @@ import 'package:didvan/views/radar/radar.dart';
import 'package:didvan/views/radar/radar_details/radar_details.dart';
import 'package:didvan/views/radar/radar_details/radar_details_state.dart';
import 'package:didvan/views/radar/radar_state.dart';
import 'package:didvan/views/profile/bookmarks/bookmarks.dart';
import 'package:didvan/views/profile/bookmarks/bookmark_state.dart';
import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmark.dart';
import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart';
import 'package:didvan/views/home/bookmarks/bookmarks.dart';
import 'package:didvan/views/home/bookmarks/bookmark_state.dart';
import 'package:didvan/views/home/bookmarks/filtered_bookmark/filtered_bookmark.dart';
import 'package:didvan/views/home/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart';
import 'package:didvan/views/profile/direct_list/direct_list.dart';
import 'package:didvan/views/profile/direct_list/direct_list_state.dart';
import 'package:didvan/views/profile/general_settings/settings.dart';
@ -71,6 +71,9 @@ class RouteGenerator {
ChangeNotifierProvider<PodcastsState>(
create: (context) => PodcastsState(),
),
ChangeNotifierProvider<BookmarksState>(
create: (context) => BookmarksState(),
),
],
child: const Home(),
),

View File

@ -2,12 +2,11 @@ import 'dart:async';
import 'package:didvan/config/design_config.dart';
import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/view/app_bar_data.dart';
import 'package:didvan/routes/routes.dart';
import 'package:didvan/views/profile/bookmarks/bookmark_state.dart';
import 'package:didvan/views/home/bookmarks/bookmark_state.dart';
import 'package:didvan/views/widgets/menu_item.dart';
import 'package:didvan/views/widgets/overview/multitype.dart';
import 'package:didvan/views/widgets/search_field.dart';
// import 'package:didvan/views/widgets/search_field.dart';
import 'package:didvan/views/widgets/animated_visibility.dart';
import 'package:didvan/views/widgets/didvan/card.dart';
import 'package:didvan/views/widgets/didvan/divider.dart';
@ -28,7 +27,7 @@ class Bookmarks extends StatefulWidget {
class _BookmarksState extends State<Bookmarks> {
final _focuseNode = FocusNode();
Timer? _timer;
// Timer? _timer;
@override
void initState() {
@ -42,10 +41,11 @@ class _BookmarksState extends State<Bookmarks> {
Widget build(BuildContext context) {
final state = context.watch<BookmarksState>();
return DidvanScaffold(
appBarData: AppBarData(
title: 'نشان شده‌ها',
hasBack: true,
),
appBarData: null,
// appBarData: AppBarData(
// title: 'نشان شده‌ها',
// hasBack: true,
// ),
slivers: [
SliverStateHandler<BookmarksState>(
state: state,
@ -60,6 +60,7 @@ class _BookmarksState extends State<Bookmarks> {
item: state.bookmarks[index],
onMarkChanged: state.onMarkChanged,
hasUnmarkConfirmation: true,
enableCaption: true,
);
},
placeholder: MultitypeOverview.placeholder,
@ -74,11 +75,11 @@ class _BookmarksState extends State<Bookmarks> {
),
],
children: [
SearchField(
title: 'نشان شده‌ها',
onChanged: _onChanged,
focusNode: _focuseNode,
),
// SearchField(
// title: 'نشان شده‌ها',
// onChanged: _onChanged,
// focusNode: _focuseNode,
// ),
const SizedBox(height: 16),
AnimatedVisibility(
duration: DesignConfig.lowAnimationDuration,
@ -89,28 +90,35 @@ class _BookmarksState extends State<Bookmarks> {
MenuOption(
onTap: () => _onCategorySelected('radar'),
title: 'تحلیل‌های رادار',
icon: DidvanIcons.radar_regular,
icon: DidvanIcons.radar_solid,
iconSize: 24,
),
const DidvanDivider(),
MenuOption(
onTap: () => _onCategorySelected('news'),
title: 'اخبار',
icon: DidvanIcons.news_regular,
title: 'دنیای فولاد',
icon: DidvanIcons.news_solid,
iconSize: 24,
),
const DidvanDivider(),
MenuOption(
onTap: () => _onCategorySelected('radar'),
title: 'پویش افق',
icon: DidvanIcons.radar_solid,
iconSize: 24,
),
const DidvanDivider(),
MenuOption(
onTap: () => _onCategorySelected('video'),
title: 'ویدئو‌ها',
icon: DidvanIcons.video_regular,
title: 'ویدئو‌کست',
icon: DidvanIcons.video_solid,
iconSize: 24,
),
const DidvanDivider(),
MenuOption(
onTap: () => _onCategorySelected('podcast'),
title: 'پادکست‌ها',
icon: DidvanIcons.podcast_regular,
icon: DidvanIcons.podcast_solid,
iconSize: 24,
),
],
@ -142,15 +150,15 @@ class _BookmarksState extends State<Bookmarks> {
});
}
void _onChanged(String value) {
final state = context.read<BookmarksState>();
if (value.length < 3 && value.isNotEmpty || state.lastSearch == value) {
return;
}
_timer?.cancel();
_timer = Timer(const Duration(seconds: 1), () {
state.search = value;
state.getBookmarks(page: 1);
});
}
// void _onChanged(String value) {
// final state = context.read<BookmarksState>();
// if (value.length < 3 && value.isNotEmpty || state.lastSearch == value) {
// return;
// }
// _timer?.cancel();
// _timer = Timer(const Duration(seconds: 1), () {
// state.search = value;
// state.getBookmarks(page: 1);
// });
// }
}

View File

@ -1,6 +1,6 @@
import 'package:didvan/models/requests/studio.dart';
import 'package:didvan/models/view/app_bar_data.dart';
import 'package:didvan/views/profile/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart';
import 'package:didvan/views/home/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart';
import 'package:didvan/views/widgets/overview/news.dart';
import 'package:didvan/views/widgets/overview/podcast.dart';
import 'package:didvan/views/widgets/overview/radar.dart';

View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class CategoriesPage extends StatelessWidget {
const CategoriesPage({super.key});
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

@ -1,5 +1,7 @@
import 'package:didvan/config/design_config.dart';
import 'package:didvan/services/app_initalizer.dart';
import 'package:didvan/views/home/bookmarks/bookmarks.dart';
import 'package:didvan/views/home/categories/categories_page.dart';
import 'package:didvan/views/home/main/main_page.dart';
import 'package:didvan/views/home/home_state.dart';
import 'package:didvan/views/widgets/logo_app_bar.dart';
@ -42,8 +44,8 @@ class _HomeState extends State<Home> with SingleTickerProviderStateMixin {
children: const [
MainPage(),
Statistic(),
SizedBox(),
SizedBox(),
CategoriesPage(),
Bookmarks(),
],
),
bottomNavigationBar: Consumer<HomeState>(

View File

@ -55,7 +55,8 @@ class ProfilePage extends StatelessWidget {
title: 'ویرایش پروفایل',
icon: DidvanIcons.user_edit_regular,
suffix: context.watch<UserProvider>().user.fullName,
onTap: () => Navigator.of(context).pushNamed(Routes.profile),
onTap: () =>
Navigator.of(context).pushNamed(Routes.editProfile),
),
const DidvanDivider(),
MenuOption(
@ -122,7 +123,7 @@ class ProfilePage extends StatelessWidget {
),
const SizedBox(height: 16),
DidvanText(
'نسخه نرم‌افزار: 2.2.5',
'نسخه نرم‌افزار: 3.0.0',
style: Theme.of(context).textTheme.bodySmall,
),
],

View File

@ -146,7 +146,7 @@ class _DidvanPageViewState extends State<DidvanPageView> {
title: item.title,
image: item.image,
description: 'radar',
type: '',
type: 'radar',
),
),
],

View File

@ -20,6 +20,8 @@ class DidvanTextField extends StatefulWidget {
final bool acceptSpace;
final String? Function(String value)? validator;
final TextInputType? textInputType;
final bool disableBorders;
final bool isSmall;
const DidvanTextField({
Key? key,
this.onChanged,
@ -34,6 +36,8 @@ class DidvanTextField extends StatefulWidget {
this.autoFocus = false,
this.onSubmitted,
this.acceptSpace = true,
this.disableBorders = false,
this.isSmall = false,
}) : super(key: key);
@override
@ -79,7 +83,9 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
decoration: BoxDecoration(
color: _fillColor(),
borderRadius: DesignConfig.lowBorderRadius,
border: Border.all(color: _borderColor()),
border: widget.disableBorders
? null
: Border.all(color: _borderColor()),
),
child: TextFormField(
inputFormatters: <TextInputFormatter>[
@ -96,9 +102,9 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
onChanged: _onChanged,
validator: _validator,
obscuringCharacter: '*',
style: Theme.of(context)
.textTheme
.bodyMedium!
style: (widget.isSmall
? Theme.of(context).textTheme.bodySmall!
: Theme.of(context).textTheme.bodyMedium!)
.copyWith(fontFamily: DesignConfig.fontFamily.padRight(3)),
decoration: InputDecoration(
suffixIcon: _suffixBuilder(),
@ -106,18 +112,20 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
border: InputBorder.none,
hintText: widget.hintText,
errorStyle: const TextStyle(height: 0.01),
hintStyle: Theme.of(context)
.textTheme
.bodyMedium!
hintStyle: (widget.isSmall
? Theme.of(context).textTheme.bodySmall!
: Theme.of(context).textTheme.bodyMedium!)
.copyWith(color: Theme.of(context).colorScheme.hint),
),
),
),
const SizedBox(height: 8),
AnimatedVisibility(
isVisible: _error != null,
duration: DesignConfig.lowAnimationDuration,
child: Row(
child: Column(
children: [
const SizedBox(height: 8),
Row(
children: [
Icon(
DidvanIcons.lightbulb_exclamation_regular,
@ -131,6 +139,8 @@ class _DidvanTextFieldState extends State<DidvanTextField> {
),
],
),
],
),
)
],
);

View File

@ -9,6 +9,7 @@ import 'package:didvan/utils/date_time.dart';
import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart';
import 'package:didvan/views/widgets/didvan/card.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:didvan/views/widgets/didvan/text_field.dart';
import 'package:didvan/views/widgets/shimmer_placeholder.dart';
import 'package:didvan/views/widgets/skeleton_image.dart';
import 'package:flutter/material.dart';
@ -19,12 +20,14 @@ class MultitypeOverview extends StatelessWidget {
final OverviewData item;
final bool hasUnmarkConfirmation;
final void Function(int id, bool value) onMarkChanged;
final bool enableCaption;
const MultitypeOverview({
Key? key,
required this.item,
required this.onMarkChanged,
this.hasUnmarkConfirmation = false,
this.enableCaption = false,
}) : super(key: key);
get _targetPageArgs {
@ -81,14 +84,17 @@ class MultitypeOverview extends StatelessWidget {
},
);
},
child: Row(
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(
children: [
SkeletonImage(imageUrl: item.image, height: 80, width: 80),
Container(
padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
padding:
const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.secondary,
borderRadius: const BorderRadius.horizontal(
@ -152,6 +158,52 @@ class MultitypeOverview extends StatelessWidget {
),
],
),
if (enableCaption)
Column(
children: [
const SizedBox(height: 8),
Row(
children: [
Icon(
Icons.edit_outlined,
size: 16,
color: Theme.of(context).colorScheme.caption,
),
const SizedBox(width: 4),
DidvanText(
'یادداشت‌های من',
style: Theme.of(context).textTheme.labelSmall,
color: Theme.of(context).colorScheme.caption,
),
],
),
Row(
children: [
Flexible(
child: Container(
height: 1,
color: Theme.of(context).colorScheme.primary,
),
),
Flexible(
flex: 2,
child: Container(
height: 1,
color: Theme.of(context).colorScheme.border,
),
)
],
),
DidvanTextField(
disableBorders: true,
hintText: 'برای اضافه کردن یادداشت لمس کنید.',
onChanged: (value) {},
isSmall: true,
),
],
),
],
),
);
}