diff --git a/lib/ui/views/patcher/patcher_view.dart b/lib/ui/views/patcher/patcher_view.dart index c2f9bfb6..bf53dd5c 100644 --- a/lib/ui/views/patcher/patcher_view.dart +++ b/lib/ui/views/patcher/patcher_view.dart @@ -29,11 +29,11 @@ class PatcherView extends StatelessWidget { ), body: SafeArea( child: SingleChildScrollView( - padding: const EdgeInsets.all(12.0), + padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const SizedBox(height: 12), + const SizedBox(height: 60), I18nText( 'patcherView.widgetTitle', child: Text( diff --git a/lib/ui/views/settings/settings_view.dart b/lib/ui/views/settings/settings_view.dart index 81ab1bca..a3fb2fb2 100644 --- a/lib/ui/views/settings/settings_view.dart +++ b/lib/ui/views/settings/settings_view.dart @@ -5,6 +5,7 @@ import 'package:revanced_manager/constants.dart'; import 'package:revanced_manager/theme.dart'; import 'package:revanced_manager/ui/views/settings/settings_viewmodel.dart'; import 'package:revanced_manager/ui/widgets/settingsView/about_info_widget.dart'; +import 'package:revanced_manager/ui/widgets/settingsView/settings_switch_item.dart'; import 'package:stacked/stacked.dart'; import 'package:stacked_themes/stacked_themes.dart'; @@ -20,11 +21,11 @@ class SettingsView extends StatelessWidget { builder: (context, SettingsViewModel model, child) => Scaffold( body: SafeArea( child: Padding( - padding: const EdgeInsets.all(12.0), + padding: const EdgeInsets.symmetric(horizontal: 12.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const SizedBox(height: 12), + const SizedBox(height: 60), I18nText( 'settingsView.widgetTitle', child: Text( @@ -36,22 +37,14 @@ class SettingsView extends StatelessWidget { ), ), const SizedBox(height: 12), - ListTile( - title: I18nText( - 'settingsView.themeLabel', - child: Text( - '', - style: kSettingItemTextStyle, - ), - ), - subtitle: I18nText('settingsView.themeHint'), - trailing: Switch( - value: isDark, - onChanged: (value) { - isDark = value; - getThemeManager(context).toggleDarkLightTheme(); - }, - ), + SettingsSwitchItem( + title: 'settingsView.themeLabel', + subtitle: 'settingsView.themeHint', + value: isDark, + onTap: (value) { + isDark = value; + getThemeManager(context).toggleDarkLightTheme(); + }, ), ListTile( title: I18nText( diff --git a/lib/ui/widgets/settingsView/custom_switch.dart b/lib/ui/widgets/settingsView/custom_switch.dart new file mode 100644 index 00000000..dce2ffc5 --- /dev/null +++ b/lib/ui/widgets/settingsView/custom_switch.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; + +class CustomSwitch extends StatelessWidget { + final ValueChanged onChanged; + final bool value; + const CustomSwitch({ + Key? key, + required this.onChanged, + required this.value, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + Color? activeColor = Theme.of(context).colorScheme.tertiary; + Color? inactiveColor = Theme.of(context).colorScheme.secondary; + return GestureDetector( + onTap: () { + onChanged(!value); + Fluttertoast.showToast(msg: 'Rooted: ${!value}'); + }, + child: SizedBox( + height: 25, + width: 50, + child: Stack( + children: [ + AnimatedContainer( + height: 25, + width: 50, + curve: Curves.ease, + duration: const Duration(milliseconds: 500), + decoration: BoxDecoration( + borderRadius: const BorderRadius.all( + Radius.circular(25.0), + ), + color: !value ? activeColor : inactiveColor, + ), + ), + AnimatedAlign( + curve: Curves.ease, + duration: const Duration(milliseconds: 500), + alignment: !value ? Alignment.centerLeft : Alignment.centerRight, + child: Container( + height: 20, + width: 20, + margin: const EdgeInsets.symmetric(horizontal: 3), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black12.withOpacity(0.1), + spreadRadius: 0.5, + blurRadius: 1, + ) + ], + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/ui/widgets/settingsView/settings_switch_item.dart b/lib/ui/widgets/settingsView/settings_switch_item.dart new file mode 100644 index 00000000..956b2a31 --- /dev/null +++ b/lib/ui/widgets/settingsView/settings_switch_item.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_i18n/widgets/I18nText.dart'; +import 'package:revanced_manager/constants.dart'; +import 'package:revanced_manager/ui/widgets/settingsView/custom_switch.dart'; + +class SettingsSwitchItem extends StatelessWidget { + final String title; + final String subtitle; + final bool value; + final Function(bool) onTap; + + const SettingsSwitchItem({ + Key? key, + required this.title, + required this.subtitle, + required this.value, + required this.onTap, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return ListTile( + title: I18nText( + title, + child: Text( + '', + style: kSettingItemTextStyle, + ), + ), + subtitle: I18nText(subtitle), + trailing: CustomSwitch( + value: value, + onChanged: onTap, + ), + ); + } +}