import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/actions/actions.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/backend/notifications/firebase_messaging_service.dart'; import 'package:hub/backend/schema/enums/enums.dart'; import 'package:hub/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart'; import 'package:hub/components/organism_components/local_profile_component/local_profile_component_widget.dart'; import 'package:hub/components/organism_components/menu_component/menu_component_widget.dart'; import 'package:hub/flutter_flow/custom_functions.dart'; import 'package:hub/flutter_flow/flutter_flow_icon_button.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/pages/home_page/home_page_model.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:provider/provider.dart'; class HomePageWidget extends StatefulWidget { const HomePageWidget({super.key}); @override State createState() => _HomePageWidgetState(); } class _HomePageWidgetState extends State { late HomePageModel _model; bool localStatus = false; final scaffoldKey = GlobalKey(); @override void initState() { super.initState(); _model = createModel(context, () => HomePageModel()); AppState().context = context; () async { await FirebaseMessagingService().updateDeviceToken(); }(); void fetchData() async { final response = await PhpGroup.getDadosCall.call( devUUID: AppState().devUUID, userUUID: AppState().userUUID, cliUUID: AppState().cliUUID, atividade: 'getDados', ); switch (response.statusCode) { case 200: if (response.jsonBody['error'] == false) { AppState().whatsapp = response.jsonBody['whatsapp']; AppState().provisional = response.jsonBody['provisional']; } else { await DialogUtil.warningDefault(context) .whenComplete(() => fetchData()); safeSetState(() {}); } break; default: await DialogUtil.warningDefault(context) .whenComplete(() => fetchData()); safeSetState(() {}); break; } } fetchData(); WidgetsBinding.instance.addPostFrameCallback((_) async { localStatus = await checkLocals( context: context, model: _model, safeSetState: safeSetState, ); if (AppState().cliUUID.isEmpty) { showModalBottomSheet( isScrollControlled: true, backgroundColor: Colors.transparent, enableDrag: false, isDismissible: false, context: context, builder: (context) { return Padding( padding: MediaQuery.viewInsetsOf(context), child: const BottomArrowLinkedLocalsComponentWidget(), ); }, ).then((value) => safeSetState(() {})); } else { return; } }); _model.textController ??= TextEditingController(); _model.textFieldFocusNode ??= FocusNode(); } @override void dispose() { _model.dispose(); super.dispose(); } @override Widget build(BuildContext context) { context.watch(); return GestureDetector( onTap: () => _model.unfocusNode.canRequestFocus ? FocusScope.of(context).requestFocus(_model.unfocusNode) : FocusScope.of(context).unfocus(), child: Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).secondaryBackground, drawer: buildDrawer(context), body: buildPage(context, localStatus), ), ); } Container buildPage(BuildContext context, bool localStatus) { return Container( decoration: BoxDecoration( color: FlutterFlowTheme.of(context).primaryBackground, ), child: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, children: [ Wrap( spacing: 0.0, runSpacing: 0.0, alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, direction: Axis.horizontal, runAlignment: WrapAlignment.start, verticalDirection: VerticalDirection.down, clipBehavior: Clip.none, children: [ createHeader(context), createLocal(localStatus), createBody(), ], ), ], ), ), ); } Wrap createBody() { return Wrap( spacing: 0.0, runSpacing: 0.0, alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, direction: Axis.horizontal, runAlignment: WrapAlignment.start, verticalDirection: VerticalDirection.down, clipBehavior: Clip.none, children: [ wrapWithModel( model: _model.menuComponentModel, updateCallback: () => setState(() {}), child: const MenuComponentWidget( expandable: true, style: MenuView.list_grid, item: MenuItem.button, ), ), // Align( // alignment: const AlignmentDirectional(0.0, 0.0), // child: Provider( // create: (_) => MessageWellNotifier(), // child: wrapWithModel( // model: _model.messageWellComponentModel, // updateCallback: () => setState(() {}), // child: const MessageWellComponentWidget(), // ), // ), // ), //footer const SizedBox( height: 100, width: double.infinity, ) ], ); } Widget createLocal(bool localStatus) { return wrapWithModel( model: _model.localComponentModel, updateCallback: () => safeSetState(() {}), child: LocalProfileComponentWidget( localStatus: localStatus, ), ); } Row createHeader(BuildContext context) { return Row( mainAxisSize: MainAxisSize.max, children: [ Expanded( child: Container( width: 100.0, height: 100.0, decoration: const BoxDecoration( color: Color(0xFF1AAB5F), ), child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Align( alignment: const AlignmentDirectional(0.0, 1.0), child: Container( height: 50.0, decoration: const BoxDecoration(), child: Align( alignment: const AlignmentDirectional(0.0, 0.0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Align( alignment: const AlignmentDirectional(-1.0, 0.0), child: Padding( padding: const EdgeInsetsDirectional.fromSTEB( 10.0, 0.0, 0.0, 0.0), child: FlutterFlowIconButton( borderRadius: 20.0, borderWidth: 1.0, buttonSize: 40.0, fillColor: FlutterFlowTheme.of(context).primary, icon: const Icon( Icons.menu_rounded, color: Colors.white, size: 28.0, ), onPressed: () async { scaffoldKey.currentState!.openDrawer(); }, ), ), ), Align( alignment: const AlignmentDirectional(-1.0, 0.0), child: Padding( padding: const EdgeInsetsDirectional.fromSTEB( 60.0, 15.0, 0.0, 0.0), child: ClipRRect( borderRadius: BorderRadius.circular(8.0), child: Image.asset( 'assets/images/logo.png', width: 50.0, height: 200.0, fit: BoxFit.none, ), ), ), ), Align( alignment: const AlignmentDirectional(0.0, 0.0), child: Padding( padding: const EdgeInsetsDirectional.fromSTEB( 0.0, 15.0, 0.0, 0.0), child: Text( 'FRE ACCESS', style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: FlutterFlowTheme.of(context) .bodyMediumFamily, color: FlutterFlowTheme.of(context).info, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap() .containsKey( FlutterFlowTheme.of(context) .bodyMediumFamily), ), ), ), ), ], ), ), ), ), // Align( // alignment: const AlignmentDirectional(0.0, 1.0), // child: Container( // width: 100.0, // height: 50.0, // decoration: const BoxDecoration(), // child: Align( // alignment: const AlignmentDirectional(1.0, 1.0), // child: FlutterFlowIconButton( // borderRadius: 20.0, // borderWidth: 1.0, // buttonSize: 40.0, // icon: Icon( // Icons.notifications_sharp, // color: FlutterFlowTheme.of(context).info, // size: 24.0, // ), // onPressed: () {}, // ), // ), // ), // ), ], ), ), ), ], ); } SizedBox buildDrawer(BuildContext context) { return SizedBox( width: MediaQuery.of(context).size.width * 0.8, child: Drawer( elevation: 16.0, child: Container( decoration: BoxDecoration( color: FlutterFlowTheme.of(context).primaryBackground, shape: BoxShape.rectangle, ), child: Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( width: double.infinity, decoration: const BoxDecoration( borderRadius: BorderRadius.only( bottomLeft: Radius.circular(5.0), bottomRight: Radius.circular(5.0), topLeft: Radius.circular(0.0), topRight: Radius.circular(0.0), ), shape: BoxShape.rectangle, ), child: Column( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: const EdgeInsets.fromLTRB(30, 30, 10, 0), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Flexible( child: Container( width: double.infinity, decoration: const BoxDecoration(), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, children: [ Container( width: 50.0, height: 50.0, clipBehavior: Clip.antiAlias, decoration: const BoxDecoration( shape: BoxShape.circle, ), child: CachedNetworkImage( imageUrl: valueOrDefault( 'assets/images/person.jpg', 'https://freaccess.com.br/freaccess/Images/Clients/${AppState().cliUUID}.png', ), width: 80.0, height: 80.0, fit: BoxFit.cover, alignment: const Alignment(0.0, 0.0), placeholder: (context, url) => Image.asset( 'assets/images/home.png'), errorListener: (_) => Image.asset( 'assets/images/home.png'), errorWidget: (_, __, ___) => Image.asset( 'assets/images/home.png'), ), ), Container( width: 150.0, child: Text( valueOrDefault( convertToUppercase(AppState().local), 'NOME DO LOCAL', ), style: FlutterFlowTheme.of(context) .bodyLarge .override( fontFamily: 'Nunito Sans', color: FlutterFlowTheme.of(context) .primaryText, fontSize: 14.0, letterSpacing: 0.0, fontWeight: FontWeight.normal, useGoogleFonts: GoogleFonts.asMap() .containsKey( 'Nunito Sans'), ), ), ), ]), ), ), ] .divide(const SizedBox(width: 0.0)) .around(const SizedBox(width: 0.0)), ), ), ].addToStart(const SizedBox(height: 30.0)), ), ), Padding( padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0), child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, children: [ Flexible( child: Padding( padding: const EdgeInsetsDirectional.fromSTEB( 8.0, 0.0, 8.0, 0.0), child: TextFormField( controller: _model.textController, focusNode: _model.textFieldFocusNode, autofocus: false, obscureText: false, decoration: InputDecoration( isDense: true, 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), ), alignLabelWithHint: false, hintStyle: FlutterFlowTheme.of(context) .labelMedium .override( fontFamily: FlutterFlowTheme.of(context) .labelMediumFamily, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap() .containsKey(FlutterFlowTheme.of(context) .labelMediumFamily), ), enabledBorder: UnderlineInputBorder( borderSide: BorderSide( color: FlutterFlowTheme.of(context).customColor1, width: 0.5, ), borderRadius: BorderRadius.circular(2.0), ), focusedBorder: UnderlineInputBorder( borderSide: BorderSide( color: FlutterFlowTheme.of(context).primary, width: 0.5, ), borderRadius: BorderRadius.circular(2.0), ), errorBorder: UnderlineInputBorder( borderSide: BorderSide( color: FlutterFlowTheme.of(context).error, width: 0.5, ), borderRadius: BorderRadius.circular(2.0), ), focusedErrorBorder: UnderlineInputBorder( borderSide: BorderSide( color: FlutterFlowTheme.of(context).error, width: 0.5, ), borderRadius: BorderRadius.circular(2.0), ), prefixIcon: const Icon( Icons.search_sharp, ), ), style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: FlutterFlowTheme.of(context) .bodyMediumFamily, letterSpacing: 0.0, useGoogleFonts: GoogleFonts.asMap().containsKey( FlutterFlowTheme.of(context) .bodyMediumFamily), ), validator: _model.textControllerValidator .asValidator(context), ), ), ), ] .addToStart(const SizedBox(width: 30.0)) .addToEnd(const SizedBox(width: 30.0)), ), ), Expanded( child: SingleChildScrollView( child: wrapWithModel( model: _model.menuComponentModel, updateCallback: () => setState(() {}), child: const MenuComponentWidget( expandable: false, style: MenuView.list, item: MenuItem.tile, ), ), ), ), ], ), ), ), ); } }