Adapted settings to tablet

This commit is contained in:
Juan Gilsanz Polo
2024-02-28 20:50:40 +01:00
parent d13e521481
commit 36b27839c7
9 changed files with 251 additions and 8 deletions

View File

@@ -2,21 +2,50 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_split_view/flutter_split_view.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:linkdy/providers/router.provider.dart';
import 'package:linkdy/router/paths.dart';
import 'package:linkdy/screens/settings/ui/customization/customization.dart';
import 'package:linkdy/screens/settings/provider/settings.provider.dart';
import 'package:linkdy/screens/settings/ui/general_settings/general_settings.dart';
import 'package:linkdy/widgets/section_label.dart';
import 'package:linkdy/widgets/custom_list_tile.dart';
import 'package:linkdy/widgets/custom_settings_tile.dart';
import 'package:linkdy/providers/app_info.provider.dart';
import 'package:linkdy/utils/open_url.dart';
import 'package:linkdy/constants/strings.dart';
import 'package:linkdy/config/sizes.dart';
import 'package:linkdy/constants/urls.dart';
import 'package:linkdy/i18n/strings.g.dart';
class SettingsScreen extends ConsumerWidget {
const SettingsScreen({Key? key}) : super(key: key);
const SettingsScreen({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
return LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > Sizes.tabletBreakpoint) {
return const SplitView.material(
hideDivider: true,
flexWidth: FlexWidth(mainViewFlexWidth: 1, secondaryViewFlexWidth: 2),
child: _List(tabletView: true),
);
} else {
return const _List(tabletView: false);
}
},
);
}
}
class _List extends ConsumerWidget {
final bool tabletView;
const _List({
required this.tabletView,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
@@ -27,17 +56,21 @@ class SettingsScreen extends ConsumerWidget {
body: ListView(
children: [
SectionLabel(label: t.settings.appSettings),
CustomListTile(
_SettingsTile(
icon: Icons.palette_rounded,
title: t.settings.customization.customization,
subtitle: t.settings.customization.customizationDescription,
onTap: () => ref.read(routerProvider).push(RoutesPaths.customization),
thisItem: 0,
twoColumns: tabletView,
screenToNavigate: const Customization(),
),
CustomListTile(
_SettingsTile(
icon: Icons.settings_rounded,
title: t.settings.generalSettings.generalSettings,
subtitle: t.settings.generalSettings.generalSettingsDescription,
onTap: () => ref.read(routerProvider).push(RoutesPaths.generalSettings),
thisItem: 1,
screenToNavigate: const GeneralSettings(),
twoColumns: tabletView,
),
SectionLabel(label: t.settings.aboutApp),
CustomListTile(
@@ -82,3 +115,51 @@ class SettingsScreen extends ConsumerWidget {
);
}
}
class _SettingsTile extends ConsumerWidget {
final String title;
final String subtitle;
final IconData icon;
final Widget? trailing;
final Widget screenToNavigate;
final int thisItem;
final bool twoColumns;
const _SettingsTile({
required this.title,
required this.subtitle,
required this.icon,
this.trailing,
required this.screenToNavigate,
required this.thisItem,
required this.twoColumns,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
if (twoColumns) {
return CustomSettingsTile(
title: title,
subtitle: subtitle,
icon: icon,
trailing: trailing,
thisItem: thisItem,
selectedItem: ref.watch(settingsProvider).selectedScreen,
onTap: () {
ref.read(settingsProvider.notifier).setSelectedScreen(thisItem);
SplitView.of(context).setSecondary(screenToNavigate);
},
);
} else {
return CustomListTile(
title: title,
subtitle: subtitle,
icon: icon,
trailing: trailing,
onTap: () {
Navigator.of(context, rootNavigator: true).push(MaterialPageRoute(builder: (context) => screenToNavigate));
},
);
}
}
}