feat(api_service): Update try-catch funtion and handle exception
update(loading_animation): Update loading animation using Lottie
This commit is contained in:
anhtunz
2025-06-09 14:29:43 +07:00
parent 477646ab9d
commit 3a8fa3633c
44 changed files with 1659 additions and 1065 deletions

View File

@@ -1,11 +1,14 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:sfm_app/product/shared/shared_snack_bar.dart';
import '../../product/extension/context_extension.dart';
import '../../product/services/language_services.dart';
import '../../bloc/bell_bloc.dart';
import '../../product/base/bloc/base_bloc.dart';
import '../../product/services/api_services.dart';
import '../../product/shared/shared_component_loading_animation.dart';
import '../../product/shared/shared_loading_animation.dart';
import 'bell_model.dart';
class BellScreen extends StatefulWidget {
@@ -56,11 +59,7 @@ class _BellScreenState extends State<BellScreen> {
initialData: items,
builder: (context, bellSnapshot) {
return check
? Center(
child: CircularProgressIndicator(
value: context.highValue,
),
)
? const SharedLoadingAnimation()
: bellSnapshot.data?.isEmpty ?? true
? Center(
child: Text(
@@ -78,16 +77,7 @@ class _BellScreenState extends State<BellScreen> {
if (index < bellSnapshot.data!.length) {
return GestureDetector(
onTap: () async {
List<String> read = [];
read.add(bellSnapshot.data![index].id!);
int code = await apiServices
.updateStatusOfNotification(read);
if (code == 200) {
read.clear();
} else {
read.clear();
}
refresh();
readNotification(bellSnapshot.data![index].id!);
},
child: Column(
children: [
@@ -143,7 +133,7 @@ class _BellScreenState extends State<BellScreen> {
builder: (context, hasMoreSnapshot) {
return Center(
child: hasMoreSnapshot.data ?? hasMore
? const CircularProgressIndicator()
? const SharedComponentLoadingAnimation()
: Text(
appLocalization(context)
.bell_read_all,
@@ -173,20 +163,40 @@ class _BellScreenState extends State<BellScreen> {
getBellNotification(offset);
}
Future<void> getBellNotification(int offset) async {
bell = await apiServices.getBellNotifications(
offset.toString(), (offset + 20).toString());
if (bell.items!.isEmpty) {
hasMore = false;
bellBloc.sinkHasMore.add(hasMore);
} else {
for (var item in bell.items!) {
items.add(item);
void readNotification(String id) async{
try {
List<String> read = [];
read.add(id);
await apiServices
.updateStatusOfNotification(read);
read.clear();
} catch (e) {
if (mounted){
showErrorTopSnackBarCustom(
context, e.toString());
}
}
bellBloc.bellItems.add(items);
check = false;
refresh();
}
Future<void> getBellNotification(int offset) async {
try {
bell = await apiServices.getBellNotifications(
offset.toString(), (offset + 20).toString());
if (bell.items!.isEmpty) {
hasMore = false;
bellBloc.sinkHasMore.add(hasMore);
} else {
for (var item in bell.items!) {
items.add(item);
}
}
bellBloc.bellItems.add(items);
check = false;
} catch (e) {
if (!mounted) return;
showErrorTopSnackBarCustom(context, e.toString());
}
}
String timeAgo(BuildContext context, DateTime dateTime) {