Hard to see scrollbar in menu in light mode

This commit is contained in:
Hillel Coren 2023-01-26 16:58:04 +02:00
parent 3d6c85e01f
commit c2d004977b
1 changed files with 340 additions and 320 deletions

View File

@ -343,341 +343,361 @@ class _MenuDrawerState extends State<MenuDrawer> {
: _expandedCompanySelector), : _expandedCompanySelector),
state.credentials.token.isEmpty state.credentials.token.isEmpty
? SizedBox() ? SizedBox()
: Expanded( : Theme(
child: Container( data: state.prefState.enableDarkMode ||
color: inactiveColor.isNotEmpty (state.prefState.customColors[PrefState
? convertHexStringToColor(inactiveColor) .THEME_SIDEBAR_INACTIVE_BACKGROUND_COLOR] ??
: Theme.of(context).cardColor, '')
child: ScrollableListView( .isNotEmpty
children: <Widget>[ ? ThemeData.dark()
if (state.account.debugEnabled && kReleaseMode) : ThemeData.light(),
if (state.isMenuCollapsed) child: Expanded(
Tooltip( child: Container(
message: localization.debugModeIsEnabled, color: inactiveColor.isNotEmpty
child: ListTile( ? convertHexStringToColor(inactiveColor)
contentPadding: : Theme.of(context).cardColor,
const EdgeInsets.only(left: 20), child: ScrollableListView(
onTap: () => children: <Widget>[
launchUrl(Uri.parse(kDebugModeUrl)), if (state.account.debugEnabled && kReleaseMode)
leading: if (state.isMenuCollapsed)
Icon(Icons.warning, color: Colors.red), Tooltip(
), message: localization.debugModeIsEnabled,
) child: ListTile(
else contentPadding:
Material( const EdgeInsets.only(left: 20),
child: ListTile( onTap: () =>
tileColor: Colors.red.shade800, launchUrl(Uri.parse(kDebugModeUrl)),
title: Padding( leading: Icon(Icons.warning,
padding: const EdgeInsets.only(bottom: 6), color: Colors.red),
child: IconText(
icon: Icons.warning,
text: localization.debugModeIsEnabled,
style: TextStyle(color: Colors.white),
), ),
), )
subtitle: Text( else
localization.debugModeIsEnabledHelp, Material(
style: TextStyle(color: Colors.white), child: ListTile(
), tileColor: Colors.red.shade800,
onTap: () => title: Padding(
launchUrl(Uri.parse(kDebugModeUrl)), padding:
), const EdgeInsets.only(bottom: 6),
), child: IconText(
if (!state.account.accountSmsVerified && icon: Icons.warning,
state.isHosted) text:
if (state.isMenuCollapsed) localization.debugModeIsEnabled,
Tooltip( style:
message: localization.verifyPhoneNumberHelp, TextStyle(color: Colors.white),
child: ListTile(
contentPadding:
const EdgeInsets.only(left: 12),
leading: IconButton(
onPressed: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
AccountSmsVerification(),
);
},
icon: Icon(Icons.warning,
color: Colors.orange),
),
),
)
else
Material(
child: ListTile(
tileColor: Colors.orange.shade800,
subtitle: Text(
localization.verifyPhoneNumberHelp,
style: TextStyle(color: Colors.white),
),
onTap: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
AccountSmsVerification(),
);
},
),
)
else if (state.user.isTwoFactorEnabled &&
!state.user.phoneVerified &&
state.isHosted)
if (state.isMenuCollapsed)
Tooltip(
message:
localization.verifyPhoneNumber2faHelp,
child: ListTile(
contentPadding:
const EdgeInsets.only(left: 12),
leading: IconButton(
onPressed: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
UserSmsVerification(
showChangeNumber: true,
), ),
); ),
}, subtitle: Text(
icon: Icon(Icons.warning, localization.debugModeIsEnabledHelp,
color: Colors.orange), style: TextStyle(color: Colors.white),
), ),
), onTap: () =>
) launchUrl(Uri.parse(kDebugModeUrl)),
else
Material(
child: ListTile(
tileColor: Colors.orange.shade800,
subtitle: Text(
localization.verifyPhoneNumber2faHelp,
style: TextStyle(color: Colors.white),
),
onTap: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
UserSmsVerification(),
);
},
),
)
else if (state.company.isDisabled &&
state.userCompany.isAdmin)
if (state.isMenuCollapsed)
Tooltip(
message: localization.companyDisabledWarning,
child: ListTile(
contentPadding:
const EdgeInsets.only(left: 12),
leading: IconButton(
onPressed: () =>
store.dispatch(ViewSettings(
section: kSettingsAccountManagement,
company: company,
)),
icon: Icon(Icons.warning,
color: Colors.orange),
),
),
)
else
Material(
child: ListTile(
tileColor: Colors.orange.shade800,
title: Padding(
padding: const EdgeInsets.only(bottom: 6),
child: IconText(
icon: Icons.warning,
text: localization.warning,
style: TextStyle(color: Colors.white),
), ),
), ),
subtitle: Text( if (!state.account.accountSmsVerified &&
localization.companyDisabledWarning, state.isHosted)
style: TextStyle(color: Colors.white), if (state.isMenuCollapsed)
Tooltip(
message:
localization.verifyPhoneNumberHelp,
child: ListTile(
contentPadding:
const EdgeInsets.only(left: 12),
leading: IconButton(
onPressed: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
AccountSmsVerification(),
);
},
icon: Icon(Icons.warning,
color: Colors.orange),
),
),
)
else
Material(
child: ListTile(
tileColor: Colors.orange.shade800,
subtitle: Text(
localization.verifyPhoneNumberHelp,
style: TextStyle(color: Colors.white),
),
onTap: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
AccountSmsVerification(),
);
},
),
)
else if (state.user.isTwoFactorEnabled &&
!state.user.phoneVerified &&
state.isHosted)
if (state.isMenuCollapsed)
Tooltip(
message:
localization.verifyPhoneNumber2faHelp,
child: ListTile(
contentPadding:
const EdgeInsets.only(left: 12),
leading: IconButton(
onPressed: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
UserSmsVerification(
showChangeNumber: true,
),
);
},
icon: Icon(Icons.warning,
color: Colors.orange),
),
),
)
else
Material(
child: ListTile(
tileColor: Colors.orange.shade800,
subtitle: Text(
localization.verifyPhoneNumber2faHelp,
style: TextStyle(color: Colors.white),
),
onTap: () {
showDialog<void>(
context: context,
builder: (BuildContext context) =>
UserSmsVerification(),
);
},
),
)
else if (state.company.isDisabled &&
state.userCompany.isAdmin)
if (state.isMenuCollapsed)
Tooltip(
message:
localization.companyDisabledWarning,
child: ListTile(
contentPadding:
const EdgeInsets.only(left: 12),
leading: IconButton(
onPressed: () =>
store.dispatch(ViewSettings(
section: kSettingsAccountManagement,
company: company,
)),
icon: Icon(Icons.warning,
color: Colors.orange),
),
),
)
else
Material(
child: ListTile(
tileColor: Colors.orange.shade800,
title: Padding(
padding:
const EdgeInsets.only(bottom: 6),
child: IconText(
icon: Icons.warning,
text: localization.warning,
style:
TextStyle(color: Colors.white),
),
),
subtitle: Text(
localization.companyDisabledWarning,
style: TextStyle(color: Colors.white),
),
onTap: () {
store.dispatch(ViewSettings(
section: kSettingsAccountManagement,
company: company,
));
},
),
), ),
onTap: () { if (state.userCompany.isOwner &&
store.dispatch(ViewSettings( state.isHosted &&
section: kSettingsAccountManagement, !isPaidAccount(context) &&
company: company, (!isApple() || supportsInAppPurchase()))
)); Material(
}, child: Tooltip(
), message: state.isMenuCollapsed
), ? localization.upgrade
if (state.userCompany.isOwner && : '',
state.isHosted && child: ListTile(
!isPaidAccount(context) && dense: true,
(!isApple() || supportsInAppPurchase())) contentPadding:
Material( const EdgeInsets.only(left: 12),
child: Tooltip( tileColor: Colors.green,
message: state.isMenuCollapsed leading: IconButton(
? localization.upgrade onPressed: () => store.dispatch(
: '', ViewSettings(
child: ListTile( clearFilter: true,
dense: true, company: company,
contentPadding: user: state.user,
const EdgeInsets.only(left: 12), section:
tileColor: Colors.green, kSettingsAccountManagement)),
leading: IconButton( icon: Icon(
onPressed: () => store.dispatch( Icons.arrow_circle_up,
ViewSettings( color: Colors.white,
),
),
title: state.isMenuCollapsed
? SizedBox()
: Text(
localization.upgrade,
style: Theme.of(context)
.textTheme
.bodyText1
.copyWith(
fontSize: 14,
color: Colors.white,
),
),
onTap: () {
store.dispatch(ViewSettings(
clearFilter: true, clearFilter: true,
company: company, company: company,
user: state.user, user: state.user,
section: section:
kSettingsAccountManagement)), kSettingsAccountManagement));
icon: Icon( },
Icons.arrow_circle_up,
color: Colors.white,
), ),
), ),
title: state.isMenuCollapsed
? SizedBox()
: Text(
localization.upgrade,
style: Theme.of(context)
.textTheme
.bodyText1
.copyWith(
fontSize: 14,
color: Colors.white,
),
),
onTap: () {
store.dispatch(ViewSettings(
clearFilter: true,
company: company,
user: state.user,
section: kSettingsAccountManagement));
},
), ),
DrawerTile(
company: company,
icon: getEntityIcon(EntityType.dashboard),
title: localization.dashboard,
onTap: () => viewEntitiesByType(
entityType: EntityType.dashboard),
onLongPress: () =>
store.dispatch(ViewDashboard(filter: '')),
), ),
), DrawerTile(
DrawerTile( company: company,
company: company, entityType: EntityType.client,
icon: getEntityIcon(EntityType.dashboard), icon: getEntityIcon(EntityType.client),
title: localization.dashboard, title: localization.clients,
onTap: () => viewEntitiesByType( iconTooltip: localization.newClient,
entityType: EntityType.dashboard), ),
onLongPress: () => DrawerTile(
store.dispatch(ViewDashboard(filter: '')), company: company,
entityType: EntityType.product,
icon: getEntityIcon(EntityType.product),
title: localization.products,
iconTooltip: localization.newProduct,
),
DrawerTile(
company: company,
entityType: EntityType.invoice,
icon: getEntityIcon(EntityType.invoice),
title: localization.invoices,
iconTooltip: localization.newInvoice,
),
DrawerTile(
company: company,
entityType: EntityType.recurringInvoice,
icon: getEntityIcon(
EntityType.recurringInvoice),
title: localization.recurringInvoices,
iconTooltip: localization.newRecurringInvoice,
),
DrawerTile(
company: company,
entityType: EntityType.payment,
icon: getEntityIcon(EntityType.payment),
title: localization.payments,
iconTooltip: localization.newPayment,
),
DrawerTile(
company: company,
entityType: EntityType.quote,
icon: getEntityIcon(EntityType.quote),
title: localization.quotes,
iconTooltip: localization.newQuote,
),
DrawerTile(
company: company,
entityType: EntityType.credit,
icon: getEntityIcon(EntityType.credit),
title: localization.credits,
iconTooltip: localization.newCredit,
),
DrawerTile(
company: company,
entityType: EntityType.project,
icon: getEntityIcon(EntityType.project),
title: localization.projects,
iconTooltip: localization.newProject,
),
DrawerTile(
company: company,
entityType: EntityType.task,
icon: getEntityIcon(EntityType.task),
title: localization.tasks,
iconTooltip: localization.newTask,
),
DrawerTile(
company: company,
entityType: EntityType.vendor,
icon: getEntityIcon(EntityType.vendor),
title: localization.vendors,
iconTooltip: localization.newVendor,
),
DrawerTile(
company: company,
entityType: EntityType.purchaseOrder,
icon: getEntityIcon(EntityType.purchaseOrder),
title: localization.purchaseOrders,
),
DrawerTile(
company: company,
entityType: EntityType.expense,
icon: getEntityIcon(EntityType.expense),
title: localization.expenses,
iconTooltip: localization.newExpense,
),
// STARTER: menu - do not remove comment
DrawerTile(
company: company,
entityType: EntityType.recurringExpense,
icon: getEntityIcon(
EntityType.recurringExpense),
title: localization.recurringExpenses,
),
DrawerTile(
company: company,
entityType: EntityType.transaction,
icon: getEntityIcon(EntityType.transaction),
title: localization.transactions,
),
if (!isApple() || state.isProPlan)
DrawerTile(
company: company,
icon: getEntityIcon(EntityType.reports),
title: localization.reports,
onTap: () => viewEntitiesByType(
entityType: EntityType.reports),
),
DrawerTile(
company: company,
icon: getEntityIcon(EntityType.settings),
title: localization.settings,
onTap: () => viewEntitiesByType(
entityType: EntityType.settings),
),
],
), ),
DrawerTile( ),
company: company,
entityType: EntityType.client,
icon: getEntityIcon(EntityType.client),
title: localization.clients,
iconTooltip: localization.newClient,
),
DrawerTile(
company: company,
entityType: EntityType.product,
icon: getEntityIcon(EntityType.product),
title: localization.products,
iconTooltip: localization.newProduct,
),
DrawerTile(
company: company,
entityType: EntityType.invoice,
icon: getEntityIcon(EntityType.invoice),
title: localization.invoices,
iconTooltip: localization.newInvoice,
),
DrawerTile(
company: company,
entityType: EntityType.recurringInvoice,
icon: getEntityIcon(EntityType.recurringInvoice),
title: localization.recurringInvoices,
iconTooltip: localization.newRecurringInvoice,
),
DrawerTile(
company: company,
entityType: EntityType.payment,
icon: getEntityIcon(EntityType.payment),
title: localization.payments,
iconTooltip: localization.newPayment,
),
DrawerTile(
company: company,
entityType: EntityType.quote,
icon: getEntityIcon(EntityType.quote),
title: localization.quotes,
iconTooltip: localization.newQuote,
),
DrawerTile(
company: company,
entityType: EntityType.credit,
icon: getEntityIcon(EntityType.credit),
title: localization.credits,
iconTooltip: localization.newCredit,
),
DrawerTile(
company: company,
entityType: EntityType.project,
icon: getEntityIcon(EntityType.project),
title: localization.projects,
iconTooltip: localization.newProject,
),
DrawerTile(
company: company,
entityType: EntityType.task,
icon: getEntityIcon(EntityType.task),
title: localization.tasks,
iconTooltip: localization.newTask,
),
DrawerTile(
company: company,
entityType: EntityType.vendor,
icon: getEntityIcon(EntityType.vendor),
title: localization.vendors,
iconTooltip: localization.newVendor,
),
DrawerTile(
company: company,
entityType: EntityType.purchaseOrder,
icon: getEntityIcon(EntityType.purchaseOrder),
title: localization.purchaseOrders,
),
DrawerTile(
company: company,
entityType: EntityType.expense,
icon: getEntityIcon(EntityType.expense),
title: localization.expenses,
iconTooltip: localization.newExpense,
),
// STARTER: menu - do not remove comment
DrawerTile(
company: company,
entityType: EntityType.recurringExpense,
icon: getEntityIcon(EntityType.recurringExpense),
title: localization.recurringExpenses,
),
DrawerTile(
company: company,
entityType: EntityType.transaction,
icon: getEntityIcon(EntityType.transaction),
title: localization.transactions,
),
if (!isApple() || state.isProPlan)
DrawerTile(
company: company,
icon: getEntityIcon(EntityType.reports),
title: localization.reports,
onTap: () => viewEntitiesByType(
entityType: EntityType.reports),
),
DrawerTile(
company: company,
icon: getEntityIcon(EntityType.settings),
title: localization.settings,
onTap: () => viewEntitiesByType(
entityType: EntityType.settings),
),
],
), ),
)), ),
SizedBox( SizedBox(
height: kTopBottomBarHeight, height: kTopBottomBarHeight,
child: AppBorder( child: AppBorder(