diff --git a/lib/config/constants.dart b/lib/config/constants.dart index ac1eb2e6..21de8816 100644 --- a/lib/config/constants.dart +++ b/lib/config/constants.dart @@ -43,7 +43,7 @@ abstract class Constants { '٩(˘◡˘)۶', '(─‿‿─)', '(¬‿¬)', - ].pickRandomly()!; + ].randomlyPicked!; static final String sadFace = [ 'ಥ_ಥ', @@ -55,13 +55,13 @@ abstract class Constants { '(ㆆ_ㆆ)', 'ʕ•́ᴥ•̀ʔっ', '(ㆆ_ㆆ)', - ].pickRandomly()!; + ].randomlyPicked!; static final String magicWord = [ 'to be over the rainbow!', 'to infinity and beyond!', 'to see the future.', - ].pickRandomly()!; + ].randomlyPicked!; static final String errorMessage = 'Something went wrong...$sadFace'; static final String loginErrorMessage = diff --git a/lib/cubits/preference/preference_state.dart b/lib/cubits/preference/preference_state.dart index 5261a8a3..c89b3bd3 100644 --- a/lib/cubits/preference/preference_state.dart +++ b/lib/cubits/preference/preference_state.dart @@ -54,8 +54,6 @@ class PreferenceState extends Equatable { bool get isFaviconEnabled => _isOn(); - bool get isEyeCandyEnabled => _isOn(); - bool get isReaderEnabled => _isOn(); bool get isMarkReadStoriesEnabled => _isOn(); diff --git a/lib/extensions/list_extension.dart b/lib/extensions/list_extension.dart index 80d5a59f..9362a072 100644 --- a/lib/extensions/list_extension.dart +++ b/lib/extensions/list_extension.dart @@ -1,7 +1,7 @@ import 'dart:math'; extension ListExtension on List { - T? pickRandomly() { + T? get randomlyPicked { if (isEmpty) return null; final Random random = Random(DateTime.now().millisecondsSinceEpoch); final int luckyNumber = random.nextInt(length); diff --git a/lib/models/preference.dart b/lib/models/preference.dart index 26bbcff2..93595b53 100644 --- a/lib/models/preference.dart +++ b/lib/models/preference.dart @@ -50,7 +50,6 @@ abstract final class Preference extends Equatable with SettingsDisplayable { const ManualPaginationPreference(), const SwipeGesturePreference(), const HapticFeedbackPreference(), - const EyeCandyModePreference(), const TrueDarkModePreference(), const DevMode(), ], @@ -316,27 +315,6 @@ final class MarkReadStoriesModePreference extends BooleanPreference { String get subtitle => 'grey out stories you have read.'; } -final class EyeCandyModePreference extends BooleanPreference { - const EyeCandyModePreference({bool? val}) - : super(val: val ?? _eyeCandyModeDefaultValue); - - static const bool _eyeCandyModeDefaultValue = false; - - @override - EyeCandyModePreference copyWith({required bool? val}) { - return EyeCandyModePreference(val: val); - } - - @override - String get key => 'eyeCandyMode'; - - @override - String get title => 'Eye Candy'; - - @override - String get subtitle => 'some sort of magic.'; -} - final class ManualPaginationPreference extends BooleanPreference { const ManualPaginationPreference({bool? val}) : super(val: val ?? _paginationModeDefaultValue); diff --git a/lib/screens/item/widgets/custom_floating_action_button.dart b/lib/screens/item/widgets/custom_floating_action_button.dart index f0a34030..751db193 100644 --- a/lib/screens/item/widgets/custom_floating_action_button.dart +++ b/lib/screens/item/widgets/custom_floating_action_button.dart @@ -33,9 +33,9 @@ class CustomFloatingActionButton extends StatelessWidget { CustomDescribedFeatureOverlay( feature: DiscoverableFeature.jumpUpButton, contentLocation: ContentLocation.above, - tapTarget: const Icon( + tapTarget: Icon( Icons.keyboard_arrow_up, - color: Palette.white, + color: Theme.of(context).colorScheme.onPrimary, ), child: InkWell( onLongPress: () => @@ -59,9 +59,9 @@ class CustomFloatingActionButton extends StatelessWidget { ), CustomDescribedFeatureOverlay( feature: DiscoverableFeature.jumpDownButton, - tapTarget: const Icon( + tapTarget: Icon( Icons.keyboard_arrow_down, - color: Palette.white, + color: Theme.of(context).colorScheme.onPrimary, ), child: InkWell( onLongPress: () { diff --git a/lib/screens/item/widgets/fav_icon_button.dart b/lib/screens/item/widgets/fav_icon_button.dart index 30500a03..fb591c2d 100644 --- a/lib/screens/item/widgets/fav_icon_button.dart +++ b/lib/screens/item/widgets/fav_icon_button.dart @@ -3,7 +3,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hacki/cubits/cubits.dart'; import 'package:hacki/models/discoverable_feature.dart'; import 'package:hacki/screens/widgets/widgets.dart'; -import 'package:hacki/styles/styles.dart'; import 'package:hacki/utils/utils.dart'; class FavIconButton extends StatelessWidget { @@ -24,7 +23,7 @@ class FavIconButton extends StatelessWidget { icon: CustomDescribedFeatureOverlay( tapTarget: Icon( isFav ? Icons.favorite : Icons.favorite_border, - color: Palette.white, + color: Theme.of(context).colorScheme.onPrimary, ), feature: DiscoverableFeature.addStoryToFavList, child: Icon( diff --git a/lib/screens/item/widgets/in_thread_search_icon_button.dart b/lib/screens/item/widgets/in_thread_search_icon_button.dart index 55e704dc..9356b90b 100644 --- a/lib/screens/item/widgets/in_thread_search_icon_button.dart +++ b/lib/screens/item/widgets/in_thread_search_icon_button.dart @@ -22,9 +22,9 @@ class InThreadSearchIconButton extends StatelessWidget { transitionType: ContainerTransitionType.fadeThrough, closedBuilder: (BuildContext context, void Function() action) { return CustomDescribedFeatureOverlay( - tapTarget: const Icon( + tapTarget: Icon( Icons.search, - color: Palette.white, + color: Theme.of(context).colorScheme.onPrimary, ), feature: DiscoverableFeature.searchInThread, child: IconButton( diff --git a/lib/screens/item/widgets/link_icon_button.dart b/lib/screens/item/widgets/link_icon_button.dart index 23ec934d..ec828a5f 100644 --- a/lib/screens/item/widgets/link_icon_button.dart +++ b/lib/screens/item/widgets/link_icon_button.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:hacki/config/constants.dart'; import 'package:hacki/models/discoverable_feature.dart'; import 'package:hacki/screens/widgets/widgets.dart'; -import 'package:hacki/styles/styles.dart'; import 'package:hacki/utils/utils.dart'; class LinkIconButton extends StatelessWidget { @@ -17,13 +16,13 @@ class LinkIconButton extends StatelessWidget { Widget build(BuildContext context) { return IconButton( tooltip: 'Open this story in browser', - icon: const CustomDescribedFeatureOverlay( + icon: CustomDescribedFeatureOverlay( tapTarget: Icon( Icons.stream, - color: Palette.white, + color: Theme.of(context).colorScheme.onPrimary, ), feature: DiscoverableFeature.openStoryInWebView, - child: Icon( + child: const Icon( Icons.stream, ), ), diff --git a/lib/screens/item/widgets/pin_icon_button.dart b/lib/screens/item/widgets/pin_icon_button.dart index 3f1103fa..2b658043 100644 --- a/lib/screens/item/widgets/pin_icon_button.dart +++ b/lib/screens/item/widgets/pin_icon_button.dart @@ -6,7 +6,6 @@ import 'package:hacki/cubits/cubits.dart'; import 'package:hacki/extensions/context_extension.dart'; import 'package:hacki/models/models.dart'; import 'package:hacki/screens/widgets/widgets.dart'; -import 'package:hacki/styles/styles.dart'; import 'package:hacki/utils/utils.dart'; class PinIconButton extends StatelessWidget { @@ -31,7 +30,7 @@ class PinIconButton extends StatelessWidget { icon: CustomDescribedFeatureOverlay( tapTarget: Icon( pinned ? Icons.push_pin : Icons.push_pin_outlined, - color: Palette.white, + color: Theme.of(context).colorScheme.onPrimary, ), feature: DiscoverableFeature.pinToTop, child: Icon( diff --git a/lib/screens/item/widgets/reply_box.dart b/lib/screens/item/widgets/reply_box.dart index 026d28c7..156fe15b 100644 --- a/lib/screens/item/widgets/reply_box.dart +++ b/lib/screens/item/widgets/reply_box.dart @@ -245,6 +245,8 @@ class _ReplyBoxState extends State with ItemActionMixin { hintStyle: TextStyle( color: Palette.grey, ), + enabledBorder: InputBorder.none, + disabledBorder: InputBorder.none, focusedBorder: InputBorder.none, border: InputBorder.none, ), diff --git a/lib/screens/log/log_screen.dart b/lib/screens/log/log_screen.dart index b8b35d5b..446d09bd 100644 --- a/lib/screens/log/log_screen.dart +++ b/lib/screens/log/log_screen.dart @@ -40,10 +40,12 @@ class LogScreen extends StatelessWidget { ), ], ), - body: ListView( - children: [ - ...?snapshot.data?.map(Text.new), - ], + body: Scrollbar( + child: ListView( + children: [ + ...?snapshot.data?.map(Text.new), + ], + ), ), ); }, diff --git a/lib/screens/profile/widgets/settings.dart b/lib/screens/profile/widgets/settings.dart index cf9d984a..e3b61eba 100644 --- a/lib/screens/profile/widgets/settings.dart +++ b/lib/screens/profile/widgets/settings.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:io'; import 'package:adaptive_theme/adaptive_theme.dart'; +import 'package:feature_discovery/feature_discovery.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; @@ -62,6 +63,12 @@ class _SettingsState extends State with ItemActionMixin, Loggable { child: Column( children: [ ListTile( + leading: Icon( + Icons.person, + color: widget.authState.isLoggedIn + ? Theme.of(context).primaryColor + : null, + ), title: Text( widget.authState.isLoggedIn ? 'Log Out' : 'Log In', ), @@ -392,7 +399,7 @@ class _SettingsState extends State with ItemActionMixin, Loggable { ), onTap: showClearCacheDialog, ), - if (preferenceState.isDevModeEnabled) + if (preferenceState.isDevModeEnabled) ...[ ListTile( title: const Text( 'Logs', @@ -401,6 +408,20 @@ class _SettingsState extends State with ItemActionMixin, Loggable { context.go(Paths.log.landing); }, ), + ListTile( + title: const Text( + 'Reset Feature Discovery', + ), + onTap: () { + HapticFeedbackUtil.light(); + FeatureDiscovery.clearPreferences( + context, + DiscoverableFeature.values + .map((DiscoverableFeature f) => f.featureId), + ); + }, + ), + ], ListTile( title: const Text('About'), subtitle: const Text('nothing interesting here.'), diff --git a/lib/screens/widgets/comment_tile.dart b/lib/screens/widgets/comment_tile.dart index 0b96d418..b736c620 100644 --- a/lib/screens/widgets/comment_tile.dart +++ b/lib/screens/widgets/comment_tile.dart @@ -75,11 +75,6 @@ class CommentTile extends StatelessWidget { final Color primaryColor = Theme.of(context).colorScheme.primary; final Brightness brightness = Theme.of(context).brightness; - final Color color = _getColor( - level, - primaryColor: primaryColor, - brightness: brightness, - ); final Widget child = DeviceGestureWrapper( child: Column( @@ -307,12 +302,7 @@ class CommentTile extends StatelessWidget { ), ); - final double commentBackgroundColorOpacity = - Theme.of(context).canvasColor != Palette.white ? 0.03 : 0.15; - - final Color commentColor = prefState.isEyeCandyEnabled - ? color.withValues(alpha: commentBackgroundColorOpacity) - : Palette.transparent; + const Color commentColor = Palette.transparent; final bool isMyComment = comment.deleted == false && context.read().state.username == comment.by; diff --git a/lib/screens/widgets/custom_tab_bar.dart b/lib/screens/widgets/custom_tab_bar.dart index 36840213..eb361b6c 100644 --- a/lib/screens/widgets/custom_tab_bar.dart +++ b/lib/screens/widgets/custom_tab_bar.dart @@ -84,10 +84,10 @@ class _CustomTabBarState extends State { Tab( child: CustomDescribedFeatureOverlay( onComplete: showOnboarding, - tapTarget: const Icon( + tapTarget: Icon( Icons.person, size: TextDimens.pt16, - color: Palette.white, + color: Theme.of(context).colorScheme.onPrimary, ), feature: DiscoverableFeature.login, child: BlocBuilder(