diff --git a/lib/features/MainScreens/Invest/presentation/bloc/tab_bloc.dart b/lib/features/MainScreens/Invest/presentation/bloc/tab_bloc.dart index deff09c..15b016e 100644 --- a/lib/features/MainScreens/Invest/presentation/bloc/tab_bloc.dart +++ b/lib/features/MainScreens/Invest/presentation/bloc/tab_bloc.dart @@ -15,7 +15,7 @@ class TabBloc extends Bloc { on(_onLoadClosedItems); } - void _onLoadAvailableItems( + Future _onLoadAvailableItems( LoadAvailableItems event, Emitter emit) async { emit(state.copyWith(loading: true)); try { diff --git a/lib/features/MainScreens/Invest/presentation/pages/invest_layout.dart b/lib/features/MainScreens/Invest/presentation/pages/invest_layout.dart index d9a4c22..b1446e6 100644 --- a/lib/features/MainScreens/Invest/presentation/pages/invest_layout.dart +++ b/lib/features/MainScreens/Invest/presentation/pages/invest_layout.dart @@ -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 createState() => _AvailableItemsScreenState(); +} + +class _AvailableItemsScreenState extends State { + bool isLoading = true; + AvailableIOModel availableIOModel = AvailableIOModel(); + @override + void initState() { + apiCalls(); + super.initState(); + } + + Future 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().add(LoadAvailableItems()); return BlocBuilder( 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 createState() => _ClosedItemsScreenState(); +} + +class _ClosedItemsScreenState extends State { + bool isLoading = true; + ClosedIOModel closedIOModel = ClosedIOModel(); + @override + void initState() { + apiCalls(); + super.initState(); + } + + Future 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().add(LoadClosedItems()); return BlocBuilder( 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], ), ], ), diff --git a/lib/features/MainScreens/Invest/presentation/pages/invest_screen.dart b/lib/features/MainScreens/Invest/presentation/pages/invest_screen.dart index 2343791..8fd8b16 100644 --- a/lib/features/MainScreens/Invest/presentation/pages/invest_screen.dart +++ b/lib/features/MainScreens/Invest/presentation/pages/invest_screen.dart @@ -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 { 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(),