import 'dart:collection'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/components/templates_components/card_item_template_component/card_item_template_component_widget.dart'; import 'package:hub/components/templates_components/details_component/details_component_model.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/shared/utils/limited_text_size.dart'; class DetailsComponentWidget extends StatefulWidget { const DetailsComponentWidget({ super.key, required this.labelsHashMap, required this.statusHashMap, this.imagePath, this.icon, this.onTapCardItemAction, required this.buttons, }); final Map labelsHashMap; final List?> statusHashMap; final String? imagePath; final Future Function()? onTapCardItemAction; final List? buttons; final FreCardIcon? icon; @override State createState() => _DetailsComponentWidgetState(); } class _DetailsComponentWidgetState extends State { late DetailsComponentModel _model; LinkedHashMap get labelsLinkedHashMap => LinkedHashMap.from(widget.labelsHashMap); List> get statusLinkedHashMap => widget.statusHashMap .map((map) => LinkedHashMap.from(map ?? {})) .toList(); @override void setState(VoidCallback callback) { super.setState(callback); _model.onUpdate(); } @override void initState() { super.initState(); _model = createModel(context, () => DetailsComponentModel()); _model.textFieldFocusNodeStatus ??= FocusNode(); } @override void dispose() { _model.maybeDispose(); super.dispose(); } @override Widget build(BuildContext context) { // CachedNetworkImage.evictFromCache(widget.imagePath ?? ''); final double limitedBodyFontSize = LimitedFontSizeUtil.getBodyFontSize(context); return Container( constraints: BoxConstraints( maxWidth: MediaQuery.of(context).size.width, maxHeight: MediaQuery.of(context).size.height, ), decoration: BoxDecoration( color: FlutterFlowTheme.of(context).primaryBackground, borderRadius: const BorderRadius.all(Radius.circular(25.0)), ), child: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(height: MediaQuery.of(context).size.height * 0.02), if (widget.imagePath != null && widget.imagePath != '') Container( width: MediaQuery.of(context).size.width * 0.3, height: MediaQuery.of(context).size.width * 0.3, clipBehavior: Clip.antiAlias, decoration: const BoxDecoration( shape: BoxShape.circle, ), child: CachedNetworkImage( fadeInDuration: const Duration(milliseconds: 100), fadeOutDuration: const Duration(milliseconds: 100), imageUrl: widget.imagePath!, fit: BoxFit.cover, useOldImageOnUrlChange: true, ), ), if (widget.icon != null && widget.icon != '') Container( width: MediaQuery.of(context).size.width * 0.3, height: MediaQuery.of(context).size.width * 0.3, clipBehavior: Clip.antiAlias, decoration: const BoxDecoration( shape: BoxShape.circle, ), child: widget.icon!, ), SizedBox(height: MediaQuery.of(context).size.height * 0.03), Row( children: statusLinkedHashMap.expand((linkedHashMap) { return linkedHashMap.entries .map((MapEntry item) { return Expanded( child: Padding( padding: EdgeInsets.symmetric( horizontal: MediaQuery.of(context).size.width * 0.05, ), child: TextFormField( autofocus: false, canRequestFocus: false, readOnly: true, initialValue: item.key, obscureText: false, decoration: InputDecoration( isDense: true, enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10.0), borderSide: BorderSide( color: item.value, ), ), filled: true, fillColor: item.value, // labelText: item.key, labelStyle: FlutterFlowTheme.of(context) .labelMedium .override( fontFamily: FlutterFlowTheme.of(context) .labelMediumFamily, fontWeight: FontWeight.bold, color: FlutterFlowTheme.of(context).info, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context) .labelMediumFamily, ), fontSize: limitedBodyFontSize, ), hintStyle: FlutterFlowTheme.of(context) .labelMedium .override( fontFamily: FlutterFlowTheme.of(context) .labelMediumFamily, color: FlutterFlowTheme.of(context).info, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context) .labelMediumFamily, ), fontSize: limitedBodyFontSize, ), focusedBorder: InputBorder.none, errorBorder: InputBorder.none, focusedErrorBorder: InputBorder.none, suffixIcon: Icon( Icons.info, color: FlutterFlowTheme.of(context).info, ), ), style: FlutterFlowTheme.of(context) .labelMedium .override( fontFamily: FlutterFlowTheme.of(context) .labelMediumFamily, fontWeight: FontWeight.bold, color: FlutterFlowTheme.of(context).info, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context).labelMediumFamily, ), fontSize: limitedBodyFontSize, ), textAlign: TextAlign.center, maxLines: null, keyboardType: TextInputType.name, validator: _model.textController1Validator .asValidator(context), ), ), ); }).toList(); }).toList(), ), SizedBox(height: MediaQuery.of(context).size.height * 0.03), ListView.builder( shrinkWrap: true, itemCount: labelsLinkedHashMap.length, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { String key = labelsLinkedHashMap.keys.elementAt(index); String value = labelsLinkedHashMap[key]!; // return Text('key: $key, value: $value'); return TextFormField( readOnly: true, initialValue: value, style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: FlutterFlowTheme.of(context).bodyMediumFamily, color: FlutterFlowTheme.of(context).primaryText, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context).bodyMediumFamily, ), fontSize: limitedBodyFontSize, ), decoration: InputDecoration( labelText: key, filled: true, fillColor: FlutterFlowTheme.of(context).primaryBackground, border: OutlineInputBorder( borderRadius: BorderRadius.circular(10.0), borderSide: BorderSide( color: FlutterFlowTheme.of(context) .primaryBackground, // Change border color here ), ), labelStyle: FlutterFlowTheme.of(context) .labelMedium .override( fontFamily: FlutterFlowTheme.of(context).labelMediumFamily, color: FlutterFlowTheme.of(context).primaryText, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context).labelMediumFamily, ), ), hintStyle: FlutterFlowTheme.of(context) .labelMedium .override( fontFamily: FlutterFlowTheme.of(context).labelMediumFamily, color: FlutterFlowTheme.of(context).primaryText, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context).labelMediumFamily, ), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10.0), borderSide: BorderSide( color: FlutterFlowTheme.of(context) .primaryBackground, // Change border color here ), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10.0), borderSide: BorderSide( color: FlutterFlowTheme.of(context) .primaryBackground, // Change border color here ), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10.0), borderSide: BorderSide( color: FlutterFlowTheme.of(context) .primaryBackground, // Change border color here ), ), focusedErrorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10.0), borderSide: BorderSide( color: FlutterFlowTheme.of(context) .primaryBackground, // Change border color here ), ), ), ); }, ), SizedBox(height: MediaQuery.of(context).size.height * 0.02), if (widget.buttons!.isNotEmpty || widget.buttons != null) OverflowBar( overflowAlignment: OverflowBarAlignment.center, alignment: MainAxisAlignment.center, overflowSpacing: 2, spacing: 2, // mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: widget.buttons!, ), SizedBox(height: MediaQuery.of(context).size.height * 0.02), ], ), ), ); } }