You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
6.1 KiB
Dart
161 lines
6.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/svg.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:test_sa/app_strings/app_asset.dart';
|
|
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
|
|
import 'package:test_sa/extensions/context_extension.dart';
|
|
import 'package:test_sa/extensions/int_extensions.dart';
|
|
import 'package:test_sa/extensions/text_extensions.dart';
|
|
import 'package:test_sa/extensions/widget_extensions.dart';
|
|
import 'package:test_sa/models/new_models/arrival_verification_type_model.dart';
|
|
import 'package:test_sa/models/service_request/service_request.dart';
|
|
import 'package:test_sa/new_views/app_style/app_color.dart';
|
|
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
|
|
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
|
|
import 'package:test_sa/service_request_latest/views/components/verify_otp_view.dart';
|
|
import 'package:test_sa/service_request_latest/views/forms/asset_retired/asset_retired.dart';
|
|
import 'package:test_sa/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart';
|
|
import 'package:test_sa/views/widgets/qr/scan_qr.dart';
|
|
|
|
import 'activities_list_view.dart';
|
|
|
|
class VerifyArrivalView extends StatefulWidget {
|
|
const VerifyArrivalView({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
State<VerifyArrivalView> createState() => _VerifyArrivalViewState();
|
|
}
|
|
|
|
class _VerifyArrivalViewState extends State<VerifyArrivalView> {
|
|
|
|
ArrivalVerificationTypeModel ? arrivalVerificationTypeModel;
|
|
|
|
@override
|
|
void initState() {
|
|
//TODO call this when all data is confirmed
|
|
// getInitialData();
|
|
super.initState();
|
|
}
|
|
Future<void> getInitialData() async{
|
|
RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context,listen: false);
|
|
arrivalVerificationTypeModel = await requestDetailProvider.getArrivalVerificationType();
|
|
}
|
|
Widget build(BuildContext context) {
|
|
//TODO replace the list with Api...
|
|
final List<Map<String, String>> items = [
|
|
{'heading': context.translation.scanQr, 'subHeading': context.translation.scanQrDetail, 'icon': AppAsset.scanQrIcon},
|
|
{'heading': context.translation.askRequester, 'subHeading': context.translation.askRequesterDetail, 'icon': AppAsset.askRequesterIcon},
|
|
{'heading': context.translation.askOtp, 'subHeading': context.translation.askOtpDetail, 'icon': AppAsset.askOtpIcon},
|
|
{'heading': context.translation.takeDevicePhoto, 'subHeading': context.translation.takeDevicePhotoDetail, 'icon': AppAsset.takeDevicePhotoIcon},
|
|
];
|
|
return Scaffold(
|
|
appBar: DefaultAppBar(title: context.translation.verifyArrival),
|
|
//backgroundColor: const Color(0xfff8f9fb),
|
|
body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) {
|
|
return SafeArea(
|
|
child: ListView.builder(
|
|
padding: EdgeInsets.zero,
|
|
itemCount: items.length,
|
|
itemBuilder: (context, index) {
|
|
final item = items[index];
|
|
return customListItem(
|
|
icon: item['icon']!,
|
|
heading: item['heading']!,
|
|
subHeading: item['subHeading']!,
|
|
context: context,
|
|
onTap: () {
|
|
onItemTap(requestDetailProvider: requestDetailProvider, index: index, context: context);
|
|
});
|
|
},
|
|
).paddingOnly(start: 16, end: 16, top: 12, bottom: 12),
|
|
);
|
|
}),
|
|
);
|
|
}
|
|
|
|
Widget customListItem({
|
|
required BuildContext context,
|
|
required String icon,
|
|
required String heading,
|
|
required String subHeading,
|
|
required VoidCallback onTap,
|
|
}) {
|
|
return GestureDetector(
|
|
onTap: onTap, // Handles the tap
|
|
child: Card(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(14), // Circular border radius
|
|
),
|
|
color: Colors.white,
|
|
child: Row(
|
|
crossAxisAlignment: CrossAxisAlignment.start, // Align items at the top
|
|
children: [
|
|
// Icon Section
|
|
icon
|
|
.toSvgAsset(
|
|
width: 32,
|
|
color: AppColor.neutral120,
|
|
height: 29,
|
|
)
|
|
.paddingOnly(top: 8),
|
|
14.width,
|
|
Expanded(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
heading,
|
|
style: AppTextStyles.heading6.copyWith(color: AppColor.neutral50),
|
|
),
|
|
7.height,
|
|
Text(
|
|
subHeading,
|
|
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
|
|
),
|
|
],
|
|
).paddingOnly(end: 50),
|
|
),
|
|
],
|
|
).paddingAll(12),
|
|
),
|
|
);
|
|
}
|
|
|
|
void onItemTap({required int index, required RequestDetailProvider requestDetailProvider, required BuildContext context}) {
|
|
switch (index) {
|
|
case 0:
|
|
// Navigator.push(
|
|
// context,
|
|
// MaterialPageRoute(builder: (context) => const ActivitiesListView()),
|
|
// );
|
|
break;
|
|
case 1:
|
|
// Navigator.push(
|
|
// context,
|
|
// MaterialPageRoute(builder: (context) => const AssetRetired()),
|
|
// );
|
|
break;
|
|
case 2:
|
|
//TODO api has error need to fixed by ahmed...
|
|
// requestDetailProvider.sendOtp(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!);
|
|
Navigator.pushReplacement(
|
|
context,
|
|
MaterialPageRoute(builder: (context) => const VerifyOtpView()),
|
|
);
|
|
break;
|
|
case 3:
|
|
// Navigator.push(
|
|
// context,
|
|
// MaterialPageRoute(builder: (context) => const VerifyAssetDetails()),
|
|
// );
|
|
//push to specific screen...
|
|
// Navigator.push(
|
|
// context,
|
|
// MaterialPageRoute(builder: (context) => const ScanQrView()),
|
|
// );
|
|
break;
|
|
}
|
|
// ScanQr
|
|
}
|
|
}
|