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 tracking(int id, String type) =>
baseUrl + '/$type/$id/tracking';
static String comments(int id, String type) =>
baseUrl + '/$type/$id/comments';
static String feedback(int id, int commentId, String type) =>

View File

@ -38,40 +38,46 @@ class _NewsDetailsState extends State<NewsDetails> {
Widget build(BuildContext context) {
return Scaffold(
body: Consumer<NewsDetailsState>(
builder: (context, state, child) => StateHandler<NewsDetailsState>(
onRetry: () => state.getNewsDetails(state.currentNews.id),
state: state,
builder: (context, state) => Stack(
children: [
IgnorePointer(
ignoring: state.isFetchingNewItem,
child: DidvanPageView(
isRadar: false,
initialIndex: state.initialIndex,
onPageChanged: _onPageChnaged,
scrollController: _scrollController,
items: state.news,
currentIndex: state.currentIndex,
),
),
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,
builder: (context, state, child) => WillPopScope(
onWillPop: () async {
state.handleTracking(sendRequest: true);
return true;
},
child: StateHandler<NewsDetailsState>(
onRetry: () => state.getNewsDetails(state.currentNews.id),
state: state,
builder: (context, state) => Stack(
children: [
IgnorePointer(
ignoring: state.isFetchingNewItem,
child: DidvanPageView(
isRadar: false,
initialIndex: state.initialIndex,
onPageChanged: _onPageChnaged,
scrollController: _scrollController,
items: state.news,
currentIndex: state.currentIndex,
),
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));
await service.httpGet();
_handleTracking(sendRequest: isForward != null);
handleTracking(sendRequest: isForward != null);
if (service.isSuccess) {
final result = service.result;
final newsItem = NewsDetailsData.fromJson(result['news']);
@ -88,15 +88,21 @@ class NewsDetailsState extends CoreProvier {
notifyListeners();
}
Future<void> _handleTracking({bool sendRequest = true}) async {
Future<void> handleTracking({bool sendRequest = true}) async {
if (!sendRequest) {
_trackingTimerCounter = 0;
_trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
_trackingTimerCounter++;
});
return;
}
//send request
_trackingTimerCounter = 0;
final service = RequestService(
RequestHelper.tracking(currentNews.id, 'news'),
body: {
'sec': _trackingTimerCounter,
},
);
service.put();
}
Future<void> getRelatedContents() async {

View File

@ -38,47 +38,53 @@ class _RadarDetailsState extends State<RadarDetails> {
Widget build(BuildContext context) {
return Scaffold(
body: Consumer<RadarDetailsState>(
builder: (context, state, child) => StateHandler<RadarDetailsState>(
onRetry: () => state.getRadarDetails(widget.pageData['id']),
state: state,
builder: (context, state) => Stack(
children: [
IgnorePointer(
ignoring: state.isFetchingNewItem,
child: DidvanPageView(
isRadar: true,
initialIndex: state.initialIndex,
onPageChanged: _onPageChanged,
scrollController: _scrollController,
items: state.radars,
currentIndex: state.currentIndex,
),
),
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,
builder: (context, state, child) => WillPopScope(
onWillPop: () async {
state.handleTracking(sendRequest: true);
return true;
},
child: StateHandler<RadarDetailsState>(
onRetry: () => state.getRadarDetails(widget.pageData['id']),
state: state,
builder: (context, state) => Stack(
children: [
IgnorePointer(
ignoring: state.isFetchingNewItem,
child: DidvanPageView(
isRadar: true,
initialIndex: state.initialIndex,
onPageChanged: _onPageChanged,
scrollController: _scrollController,
items: state.radars,
currentIndex: state.currentIndex,
),
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));
await service.httpGet();
_handleTracking(sendRequest: isForward != null);
handleTracking(sendRequest: isForward != null);
if (service.isSuccess) {
final result = service.result;
final radar = RadarDetailsData.fromJson(result['radar']);
@ -121,15 +121,21 @@ class RadarDetailsState extends CoreProvier {
notifyListeners();
}
Future<void> _handleTracking({bool sendRequest = true}) async {
Future<void> handleTracking({bool sendRequest = true}) async {
if (!sendRequest) {
_trackingTimerCounter = 0;
_trackingTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
_trackingTimerCounter++;
});
return;
}
//send request
_trackingTimerCounter = 0;
final service = RequestService(
RequestHelper.tracking(currentRadar.id, 'radar'),
body: {
'sec': _trackingTimerCounter,
},
);
service.put();
}
@override