flutter-freaccess-hub/lib/pages/home_page/home_page_widget.dart

334 lines
12 KiB
Dart

import 'dart:developer';
import 'package:flutter/gestures.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/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:hub/shared/widgets/drawer_widget/drawer_widget.dart';
import 'package:provider/provider.dart';
class HomePageWidget extends StatefulWidget {
const HomePageWidget({super.key});
@override
State<HomePageWidget> createState() => _HomePageWidgetState();
}
class _HomePageWidgetState extends State<HomePageWidget> {
late HomePageModel _model;
bool localStatus = false;
final scaffoldKey = GlobalKey<ScaffoldState>();
void checkData() 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'];
AppState().name = response.jsonBody['visitado']['VDO_NOME'];
} else {
if (response.jsonBody['error_msg'] !=
r'''Usuario nao possui vinculo ativo com esse condominio''') {
log(response.jsonBody['error_msg']);
await DialogUtil.warningDefault(context)
.whenComplete(() => checkData());
}
}
break;
default:
await DialogUtil.warningDefault(context)
.whenComplete(() => checkData());
safeSetState(() {});
break;
}
}
@override
void initState() {
super.initState();
_model = createModel(context, () => HomePageModel());
AppState().context = context;
() async {
await FirebaseMessagingService().updateDeviceToken();
}();
checkData();
WidgetsBinding.instance.addPostFrameCallback((_) async {
localStatus = await checkLocals(
context: context,
model: _model,
);
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<AppState>();
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),
drawerEnableOpenDragGesture: true,
drawerDragStartBehavior: DragStartBehavior.start,
drawer: CustomDrawer(model: _model),
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(),
],
),
],
),
),
);
}
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: () {},
// ),
// ),
// ),
// ),
],
),
),
),
],
);
}
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<MessageWellNotifier>(
// 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,
),
);
}
}