@@ -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 {
|
||||
|
||||
@@ -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],
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user