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.
cloudsolutions-atoms/lib/views/pages/device_transfer/device_transfer_details.dart

244 lines
10 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart';
import '../../../extensions/text_extensions.dart';
import '../../../models/enums/user_types.dart';
import '../../../new_views/app_style/app_color.dart';
import '../../../new_views/common_widgets/default_app_bar.dart';
import '../../widgets/requests/request_status.dart';
class DeviceTransferDetails extends StatefulWidget {
final AssetTransfer model;
const DeviceTransferDetails({Key key, this.model}) : super(key: key);
@override
State<DeviceTransferDetails> createState() => _DeviceTransferDetailsState();
}
class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
AssetTransfer _model;
UserProvider _userProvider;
bool _isLoading = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
_model = widget.model;
super.initState();
}
Future<void> _getDeviceTransfer() async {
_model = await Provider.of<AssetTransferProvider>(context).getRequestById(assetTransferId: widget.model.id);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: DefaultAppBar(title: context.translation.deviceTransferDetails),
key: _scaffoldKey,
body: SafeArea(
child: FutureBuilder(
future: _getDeviceTransfer(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const ALoading();
} else {
_userProvider = Provider.of<UserProvider>(context);
return Form(
key: _formKey,
child: LoadingManager(
isLoading: _isLoading,
isFailedLoading: false,
stateCode: 200,
onRefresh: () async {},
child: Column(
children: [
_buildDetailsCard(
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
/// TBD
StatusLabel(
label: "",
id: 0,
textColor: AColors.getPriorityStatusTextColor(0),
backgroundColor: AColors.getPriorityStatusColor(0)),
8.width,
/// TBD
StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)),
],
),
1.width.expanded,
Text(widget.model.createdOn != null ?widget.model.createdOn.toServiceRequestCardFormat:"", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
],
),
8.height,
Text(context.translation.transferDetails, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildTextWidget('${context.translation.assetName} : ${_model.assetName}'),
_buildTextWidget('${context.translation.assetNumber} : ${_model.assetNumber}'),
_buildTextWidget('${context.translation.model} : ${_model.modelName}'),
_buildTextWidget('${context.translation.sn} : ${_model.assetSerialNo}'),
],
),
8.height,
],
).paddingAll(14)
),
// sender card
_buildCard(
isSender: true,
site: _model.senderSiteName??"",
/// TBD
unit: _model.senderDepartmentName??"",
comment: _model.senderComment??"",
/// TBD
statusLabel: StatusLabel(
label: _model.senderMachineStatusName??"",
id: _model.senderMachineStatusId,
textColor: AColors.getRequestStatusTextColor(_model.senderMachineStatusId),
backgroundColor: AColors.getRequestStatusColor(_model.senderMachineStatusId)),
),
// receiver card
_buildCard(
isSender: false,
site: _model.destSiteName??"",
/// TBD
unit: _model.destDepartmentName??"",
comment: _model.receiverComment??"",
/// TBD
statusLabel: StatusLabel(
label: _model.receiverMachineStatusName??"",
id: _model.receiverMachineStatusId,
textColor: AColors.getRequestStatusTextColor(_model.receiverMachineStatusId),
backgroundColor: AColors.getRequestStatusColor(_model.receiverMachineStatusId)),
),
],
),
),
);
}
},
),
),
);
}
_buildDetailsCard(Widget widget){
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)),
),
child: widget,
).paddingOnly(top: 14, start: 14, end: 14);
}
_buildTextWidget(String text){
return Text(
text, style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
);
}
_buildCard({@required String site, @required String unit, @required String comment, @required bool isSender, StatusLabel statusLabel}){
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
statusLabel??Container(),
8.height,
Text(isSender?context.translation.senderDetails:context.translation.receiverDetails,
style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
],
),
if (_userProvider.user?.type == UsersTypes.engineer)
CircleAvatar(
radius: 25,
backgroundColor: AppColor.neutral30,
child: CircleAvatar(
radius: 24,
backgroundColor: Colors.white,
child: Padding(
padding: const EdgeInsets.only(left: 3.0),
child: SvgPicture.asset('assets/images/update.svg'),
),
),
).onPress(
isSender ? _model.senderMachineStatusName == "Closed"
? null
: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateDeviceTransfer(
model: _model,
isSender: isSender,
)));
}
: _model.receiverMachineStatusName == "Closed"
? null
: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateDeviceTransfer(
model: _model,
isSender: isSender,
)));
}),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildTextWidget('${context.translation.site} : $site'),
_buildTextWidget('${context.translation.unite} : $unit'),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
_buildTextWidget(comment),
],
),
8.height,
],
).paddingAll(14),
).paddingOnly(top: 14, start: 14, end: 14);
}
}