This commit is contained in:
Jayesh jain
2024-07-25 23:49:31 +05:30
parent fe805f9f2e
commit 47b6a7d72f
3 changed files with 86 additions and 27 deletions

View File

@@ -15,7 +15,7 @@ class TabBloc extends Bloc<TabEvent, TabState> {
on<LoadClosedItems>(_onLoadClosedItems);
}
void _onLoadAvailableItems(
Future<void> _onLoadAvailableItems(
LoadAvailableItems event, Emitter<TabState> emit) async {
emit(state.copyWith(loading: true));
try {

View File

@@ -5,9 +5,13 @@ import 'package:tanami_app/core/routes/route_name.dart';
import 'package:tanami_app/core/routes/routes.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import 'package:tanami_app/features/MainScreens/Invest/domain/model/closed_io_model.dart';
import 'package:tanami_app/features/MainScreens/Invest/presentation/widgets/kyc_card.dart';
import '../../../../../Api_Helper/base_manager.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
import '../../domain/model/available_io_model.dart';
import '../../domain/repository/io_api.dart';
import '../bloc/tab_bloc.dart';
import '../bloc/tab_event.dart';
import '../bloc/tab_state.dart';
@@ -63,24 +67,52 @@ class InvestLayout extends StatelessWidget {
}
}
class AvailableItemsScreen extends StatelessWidget {
class AvailableItemsScreen extends StatefulWidget {
const AvailableItemsScreen({super.key});
@override
State<AvailableItemsScreen> createState() => _AvailableItemsScreenState();
}
class _AvailableItemsScreenState extends State<AvailableItemsScreen> {
bool isLoading = true;
AvailableIOModel availableIOModel = AvailableIOModel();
@override
void initState() {
apiCalls();
super.initState();
}
Future<void> apiCalls() async {
try {
ResponseData response = await IOApi().availableIOAPI();
if (response.status == ResponseStatus.SUCCESS) {
availableIOModel = AvailableIOModel.fromJson(response.data);
setState(() {
isLoading = false;
});
} else {
setState(() {
isLoading = false;
});
}
} catch (e) {}
}
@override
Widget build(BuildContext context) {
context.read<TabBloc>().add(LoadAvailableItems());
return BlocBuilder<TabBloc, TabState>(
builder: (context, state) {
if (state.loading) {
if (isLoading) {
return const Center(child: CircularProgressIndicator());
} else if (state.errorMessage.isNotEmpty) {
return Center(child: Text(state.errorMessage));
} else if (state.availableItems.data!.rows!.isEmpty) {
} else if (availableIOModel.data!.rows!.isEmpty) {
return const Center(child: Text('No available items.'));
} else {
return ListView.builder(
itemCount: state.availableItems.data!.rows!.length + 1,
itemCount: availableIOModel.data!.rows!.length + 1,
itemBuilder: (context, index) {
return index == 0
? Container(
@@ -94,8 +126,7 @@ class AvailableItemsScreen extends StatelessWidget {
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {
"type": "available",
"id": state
.availableItems.data!.rows![index - 1].id!
"id": availableIOModel.data!.rows![index - 1].id!
.toString()
});
},
@@ -120,12 +151,12 @@ class AvailableItemsScreen extends StatelessWidget {
child: Column(
children: [
InvestCarouselView(
imageList: state.availableItems.data!
.rows![index - 1].artifactsImage!,
imageList: availableIOModel
.data!.rows![index - 1].artifactsImage!,
),
InvestDetailsSection(
availableIOModel:
state.availableItems.data!.rows![index - 1],
availableIOModel.data!.rows![index - 1],
),
],
),
@@ -139,32 +170,60 @@ class AvailableItemsScreen extends StatelessWidget {
}
}
class ClosedItemsScreen extends StatelessWidget {
class ClosedItemsScreen extends StatefulWidget {
const ClosedItemsScreen({super.key});
@override
State<ClosedItemsScreen> createState() => _ClosedItemsScreenState();
}
class _ClosedItemsScreenState extends State<ClosedItemsScreen> {
bool isLoading = true;
ClosedIOModel closedIOModel = ClosedIOModel();
@override
void initState() {
apiCalls();
super.initState();
}
Future<void> apiCalls() async {
try {
ResponseData response = await IOApi().closedIOAPI();
if (response.status == ResponseStatus.SUCCESS) {
closedIOModel = ClosedIOModel.fromJson(response.data);
setState(() {
isLoading = false;
});
} else {
setState(() {
isLoading = false;
});
}
} catch (e) {}
}
@override
Widget build(BuildContext context) {
context.read<TabBloc>().add(LoadClosedItems());
return BlocBuilder<TabBloc, TabState>(
builder: (context, state) {
if (state.loading) {
if (isLoading) {
return const Center(child: CircularProgressIndicator());
} else if (state.errorMessage.isNotEmpty) {
return Center(child: Text(state.errorMessage));
} else if (state.closedItems.data!.rows!.isEmpty) {
} else if (closedIOModel.data!.rows!.isEmpty) {
return const Center(child: Text('No available items.'));
} else {
return ListView.builder(
itemCount: state.closedItems.data!.rows!.length,
itemCount: closedIOModel.data!.rows!.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
goRouter
.pushNamed(RouteName.investDetailScreen, pathParameters: {
"type": "closed",
"id": state.closedItems.data!.rows![index].id!.toString()
});
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {
"type": "closed",
"id": closedIOModel.data!.rows![index].id!.toString()
});
},
child: Container(
margin: const EdgeInsets.symmetric(
@@ -189,7 +248,7 @@ class ClosedItemsScreen extends StatelessWidget {
imageList: const [],
),
InvestClosedDetailsSection(
closedIoModel: state.closedItems.data!.rows![index],
closedIoModel: closedIOModel.data!.rows![index],
),
],
),

View File

@@ -7,6 +7,7 @@ import '../../../../../core/styles/app_color.dart';
import '../../../../../core/styles/app_text.dart';
import '../../../../../core/utils/language/localizations_delegate.dart';
import '../../../../../shared/components/text_widget.dart';
import '../bloc/tab_event.dart';
import 'invest_layout.dart';
class InvestScreen extends StatefulWidget {
@@ -37,9 +38,8 @@ class _InvestScreenState extends State<InvestScreen> {
body: MultiBlocProvider(
providers: [
BlocProvider(
// Create an instance of the OnboardingBloc
create: (context) => TabBloc(),
),
// Create an instance of the OnboardingBloc
create: (context) => TabBloc()),
BlocProvider(
// Create an instance of the OnboardingBloc
create: (context) => CarouselBloc(),