bug fixes

This commit is contained in:
MohammadTaha Basiri 2022-04-17 13:37:57 +04:30
parent 27e44fb764
commit e865f15f70
6 changed files with 121 additions and 83 deletions

View File

@ -9,12 +9,18 @@ class ServerDataProvider {
await _getDirectTypes(); await _getDirectTypes();
} }
static int labelToTypeId(String label) => label.contains('پشتیبانی') static int labelToTypeId(String label) {
? 7 if (label.contains('پشتیبانی اپلیکیشن')) {
: directTypes return 8;
} else if (label.contains('پشتیبانی')) {
return 7;
} else {
return directTypes
.firstWhereOrNull((element) => element.value.contains(label)) .firstWhereOrNull((element) => element.value.contains(label))
?.key ?? ?.key ??
7; 7;
}
}
static Future<void> _getDirectTypes() async { static Future<void> _getDirectTypes() async {
final service = RequestService(RequestHelper.directTypes); final service = RequestService(RequestHelper.directTypes);

View File

@ -14,7 +14,8 @@ class MediaService {
static StudioDetailsData? currentPodcast; static StudioDetailsData? currentPodcast;
static StudioRequestArgs? podcastPlaylistArgs; static StudioRequestArgs? podcastPlaylistArgs;
static Duration? get duration => audioPlayer.current.value?.audio.duration; static Duration? get duration =>
audioPlayer.current.valueOrNull?.audio.duration;
static Future<void> handleAudioPlayback({ static Future<void> handleAudioPlayback({
required dynamic audioSource, required dynamic audioSource,

View File

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/enums.dart';
import 'package:didvan/models/requests/news.dart'; import 'package:didvan/models/requests/news.dart';
import 'package:didvan/models/view/action_sheet_data.dart'; import 'package:didvan/models/view/action_sheet_data.dart';
import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/utils/action_sheet.dart';
@ -10,7 +11,8 @@ import 'package:didvan/views/home/widgets/logo_app_bar.dart';
import 'package:didvan/views/home/widgets/overview/news.dart'; import 'package:didvan/views/home/widgets/overview/news.dart';
import 'package:didvan/views/home/widgets/search_field.dart'; import 'package:didvan/views/home/widgets/search_field.dart';
import 'package:didvan/views/widgets/item_title.dart'; import 'package:didvan/views/widgets/item_title.dart';
import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; import 'package:didvan/views/widgets/state_handlers/empty_result.dart';
import 'package:didvan/views/widgets/state_handlers/sliver_state_handler.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -32,23 +34,14 @@ class _NewsState extends State<News> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<NewsState>( final state = context.watch<NewsState>();
builder: (context, state, child) => StateHandler<NewsState>( return CustomScrollView(
onRetry: () => state.getNews(page: state.page), slivers: [
state: state, const SliverToBoxAdapter(child: LogoAppBar()),
builder: (context, state) => ListView.builder( if (state.appState != AppState.failed)
cacheExtent: 1500, SliverPadding(
itemBuilder: (context, index) { padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
if (index == 0) { sliver: SliverToBoxAdapter(
return const LogoAppBar();
}
if (index == 1) {
return Padding(
padding: const EdgeInsets.only(
left: 16,
right: 16,
bottom: 16,
),
child: SearchField( child: SearchField(
focusNode: _focusNode, focusNode: _focusNode,
title: 'اخبار', title: 'اخبار',
@ -56,9 +49,13 @@ class _NewsState extends State<News> {
onFilterButtonPressed: _showFilterBottomSheet, onFilterButtonPressed: _showFilterBottomSheet,
isFiltered: state.isFiltering, isFiltered: state.isFiltering,
), ),
); ),
} ),
index -= 2; SliverStateHandler<NewsState>(
centerEmptyState: false,
onRetry: () => state.getNews(page: state.page),
state: state,
builder: (context, state, index) {
index += 2; index += 2;
if (index % 15 == 0 && state.lastPage != state.page) { if (index % 15 == 0 && state.lastPage != state.page) {
state.getNews(page: state.page + 1); state.getNews(page: state.page + 1);
@ -68,13 +65,7 @@ class _NewsState extends State<News> {
return NewsOverview.placeholder; return NewsOverview.placeholder;
} }
final news = state.news[index]; final news = state.news[index];
return Padding( return NewsOverview(
padding: const EdgeInsets.only(
left: 16,
right: 16,
bottom: 16,
),
child: NewsOverview(
news: news, news: news,
onMarkChanged: state.onMarkChanged, onMarkChanged: state.onMarkChanged,
newsRequestArgs: NewsRequestArgs( newsRequestArgs: NewsRequestArgs(
@ -83,11 +74,18 @@ class _NewsState extends State<News> {
startDate: state.startDate, startDate: state.startDate,
search: state.search, search: state.search,
), ),
),
); );
}, },
itemCount: state.news.length + 2, enableEmptyState: state.news.isEmpty,
)), emptyState: EmptyResult(
onNewSearch: () => _focusNode.requestFocus(),
),
childCount:
state.news.length + (state.lastPage == state.page ? 0 : 3),
itemPadding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
placeholder: NewsOverview.placeholder,
),
],
); );
} }

View File

@ -94,7 +94,10 @@ class Settings extends StatelessWidget {
icon: DidvanIcons.support_regular, icon: DidvanIcons.support_regular,
title: 'پیام به پشتیبانی', title: 'پیام به پشتیبانی',
onTap: () { onTap: () {
launch('mailto:info@didvan.app'); Navigator.of(context).pushNamed(
Routes.direct,
arguments: {'type': 'پشتیبانی اپلیکیشن'},
);
}, },
), ),
const DidvanDivider(), const DidvanDivider(),

View File

@ -108,7 +108,9 @@ class StatisticOverview extends StatelessWidget {
); );
} }
static Widget get placeHolder => DidvanCard( static Widget get placeHolder => Column(
children: [
DidvanCard(
child: Column( child: Column(
children: [ children: [
const SizedBox(height: 4), const SizedBox(height: 4),
@ -131,5 +133,32 @@ class StatisticOverview extends StatelessWidget {
), ),
], ],
), ),
),
const SizedBox(height: 20),
DidvanCard(
child: Column(
children: [
const SizedBox(height: 4),
Row(
children: const [
ShimmerPlaceholder(width: 80, height: 16),
Spacer(),
ShimmerPlaceholder(width: 50, height: 14),
SizedBox(width: 8),
ShimmerPlaceholder(width: 50, height: 16),
],
),
const SizedBox(height: 16),
Row(
children: const [
ShimmerPlaceholder(width: 150, height: 12),
Spacer(),
ShimmerPlaceholder(width: 80, height: 12),
],
),
],
),
),
],
); );
} }

View File

@ -13,6 +13,7 @@ class SliverStateHandler<T extends CoreProvier> extends SliverList {
final Widget? placeholder; final Widget? placeholder;
final EdgeInsets? itemPadding; final EdgeInsets? itemPadding;
final bool centerEmptyState; final bool centerEmptyState;
final bool hasConstraints;
SliverStateHandler({ SliverStateHandler({
Key? key, Key? key,
required this.state, required this.state,
@ -24,14 +25,16 @@ class SliverStateHandler<T extends CoreProvier> extends SliverList {
this.emptyState, this.emptyState,
this.enableEmptyState = false, this.enableEmptyState = false,
this.centerEmptyState = true, this.centerEmptyState = true,
this.hasConstraints = false,
}) : super( }) : super(
key: key, key: key,
delegate: SliverChildBuilderDelegate( delegate: SliverChildBuilderDelegate(
(context, index) { (context, index) {
final deviceHight = MediaQuery.of(context).size.height;
if (state.appState == AppState.failed) { if (state.appState == AppState.failed) {
return Padding( return Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: centerEmptyState ? 120 : 20, top: centerEmptyState ? deviceHight / 4 : deviceHight / 8,
bottom: 20, bottom: 20,
), ),
child: EmptyConnection(onRetry: onRetry), child: EmptyConnection(onRetry: onRetry),
@ -40,9 +43,7 @@ class SliverStateHandler<T extends CoreProvier> extends SliverList {
if (enableEmptyState && state.appState == AppState.idle) { if (enableEmptyState && state.appState == AppState.idle) {
return Padding( return Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
top: centerEmptyState top: centerEmptyState ? deviceHight / 4 : deviceHight / 8,
? MediaQuery.of(context).size.height / 4
: 20,
bottom: 20, bottom: 20,
), ),
child: emptyState, child: emptyState,