Settings
This commit is contained in:
parent
9bf0a9520f
commit
2edfa54973
|
|
@ -3,6 +3,7 @@ import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/debug/state_inspector.dart';
|
import 'package:invoiceninja_flutter/ui/app/debug/state_inspector.dart';
|
||||||
|
import 'package:invoiceninja_flutter/ui/app/icon_text.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
|
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/resources/cached_image.dart';
|
import 'package:invoiceninja_flutter/ui/app/resources/cached_image.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/pdf.dart';
|
import 'package:invoiceninja_flutter/utils/pdf.dart';
|
||||||
|
|
@ -220,7 +221,9 @@ class MenuDrawer extends StatelessWidget {
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
Align(
|
Align(
|
||||||
child: SidebarFooter(),
|
child: state.prefState.isMenuCollapsed
|
||||||
|
? SidebarFooterCollapsed()
|
||||||
|
: SidebarFooter(),
|
||||||
alignment: Alignment(0, 1),
|
alignment: Alignment(0, 1),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
@ -313,51 +316,6 @@ class SidebarFooter extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final state = StoreProvider.of<AppState>(context).state;
|
final state = StoreProvider.of<AppState>(context).state;
|
||||||
final localization = AppLocalization.of(context);
|
|
||||||
final ThemeData themeData = Theme.of(context);
|
|
||||||
final TextStyle aboutTextStyle = themeData.textTheme.body2;
|
|
||||||
final TextStyle linkStyle =
|
|
||||||
themeData.textTheme.body2.copyWith(color: themeData.accentColor);
|
|
||||||
|
|
||||||
void showAbout() {
|
|
||||||
showAboutDialog(
|
|
||||||
context: context,
|
|
||||||
applicationName: 'Invoice Ninja',
|
|
||||||
applicationIcon: Image.asset(
|
|
||||||
'assets/images/logo.png',
|
|
||||||
width: 40.0,
|
|
||||||
height: 40.0,
|
|
||||||
),
|
|
||||||
applicationVersion: 'Version: $kAppVersion',
|
|
||||||
applicationLegalese: '© ${DateTime.now().year} Invoice Ninja',
|
|
||||||
children: <Widget>[
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 24.0),
|
|
||||||
child: RichText(
|
|
||||||
text: TextSpan(
|
|
||||||
children: <TextSpan>[
|
|
||||||
TextSpan(
|
|
||||||
style: aboutTextStyle,
|
|
||||||
text: localization.thankYouForUsingOurApp +
|
|
||||||
'\n\n' +
|
|
||||||
localization.ifYouLikeIt,
|
|
||||||
),
|
|
||||||
_LinkTextSpan(
|
|
||||||
style: linkStyle,
|
|
||||||
url: getAppURL(context),
|
|
||||||
text: ' ' + localization.clickHere + ' ',
|
|
||||||
),
|
|
||||||
TextSpan(
|
|
||||||
style: aboutTextStyle,
|
|
||||||
text: localization.toRateIt,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
color: Theme.of(context).bottomAppBarColor,
|
color: Theme.of(context).bottomAppBarColor,
|
||||||
|
|
@ -376,9 +334,14 @@ class SidebarFooter extends StatelessWidget {
|
||||||
icon: Icon(Icons.help_outline),
|
icon: Icon(Icons.help_outline),
|
||||||
onPressed: () => launch('https://docs.invoiceninja.com'),
|
onPressed: () => launch('https://docs.invoiceninja.com'),
|
||||||
),
|
),
|
||||||
|
IconButton(
|
||||||
|
icon: Icon(Icons.group),
|
||||||
|
onPressed: () =>
|
||||||
|
launch('https://www.invoiceninja.com/forums/forum/support'),
|
||||||
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(Icons.info_outline),
|
icon: Icon(Icons.info_outline),
|
||||||
onPressed: () => showAbout(),
|
onPressed: () => _showAbout(context),
|
||||||
),
|
),
|
||||||
if (kDebugMode)
|
if (kDebugMode)
|
||||||
IconButton(
|
IconButton(
|
||||||
|
|
@ -430,3 +393,96 @@ class SidebarFooter extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SidebarFooterCollapsed extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final localization = AppLocalization.of(context);
|
||||||
|
return PopupMenuButton<String>(
|
||||||
|
icon: Icon(Icons.info_outline),
|
||||||
|
onSelected: (value) {
|
||||||
|
if (value == localization.about) {
|
||||||
|
_showAbout(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
itemBuilder: (BuildContext context) => [
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
child: ListTile(
|
||||||
|
leading: Icon(Icons.mail),
|
||||||
|
title: Text(localization.contactUs),
|
||||||
|
),
|
||||||
|
value: localization.contactUs,
|
||||||
|
),
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
child: ListTile(
|
||||||
|
leading: Icon(Icons.help_outline),
|
||||||
|
title: Text(localization.documentation),
|
||||||
|
),
|
||||||
|
value: localization.documentation,
|
||||||
|
),
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
child: ListTile(
|
||||||
|
leading: Icon(Icons.group),
|
||||||
|
title: Text(localization.supportForum),
|
||||||
|
),
|
||||||
|
value: localization.supportForum,
|
||||||
|
),
|
||||||
|
PopupMenuItem<String>(
|
||||||
|
child: ListTile(
|
||||||
|
leading: Icon(Icons.info_outline),
|
||||||
|
title: Text(localization.about),
|
||||||
|
),
|
||||||
|
value: localization.about,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showAbout(BuildContext context) {
|
||||||
|
|
||||||
|
final localization = AppLocalization.of(context);
|
||||||
|
final ThemeData themeData = Theme.of(context);
|
||||||
|
final TextStyle aboutTextStyle = themeData.textTheme.body2;
|
||||||
|
final TextStyle linkStyle =
|
||||||
|
themeData.textTheme.body2.copyWith(color: themeData.accentColor);
|
||||||
|
|
||||||
|
|
||||||
|
showAboutDialog(
|
||||||
|
context: context,
|
||||||
|
applicationName: 'Invoice Ninja',
|
||||||
|
applicationIcon: Image.asset(
|
||||||
|
'assets/images/logo.png',
|
||||||
|
width: 40.0,
|
||||||
|
height: 40.0,
|
||||||
|
),
|
||||||
|
applicationVersion: 'Version: $kAppVersion',
|
||||||
|
applicationLegalese: '© ${DateTime.now().year} Invoice Ninja',
|
||||||
|
children: <Widget>[
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 24.0),
|
||||||
|
child: RichText(
|
||||||
|
text: TextSpan(
|
||||||
|
children: <TextSpan>[
|
||||||
|
TextSpan(
|
||||||
|
style: aboutTextStyle,
|
||||||
|
text: localization.thankYouForUsingOurApp +
|
||||||
|
'\n\n' +
|
||||||
|
localization.ifYouLikeIt,
|
||||||
|
),
|
||||||
|
_LinkTextSpan(
|
||||||
|
style: linkStyle,
|
||||||
|
url: getAppURL(context),
|
||||||
|
text: ' ' + localization.clickHere + ' ',
|
||||||
|
),
|
||||||
|
TextSpan(
|
||||||
|
style: aboutTextStyle,
|
||||||
|
text: localization.toRateIt,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,10 @@ abstract class LocaleCodeAware {
|
||||||
mixin LocalizationsProvider on LocaleCodeAware {
|
mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
static final Map<String, Map<String, String>> _localizedValues = {
|
static final Map<String, Map<String, String>> _localizedValues = {
|
||||||
'en': {
|
'en': {
|
||||||
|
'support_forum': 'Support Forum',
|
||||||
|
'about': 'About',
|
||||||
|
'documentation': 'Documentation',
|
||||||
|
'contact_us': 'Contact Us',
|
||||||
'subtotal': 'Subtotal',
|
'subtotal': 'Subtotal',
|
||||||
'line_total': 'Line Total',
|
'line_total': 'Line Total',
|
||||||
'item': 'Item',
|
'item': 'Item',
|
||||||
|
|
@ -15851,6 +15855,15 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
|
|
||||||
String get subtotal => _localizedValues[localeCode]['subtotal'];
|
String get subtotal => _localizedValues[localeCode]['subtotal'];
|
||||||
|
|
||||||
|
String get contactUs => _localizedValues[localeCode]['contact_us'];
|
||||||
|
|
||||||
|
String get documentation => _localizedValues[localeCode]['documentation'];
|
||||||
|
|
||||||
|
String get about => _localizedValues[localeCode]['about'];
|
||||||
|
|
||||||
|
String get supportForum => _localizedValues[localeCode]['support_forum'];
|
||||||
|
|
||||||
|
|
||||||
String lookup(String key) {
|
String lookup(String key) {
|
||||||
final lookupKey = toSnakeCase(key);
|
final lookupKey = toSnakeCase(key);
|
||||||
return _localizedValues[localeCode][lookupKey] ??
|
return _localizedValues[localeCode][lookupKey] ??
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue