D1APP-89 tracking api connected

This commit is contained in:
MohammadTaha Basiri 2022-03-31 00:25:01 +04:30
parent eaec7340db
commit 169b207d9f
5 changed files with 105 additions and 79 deletions

View File

@ -119,6 +119,8 @@ class RequestHelper {
]); ]);
static String mark(int id, String type) => baseUrl + '/$type/$id/mark'; static String mark(int id, String type) => baseUrl + '/$type/$id/mark';
static String tracking(int id, String type) =>
baseUrl + '/$type/$id/tracking';
static String comments(int id, String type) => static String comments(int id, String type) =>
baseUrl + '/$type/$id/comments'; baseUrl + '/$type/$id/comments';
static String feedback(int id, int commentId, String type) => static String feedback(int id, int commentId, String type) =>

View File

@ -38,40 +38,46 @@ 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) => StateHandler<NewsDetailsState>( builder: (context, state, child) => WillPopScope(
onRetry: () => state.getNewsDetails(state.currentNews.id), onWillPop: () async {
state: state, state.handleTracking(sendRequest: true);
builder: (context, state) => Stack( return true;
children: [ },
IgnorePointer( child: StateHandler<NewsDetailsState>(
ignoring: state.isFetchingNewItem, onRetry: () => state.getNewsDetails(state.currentNews.id),
child: DidvanPageView( state: state,
isRadar: false, builder: (context, state) => Stack(
initialIndex: state.initialIndex, children: [
onPageChanged: _onPageChnaged, IgnorePointer(
scrollController: _scrollController, ignoring: state.isFetchingNewItem,
items: state.news, child: DidvanPageView(
currentIndex: state.currentIndex, isRadar: false,
), initialIndex: state.initialIndex,
), onPageChanged: _onPageChnaged,
Positioned( scrollController: _scrollController,
bottom: 0, items: state.news,
left: 0, currentIndex: state.currentIndex,
right: 0,
child: FloatingNavigationBar(
hasUnmarkConfirmation:
widget.pageData['hasUnmarkConfirmation'],
scrollController: _scrollController,
item: state.currentNews,
onCommentsChanged: state.onCommentsChanged,
onMarkChanged: (value) => widget.pageData['onMarkChanged'](
state.currentNews.id,
value,
), ),
isRadar: false,
), ),
), Positioned(
], bottom: 0,
left: 0,
right: 0,
child: FloatingNavigationBar(
hasUnmarkConfirmation:
widget.pageData['hasUnmarkConfirmation'],
scrollController: _scrollController,
item: state.currentNews,
onCommentsChanged: state.onCommentsChanged,
onMarkChanged: (value) => widget.pageData['onMarkChanged'](
state.currentNews.id,
value,
),
isRadar: false,
),
),
],
),
), ),
), ),
), ),

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,15 +88,21 @@ 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;
_trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { _trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
_trackingTimerCounter++; _trackingTimerCounter++;
}); });
return; return;
} }
//send request final service = RequestService(
_trackingTimerCounter = 0; RequestHelper.tracking(currentNews.id, 'news'),
body: {
'sec': _trackingTimerCounter,
},
);
service.put();
} }
Future<void> getRelatedContents() async { Future<void> getRelatedContents() async {

View File

@ -38,47 +38,53 @@ 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) => StateHandler<RadarDetailsState>( builder: (context, state, child) => WillPopScope(
onRetry: () => state.getRadarDetails(widget.pageData['id']), onWillPop: () async {
state: state, state.handleTracking(sendRequest: true);
builder: (context, state) => Stack( return true;
children: [ },
IgnorePointer( child: StateHandler<RadarDetailsState>(
ignoring: state.isFetchingNewItem, onRetry: () => state.getRadarDetails(widget.pageData['id']),
child: DidvanPageView( state: state,
isRadar: true, builder: (context, state) => Stack(
initialIndex: state.initialIndex, children: [
onPageChanged: _onPageChanged, IgnorePointer(
scrollController: _scrollController, ignoring: state.isFetchingNewItem,
items: state.radars, child: DidvanPageView(
currentIndex: state.currentIndex, isRadar: true,
), initialIndex: state.initialIndex,
), onPageChanged: _onPageChanged,
Positioned( scrollController: _scrollController,
bottom: 0, items: state.radars,
left: 0, currentIndex: state.currentIndex,
right: 0,
child: FloatingNavigationBar(
hasUnmarkConfirmation:
widget.pageData['hasUnmarkConfirmation'],
isRadar: true,
scrollController: _scrollController,
onMarkChanged: (value) =>
widget.pageData['onMarkChanged']?.call(
state.currentRadar.id,
value,
), ),
item: state.currentRadar,
onCommentsChanged: (count) {
state.onCommentsChanged(count);
widget.pageData['onCommentsChanged']?.call(
state.currentRadar.id,
count,
);
},
), ),
), Positioned(
], bottom: 0,
left: 0,
right: 0,
child: FloatingNavigationBar(
hasUnmarkConfirmation:
widget.pageData['hasUnmarkConfirmation'],
isRadar: true,
scrollController: _scrollController,
onMarkChanged: (value) =>
widget.pageData['onMarkChanged']?.call(
state.currentRadar.id,
value,
),
item: state.currentRadar,
onCommentsChanged: (count) {
state.onCommentsChanged(count);
widget.pageData['onCommentsChanged']?.call(
state.currentRadar.id,
count,
);
},
),
),
],
),
), ),
), ),
), ),

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,15 +121,21 @@ 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;
_trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) { _trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
_trackingTimerCounter++; _trackingTimerCounter++;
}); });
return; return;
} }
//send request final service = RequestService(
_trackingTimerCounter = 0; RequestHelper.tracking(currentRadar.id, 'radar'),
body: {
'sec': _trackingTimerCounter,
},
);
service.put();
} }
@override @override