flutter-freaccess-hub/lib/features/home/presentation/pages/about_system.dart

175 lines
4.9 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/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/flutter_flow/internationalization.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher.dart';
class AboutSystemPage extends StatefulWidget {
@override
_AboutSystemPageState createState() => _AboutSystemPageState();
}
class _AboutSystemPageState extends State<AboutSystemPage> {
String _appVersion = '';
@override
void initState() {
super.initState();
_loadAppVersion();
}
Future<void> _loadAppVersion() async {
try {
final PackageInfo packageInfo = await PackageInfo.fromPlatform();
setState(() {
_appVersion = FFLocalizations.of(context).getVariableText(
ptText: 'Versão do Aplicativo: ${packageInfo.version}',
enText: 'App Version: ${packageInfo.version}',
);
});
} catch (e, s) {
log(e.toString(), stackTrace: s);
setState(() {
_appVersion = FFLocalizations.of(context).getVariableText(
ptText: 'Versão do Aplicativo Indisponível',
enText: 'App Version Unavailable',
);
});
}
}
@override
Widget build(BuildContext context) {
final theme = FlutterFlowTheme.of(context);
return Scaffold(
backgroundColor: theme.primaryBackground,
appBar: _buildAppBar(context, theme),
body: _buildBody(),
);
}
PreferredSizeWidget _buildAppBar(
BuildContext context, FlutterFlowTheme theme) {
return AppBar(
backgroundColor: theme.primaryBackground,
automaticallyImplyLeading: false,
leading: _buildBackButton(context, theme),
title: _buildTitle(context, theme),
centerTitle: true,
elevation: 0.0,
);
}
Widget _buildBackButton(BuildContext context, FlutterFlowTheme theme) {
return FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 30.0,
borderWidth: 1.0,
buttonSize: 60.0,
icon: Icon(
Icons.keyboard_arrow_left,
color: theme.primaryText,
size: 30.0,
),
onPressed: () => Navigator.of(context).pop(),
);
}
Widget _buildTitle(BuildContext context, FlutterFlowTheme theme) {
return Text(
FFLocalizations.of(context).getVariableText(
ptText: 'Sobre o Sistema',
enText: 'About the System',
),
style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: FlutterFlowTheme.of(context).headlineMediumFamily,
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 16.0,
fontWeight: FontWeight.bold,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap()
.containsKey(FlutterFlowTheme.of(context).headlineMediumFamily),
),
);
}
Future<void> _launchURL() async {
final Uri url = Uri.parse('https://fre.com.br/');
if (!await launchUrl(url)) {
throw Exception('Could not launch $url');
}
}
Widget _buildBody() {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
SizedBox(height: 20),
_buildLogo(),
SizedBox(height: 20),
_buildAppVersionText(),
Spacer(),
_buildLaunch(),
SizedBox(height: 20),
],
),
);
}
Widget _buildLogo() {
return SizedBox(
height: 100,
width: 100,
child: Image.asset('assets/images/fre.png'),
);
// return GestureDetector(
// onTap: () {
// final exception = Exception('Crashando');
// final stackTrace = Trace.current();
// LogUtil.requestAPIFailed("proccessRequest.php", "", "Consulta de Pets",
// exception, stackTrace);
// FirebaseCrashlytics.instance.crash();
// },
// child: SizedBox(
// height: 100,
// width: 100,
// child: Image.asset('assets/images/fre.png'),
// ),
// );
}
Widget _buildLaunch() {
final theme = FlutterFlowTheme.of(context).primary;
return RichText(
text: TextSpan(
text: 'Website',
style: TextStyle(color: theme, fontSize: 16),
recognizer: TapGestureRecognizer()..onTap = () => _launchURL(),
),
);
}
Widget _buildAppVersionText() {
final theme = FlutterFlowTheme.of(context);
return Text(
_appVersion,
style: theme.headlineMedium.override(
fontFamily: theme.headlineMediumFamily,
color: theme.primaryText,
fontSize: 16.0,
letterSpacing: 0.0,
useGoogleFonts:
GoogleFonts.asMap().containsKey(theme.headlineMediumFamily),
),
);
}
}