This commit is contained in:
MohammadTaha Basiri 2022-04-28 13:48:32 +00:00
parent b47badf3cf
commit 93bac3a349
9 changed files with 146 additions and 103 deletions

View File

@ -37,6 +37,14 @@ class UserProvider extends CoreProvier {
} }
if (service.isSuccess) { if (service.isSuccess) {
user = User.fromJson(service.result['user']); user = User.fromJson(service.result['user']);
await StorageService.setValue(
key: 'notificationTimeRangeStart',
value: service.result['user']['start'],
);
await StorageService.setValue(
key: 'notificationTimeRangeEnd',
value: service.result['user']['end'],
);
AppInitializer.initializeFirebase().then((_) => _registerFirebaseToken()); AppInitializer.initializeFirebase().then((_) => _registerFirebaseToken());
_registerFirebaseToken(); _registerFirebaseToken();
return true; return true;

View File

@ -3,7 +3,7 @@ import 'package:didvan/models/requests/radar.dart';
import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/models/requests/studio.dart';
class RequestHelper { class RequestHelper {
static const String baseUrl = 'https://api.didvan.app'; static const String baseUrl = 'https://test.api.didvan.app';
static const String _baseUserUrl = baseUrl + '/user'; static const String _baseUserUrl = baseUrl + '/user';
static const String _baseRadarUrl = baseUrl + '/radar'; static const String _baseRadarUrl = baseUrl + '/radar';
static const String _baseNewsUrl = baseUrl + '/news'; static const String _baseNewsUrl = baseUrl + '/news';

View File

@ -38,12 +38,7 @@ class _NewsDetailsState extends State<NewsDetails> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
body: Consumer<NewsDetailsState>( body: Consumer<NewsDetailsState>(
builder: (context, state, child) => WillPopScope( builder: (context, state, child) => StateHandler<NewsDetailsState>(
onWillPop: () async {
state.handleTracking(sendRequest: true);
return true;
},
child: StateHandler<NewsDetailsState>(
onRetry: () => state.getNewsDetails(state.currentNews.id), onRetry: () => state.getNewsDetails(state.currentNews.id),
state: state, state: state,
builder: (context, state) => Stack( builder: (context, state) => Stack(
@ -82,7 +77,6 @@ class _NewsDetailsState extends State<NewsDetails> {
), ),
), ),
), ),
),
); );
} }

View File

@ -32,7 +32,7 @@ class NewsDetailsState extends CoreProvier {
} }
final service = RequestService(RequestHelper.newsDetails(id, args)); final service = RequestService(RequestHelper.newsDetails(id, args));
await service.httpGet(); await service.httpGet();
handleTracking(sendRequest: isForward != null); _handleTracking(sendRequest: isForward != null);
if (service.isSuccess) { if (service.isSuccess) {
final result = service.result; final result = service.result;
final newsItem = NewsDetailsData.fromJson(result['news']); final newsItem = NewsDetailsData.fromJson(result['news']);
@ -88,7 +88,7 @@ class NewsDetailsState extends CoreProvier {
notifyListeners(); notifyListeners();
} }
Future<void> handleTracking({bool sendRequest = true}) async { Future<void> _handleTracking({bool sendRequest = true}) async {
if (!sendRequest) { if (!sendRequest) {
_trackingTimerCounter = 0; _trackingTimerCounter = 0;
_trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { _trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
@ -103,6 +103,7 @@ class NewsDetailsState extends CoreProvier {
}, },
); );
service.put(); service.put();
_trackingTimerCounter = 0;
} }
Future<void> getRelatedContents() async { Future<void> getRelatedContents() async {
@ -129,6 +130,7 @@ class NewsDetailsState extends CoreProvier {
@override @override
void dispose() { void dispose() {
_handleTracking(sendRequest: true);
_trackingTimer.cancel(); _trackingTimer.cancel();
super.dispose(); super.dispose();
} }

View File

@ -38,12 +38,7 @@ class _RadarDetailsState extends State<RadarDetails> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
body: Consumer<RadarDetailsState>( body: Consumer<RadarDetailsState>(
builder: (context, state, child) => WillPopScope( builder: (context, state, child) => StateHandler<RadarDetailsState>(
onWillPop: () async {
state.handleTracking(sendRequest: true);
return true;
},
child: StateHandler<RadarDetailsState>(
onRetry: () => state.getRadarDetails(widget.pageData['id']), onRetry: () => state.getRadarDetails(widget.pageData['id']),
state: state, state: state,
builder: (context, state) => Stack( builder: (context, state) => Stack(
@ -89,7 +84,6 @@ class _RadarDetailsState extends State<RadarDetails> {
), ),
), ),
), ),
),
); );
} }

View File

@ -38,7 +38,7 @@ class RadarDetailsState extends CoreProvier {
} }
final service = RequestService(RequestHelper.radarDetails(id, args)); final service = RequestService(RequestHelper.radarDetails(id, args));
await service.httpGet(); await service.httpGet();
handleTracking(sendRequest: isForward != null); _handleTracking(sendRequest: isForward != null);
if (service.isSuccess) { if (service.isSuccess) {
final result = service.result; final result = service.result;
final radar = RadarDetailsData.fromJson(result['radar']); final radar = RadarDetailsData.fromJson(result['radar']);
@ -121,7 +121,7 @@ class RadarDetailsState extends CoreProvier {
notifyListeners(); notifyListeners();
} }
Future<void> handleTracking({bool sendRequest = true}) async { Future<void> _handleTracking({bool sendRequest = true}) async {
if (!sendRequest) { if (!sendRequest) {
_trackingTimerCounter = 0; _trackingTimerCounter = 0;
_trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { _trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
@ -136,10 +136,12 @@ class RadarDetailsState extends CoreProvier {
}, },
); );
service.put(); service.put();
_trackingTimerCounter = 0;
} }
@override @override
void dispose() { void dispose() {
_handleTracking(sendRequest: true);
_trackingTimer.cancel(); _trackingTimer.cancel();
super.dispose(); super.dispose();
} }

View File

@ -54,12 +54,13 @@ class _GeneralSettingsState extends State<GeneralSettings> {
title: 'زمان دریافت اعلان', title: 'زمان دریافت اعلان',
onTap: () => _pickTimeRange(context), onTap: () => _pickTimeRange(context),
icon: DidvanIcons.notification_regular, icon: DidvanIcons.notification_regular,
suffix: DateTimeUtils.normalizeTimeDuration( suffix: 'از' +
Duration(minutes: state.notificationTimeRange[1]),
) +
' - ' +
DateTimeUtils.normalizeTimeDuration( DateTimeUtils.normalizeTimeDuration(
Duration(minutes: state.notificationTimeRange[0]), Duration(minutes: state.notificationTimeRange[0]),
) +
' تا ' +
DateTimeUtils.normalizeTimeDuration(
Duration(minutes: state.notificationTimeRange[1]),
), ),
), ),
), ),

View File

@ -72,7 +72,7 @@ class _StudioState extends State<Studio> {
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: SearchField( child: SearchField(
title: 'استودیو', title: state.videosSelected ? 'ویدئو' : 'پادکست',
onChanged: _onChanged, onChanged: _onChanged,
focusNode: _focusNode, focusNode: _focusNode,
), ),

View File

@ -2,6 +2,8 @@ import 'package:carousel_slider/carousel_slider.dart';
import 'package:didvan/config/design_config.dart'; import 'package:didvan/config/design_config.dart';
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/requests/news.dart';
import 'package:didvan/models/requests/radar.dart';
import 'package:didvan/routes/routes.dart'; import 'package:didvan/routes/routes.dart';
import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/utils/action_sheet.dart';
import 'package:didvan/utils/date_time.dart'; import 'package:didvan/utils/date_time.dart';
@ -195,24 +197,64 @@ class _DidvanPageViewState extends State<DidvanPageView> {
data: content.text, data: content.text,
onAnchorTap: (href, context, map, element) { onAnchorTap: (href, context, map, element) {
if (href!.contains('navigate-')) { if (href!.contains('navigate-')) {
if (href.contains('statistic')) {
Navigator.of(ActionSheetUtils.context) Navigator.of(ActionSheetUtils.context)
.pushNamed(Routes.statisticDetails, arguments: { .pushNamed(Routes.statisticDetails, arguments: {
'onMarkChanged': (value) {}, 'onMarkChanged': (value) {},
'label': href.split('-')[1], 'label': href.split('-')[2],
'title': href.split('-').last, 'title': href.split('-').last,
'marked': false, 'marked': false,
}); });
} else if (href.contains('radar')) {
Navigator.of(ActionSheetUtils.context).pushNamed(
Routes.radarDetails,
arguments: {
'onMarkChanged': (id, value) {},
'onCommentsChanged': (id, count) {},
'id': int.parse(href.split('-').last),
'args': const RadarRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
},
);
} else if (href.contains('news')) {
Navigator.of(ActionSheetUtils.context).pushNamed(
Routes.newsDetails,
arguments: {
'onMarkChanged': (id, value) {},
'id': int.parse(href.split('-').last),
'args': const NewsRequestArgs(page: 0),
'hasUnmarkConfirmation': false,
},
);
}
} else if (href.contains('popup-')) { } else if (href.contains('popup-')) {
showDialog( showDialog(
context: ActionSheetUtils.context, context: ActionSheetUtils.context,
builder: (context) => Dialog( builder: (context) => Dialog(
shape: const RoundedRectangleBorder(
borderRadius: DesignConfig.lowBorderRadius,
),
alignment: Alignment.center, alignment: Alignment.center,
child: DidvanCard( child: DidvanCard(
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Row(
children: [
Icon(
DidvanIcons.info_circle_solid,
color: Theme.of(context).colorScheme.primary,
),
const SizedBox(width: 8),
DidvanText(
element!.text,
style: Theme.of(context).textTheme.subtitle2,
),
],
),
const SizedBox(height: 8),
DidvanText(href.split('-').last), DidvanText(href.split('-').last),
const DidvanDivider(), const SizedBox(height: 16),
const DidvanButton( const DidvanButton(
title: 'بستن', title: 'بستن',
onPressed: ActionSheetUtils.pop, onPressed: ActionSheetUtils.pop,