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/widgets/equipment/asset_detail_page.dart

121 lines
5.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_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/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_by_id_model.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/views/widgets/equipment/asset_details_view.dart';
import 'package:test_sa/views/widgets/equipment/asset_document_history_view.dart';
import 'package:test_sa/views/widgets/equipment/asset_image_upload_page.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/failed_loading.dart';
class AssetDetailPage extends StatefulWidget {
static const String id = "/asset-details";
const AssetDetailPage({Key? key}) : super(key: key);
@override
_AssetDetailPageState createState() {
return _AssetDetailPageState();
}
}
class _AssetDetailPageState extends State<AssetDetailPage> {
3 months ago
int? assetId;
AssetProvider? _assetProvider;
1 month ago
AssetByIdModel? assetModel;
3 months ago
@override
6 months ago
Widget build(BuildContext context) {
assetId ??= ModalRoute.of(context)?.settings.arguments as int;
_assetProvider ??= Provider.of<AssetProvider>(context, listen: false);
_assetProvider?.stateCode = null;
return Scaffold(
appBar: DefaultAppBar(title: context.translation.assetDetails),
body: FutureBuilder<AssetByIdModel>(
future: assetModel == null ? _assetProvider!.getAssetById(assetId!, context.translation) : null,
builder: (BuildContext context, AsyncSnapshot<AssetByIdModel> snapshot) {
if (snapshot.hasError) {
return FailedLoading(
message: snapshot.error.toString(),
onReload: () {
setState(() {});
},
);
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: ALoading());
} else if (snapshot.hasData) {}
if (snapshot.hasData) {
1 month ago
assetModel = snapshot.data!;
return DefaultTabController(
length: 2,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight),
decoration: BoxDecoration(
color: AppColor.tabBarBackground(context),
border: Border.all(color: AppColor.tabBarBorder(context)),
borderRadius: BorderRadius.circular(20),
),
child: TabBar(
padding: EdgeInsets.symmetric(vertical: 6.toScreenHeight, horizontal: 6.toScreenWidth),
labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
unselectedLabelStyle: AppTextStyles.bodyText,
labelStyle: AppTextStyles.bodyText,
indicatorPadding: EdgeInsets.zero,
indicatorSize: TabBarIndicatorSize.tab,
dividerColor: Colors.transparent,
overlayColor: WidgetStateProperty.all(Colors.transparent),
indicator: BoxDecoration(
color: AppColor.background(context),
borderRadius: BorderRadius.circular(15),
boxShadow: [BoxShadow(color: Colors.black.withValues(alpha: 0.03), blurRadius: 5, offset: const Offset(0, 0), spreadRadius: 0)]),
onTap: (index) {
// setState(() {});
},
tabs: [
Tab(text: context.translation.assetDetails, height: 57.toScreenHeight),
Tab(text: 'Document history'.addTranslation, height: 57.toScreenHeight),
],
),
),
12.height,
TabBarView(
children: [
AssetDetailsView(
assetModel: assetModel!,
onUpload: _upload,
1 month ago
),
const AssetDocumentHistoryView(),
],
).expanded,
],
),
);
}
return const Center(child: ALoading());
},
),
);
}
void _upload() async {
bool reload = await Navigator.push(context, MaterialPageRoute(builder: (context) => AssetImageUploadPage(assetId: assetId!))) ?? false;
if (reload) {
assetModel = null;
setState(() {});
}
}
}