Compare commits

..

5 commits

Author SHA1 Message Date
github-actions[bot]
f569041ab3 chore(release): bump version to v0.0.17
Some checks are pending
Flutter CI & Release / Test (push) Waiting to run
Flutter CI & Release / Build Android APKs (push) Blocked by required conditions
Flutter CI & Release / build_linux (push) Blocked by required conditions
Flutter CI & Release / Create GitHub Release (push) Blocked by required conditions
2025-04-10 14:22:52 +00:00
Dr.Blank
39d051746b
update label regex 2025-04-10 19:46:57 +05:30
Dr.Blank
4ebf46d2fd
chore: remove deprecated apis (#74)
* dart format + remove withopacity

* remove unused imports
2025-04-10 19:42:08 +05:30
Dr.Blank
4af16ac5b4
ci: add format check for lib/ 2025-04-10 19:38:18 +05:30
Dr.Blank
28ceca5408
fix: bug login not shown for some languages (#73)
* fix language preventing logging in

* make eye blink once
2025-04-10 19:12:20 +05:30
27 changed files with 214 additions and 169 deletions

View file

@ -40,7 +40,7 @@ template: |
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
exclude-labels: exclude-labels:
- "skip-changelog" - "skip changelog"
exclude-contributors: exclude-contributors:
- "Dr-Blank" - "Dr-Blank"
@ -55,15 +55,15 @@ autolabeler:
branch: branch:
- '/feature\/.+/' - '/feature\/.+/'
title: title:
- "/feat(ure)?/i" - "/^feat(ure)?/i"
body: body:
- "/JIRA-[0-9]{1,4}/" - "/JIRA-[0-9]{1,4}/"
- label: "chore" - label: "chore"
title: title:
- "/chore/i" - "/^chore\b/i"
- label: "ui" - label: "ui"
title: title:
- "/^ui\b/i" - "/^ui\b/i"
- label: "refactor" - label: "refactor"
title: title:
- "/refactor/i" - "/^refactor/i"

View file

@ -48,6 +48,10 @@ jobs:
# - name: Run static analysis # - name: Run static analysis
# run: flutter analyze # run: flutter analyze
- name: Check formatting
run: |
dart format -o none --set-exit-if-changed lib/
- name: Run tests - name: Run tests
run: flutter test run: flutter test

View file

@ -10,5 +10,4 @@ class HeroTagPrefixes {
static const String bookTitle = 'book_title_'; static const String bookTitle = 'book_title_';
static const String narratorName = 'narrator_name_'; static const String narratorName = 'narrator_name_';
static const String libraryItemPlayButton = 'library_item_play_button_'; static const String libraryItemPlayButton = 'library_item_play_button_';
} }

View file

@ -98,8 +98,10 @@ class MySearchBar extends HookConsumerWidget {
// opacity: 0.5 for the hint text // opacity: 0.5 for the hint text
hintStyle: WidgetStatePropertyAll( hintStyle: WidgetStatePropertyAll(
Theme.of(context).textTheme.bodyMedium!.copyWith( Theme.of(context).textTheme.bodyMedium!.copyWith(
color: color: Theme.of(context)
Theme.of(context).colorScheme.onSurface.withOpacity(0.5), .colorScheme
.onSurface
.withValues(alpha: 0.5),
), ),
), ),
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,

View file

@ -199,8 +199,10 @@ class _LibraryItemProgressIndicator extends HookConsumerWidget {
'${remainingTime.smartBinaryFormat} left', '${remainingTime.smartBinaryFormat} left',
style: Theme.of(context).textTheme.bodySmall?.copyWith( style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: color: Theme.of(context)
Theme.of(context).colorScheme.onSurface.withOpacity(0.75), .colorScheme
.onSurface
.withValues(alpha: 0.75),
), ),
), ),
], ],
@ -227,7 +229,7 @@ class _HeroSectionSubLabelWithIcon extends HookConsumerWidget {
ref.watch(appSettingsProvider).themeSettings.useMaterialThemeOnItemPage; ref.watch(appSettingsProvider).themeSettings.useMaterialThemeOnItemPage;
final color = useMaterialThemeOnItemPage final color = useMaterialThemeOnItemPage
? themeData.colorScheme.primary ? themeData.colorScheme.primary
: themeData.colorScheme.onSurface.withOpacity(0.75); : themeData.colorScheme.onSurface.withValues(alpha: 0.75);
return Padding( return Padding(
padding: const EdgeInsets.only(bottom: 8.0), padding: const EdgeInsets.only(bottom: 8.0),
child: Row( child: Row(
@ -443,7 +445,7 @@ class _BookTitle extends StatelessWidget {
? const SizedBox.shrink() ? const SizedBox.shrink()
: Text( : Text(
style: themeData.textTheme.titleSmall?.copyWith( style: themeData.textTheme.titleSmall?.copyWith(
color: themeData.colorScheme.onSurface.withOpacity(0.8), color: themeData.colorScheme.onSurface.withValues(alpha: 0.8),
), ),
itemBookMetadata?.subtitle ?? '', itemBookMetadata?.subtitle ?? '',
), ),

View file

@ -96,7 +96,10 @@ class LibraryItemMetadata extends HookConsumerWidget {
return VerticalDivider( return VerticalDivider(
indent: 6, indent: 6,
endIndent: 6, endIndent: 6,
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6), color: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.6),
); );
}, },
), ),
@ -125,7 +128,7 @@ class _MetadataItem extends StatelessWidget {
children: [ children: [
Text( Text(
style: themeData.textTheme.titleMedium?.copyWith( style: themeData.textTheme.titleMedium?.copyWith(
color: themeData.colorScheme.onSurface.withOpacity(0.90), color: themeData.colorScheme.onSurface.withValues(alpha: 0.90),
), ),
value, value,
maxLines: 1, maxLines: 1,
@ -133,7 +136,7 @@ class _MetadataItem extends StatelessWidget {
), ),
Text( Text(
style: themeData.textTheme.bodySmall?.copyWith( style: themeData.textTheme.bodySmall?.copyWith(
color: themeData.colorScheme.onSurface.withOpacity(0.7), color: themeData.colorScheme.onSurface.withValues(alpha: 0.7),
), ),
title, title,
maxLines: 1, maxLines: 1,

View file

@ -13,6 +13,37 @@ class OnboardingSinglePage extends HookConsumerWidget {
super.key, super.key,
}); });
@override
Widget build(BuildContext context, WidgetRef ref) {
return Scaffold(
body: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
return Center(
child: SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
maxWidth: 600,
minWidth:
constraints.maxWidth < 600 ? constraints.maxWidth : 0,
),
child: const Padding(
padding: EdgeInsets.symmetric(vertical: 20.0),
child: SafeArea(child: OnboardingBody()),
),
),
),
);
},
),
);
}
}
class OnboardingBody extends HookConsumerWidget {
const OnboardingBody({
super.key,
});
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final apiSettings = ref.watch(apiSettingsProvider); final apiSettings = ref.watch(apiSettingsProvider);
@ -39,10 +70,9 @@ class OnboardingSinglePage extends HookConsumerWidget {
); );
} }
return Scaffold( return Column(
body: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
@ -82,6 +112,9 @@ class OnboardingSinglePage extends HookConsumerWidget {
}, },
), ),
), ),
const SizedBox.square(
dimension: 16.0,
),
AnimatedSwitcher( AnimatedSwitcher(
duration: 500.ms, duration: 500.ms,
transitionBuilder: fadeSlideTransitionBuilder, transitionBuilder: fadeSlideTransitionBuilder,
@ -96,8 +129,6 @@ class OnboardingSinglePage extends HookConsumerWidget {
), ),
), ),
], ],
),
),
); );
} }
} }

View file

@ -130,11 +130,11 @@ class UserLoginMultipleAuth extends HookConsumerWidget {
return Center( return Center(
child: InactiveFocusScopeObserver( child: InactiveFocusScopeObserver(
child: AutofillGroup( child: AutofillGroup(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
children: [ children: [
Wrap( Padding(
padding: const EdgeInsets.all(8.0),
child: Wrap(
// mainAxisAlignment: MainAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.center,
spacing: 10, spacing: 10,
runAlignment: WrapAlignment.center, runAlignment: WrapAlignment.center,
@ -174,10 +174,10 @@ class UserLoginMultipleAuth extends HookConsumerWidget {
), ),
], ],
), ),
const SizedBox.square(
dimension: 8,
), ),
switch (methodChoice.value) { Padding(
padding: const EdgeInsets.all(8.0),
child: switch (methodChoice.value) {
AuthMethodChoice.authToken => UserLoginWithToken( AuthMethodChoice.authToken => UserLoginWithToken(
server: server, server: server,
addServer: addServer, addServer: addServer,
@ -192,8 +192,8 @@ class UserLoginMultipleAuth extends HookConsumerWidget {
openIDButtonText: openIDButtonText, openIDButtonText: openIDButtonText,
), ),
}, },
],
), ),
],
), ),
), ),
), ),

View file

@ -29,6 +29,7 @@ class UserLoginWithPassword extends HookConsumerWidget {
final usernameController = useTextEditingController(); final usernameController = useTextEditingController();
final passwordController = useTextEditingController(); final passwordController = useTextEditingController();
final isPasswordVisibleAnimationController = useAnimationController( final isPasswordVisibleAnimationController = useAnimationController(
initialValue: 1,
duration: const Duration(milliseconds: 500), duration: const Duration(milliseconds: 500),
); );
@ -92,8 +93,6 @@ class UserLoginWithPassword extends HookConsumerWidget {
return Center( return Center(
child: InactiveFocusScopeObserver( child: InactiveFocusScopeObserver(
child: AutofillGroup( child: AutofillGroup(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
@ -108,7 +107,7 @@ class UserLoginWithPassword extends HookConsumerWidget {
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.onSurface .onSurface
.withOpacity(0.8), .withValues(alpha: 0.8),
), ),
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
), ),
@ -128,12 +127,15 @@ class UserLoginWithPassword extends HookConsumerWidget {
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.onSurface .onSurface
.withOpacity(0.8), .withValues(alpha: 0.8),
), ),
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
suffixIcon: ColorFiltered( suffixIcon: ColorFiltered(
colorFilter: ColorFilter.mode( colorFilter: ColorFilter.mode(
Theme.of(context).colorScheme.primary.withOpacity(0.8), Theme.of(context)
.colorScheme
.primary
.withValues(alpha: 0.8),
BlendMode.srcIn, BlendMode.srcIn,
), ),
child: InkWell( child: InkWell(
@ -164,7 +166,6 @@ class UserLoginWithPassword extends HookConsumerWidget {
), ),
), ),
), ),
),
); );
} }
} }

View file

@ -84,7 +84,10 @@ class UserLoginWithToken extends HookConsumerWidget {
decoration: InputDecoration( decoration: InputDecoration(
labelText: 'API Token', labelText: 'API Token',
labelStyle: TextStyle( labelStyle: TextStyle(
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.8), color: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.8),
), ),
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
), ),

View file

@ -104,8 +104,10 @@ class PlayerWhenExpanded extends HookConsumerWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: color: Theme.of(context)
Theme.of(context).colorScheme.primary.withOpacity(0.1), .colorScheme
.primary
.withValues(alpha: 0.1),
blurRadius: 32 * earlyPercentage, blurRadius: 32 * earlyPercentage,
spreadRadius: 8 * earlyPercentage, spreadRadius: 8 * earlyPercentage,
// offset: Offset(0, 16 * earlyPercentage), // offset: Offset(0, 16 * earlyPercentage),
@ -171,7 +173,7 @@ class PlayerWhenExpanded extends HookConsumerWidget {
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.onSurface .onSurface
.withOpacity(0.7), .withValues(alpha: 0.7),
), ),
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,

View file

@ -93,7 +93,7 @@ class PlayerWhenMinimized extends HookConsumerWidget {
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.onSurface .onSurface
.withOpacity(0.7), .withValues(alpha: 0.7),
), ),
), ),
], ],

View file

@ -6,7 +6,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:list_wheel_scroll_view_nls/list_wheel_scroll_view_nls.dart'; import 'package:list_wheel_scroll_view_nls/list_wheel_scroll_view_nls.dart';
import 'package:vaani/features/player/providers/audiobook_player.dart'; import 'package:vaani/features/player/providers/audiobook_player.dart';
import 'package:vaani/settings/app_settings_provider.dart'; import 'package:vaani/settings/app_settings_provider.dart';
import 'package:vaani/shared/hooks.dart';
const double itemExtent = 25; const double itemExtent = 25;

View file

@ -11,7 +11,6 @@ import 'package:vaani/features/sleep_timer/providers/sleep_timer_provider.dart'
import 'package:vaani/main.dart'; import 'package:vaani/main.dart';
import 'package:vaani/settings/app_settings_provider.dart'; import 'package:vaani/settings/app_settings_provider.dart';
import 'package:vaani/shared/extensions/duration_format.dart'; import 'package:vaani/shared/extensions/duration_format.dart';
import 'package:vaani/shared/hooks.dart';
class SleepTimerButton extends HookConsumerWidget { class SleepTimerButton extends HookConsumerWidget {
const SleepTimerButton({ const SleepTimerButton({

View file

@ -261,9 +261,7 @@ class ServerManagerPage extends HookConsumerWidget {
}, },
), ),
), ),
MiniPlayerBottomPadding(), MiniPlayerBottomPadding(),
], ],
), ),
), ),

View file

@ -76,7 +76,7 @@ class HomePage extends HookConsumerWidget {
child: ListView.separated( child: ListView.separated(
itemBuilder: (context, index) => shelvesToDisplay[index], itemBuilder: (context, index) => shelvesToDisplay[index],
separatorBuilder: (context, index) => Divider( separatorBuilder: (context, index) => Divider(
color: Theme.of(context).dividerColor.withOpacity(0.1), color: Theme.of(context).dividerColor.withValues(alpha: 0.1),
indent: 16, indent: 16,
endIndent: 16, endIndent: 16,
), ),

View file

@ -61,7 +61,7 @@ class LibraryPage extends HookConsumerWidget {
child: ListView.separated( child: ListView.separated(
itemBuilder: (context, index) => shelvesToDisplay[index], itemBuilder: (context, index) => shelvesToDisplay[index],
separatorBuilder: (context, index) => Divider( separatorBuilder: (context, index) => Divider(
color: Theme.of(context).dividerColor.withOpacity(0.1), color: Theme.of(context).dividerColor.withValues(alpha: 0.1),
indent: 16, indent: 16,
endIndent: 16, endIndent: 16,
), ),

View file

@ -16,5 +16,4 @@ class LibraryItemExtras with _$LibraryItemExtras {
BookMinified? book, BookMinified? book,
@Default('') String heroTagSuffix, @Default('') String heroTagSuffix,
}) = _LibraryItemExtras; }) = _LibraryItemExtras;
} }

View file

@ -1,6 +1,5 @@
import 'package:flutter/foundation.dart' show immutable; import 'package:flutter/foundation.dart' show immutable;
@immutable @immutable
class AppMetadata { class AppMetadata {
const AppMetadata._(); const AppMetadata._();

View file

@ -40,7 +40,7 @@ class NavigationWithSwitchTile extends AbstractSettingsTile {
child: Row( child: Row(
children: [ children: [
VerticalDivider( VerticalDivider(
color: Theme.of(context).dividerColor.withOpacity(0.5), color: Theme.of(context).dividerColor.withValues(alpha: 0.5),
indent: 8.0, indent: 8.0,
endIndent: 8.0, endIndent: 8.0,
), ),

View file

@ -1,4 +1,3 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';

View file

@ -68,7 +68,7 @@ class AddNewServer extends HookConsumerWidget {
decoration: InputDecoration( decoration: InputDecoration(
labelText: 'Server URI', labelText: 'Server URI',
labelStyle: TextStyle( labelStyle: TextStyle(
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.8), color: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.8),
), ),
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
prefixText: prefixText:

View file

@ -3,7 +3,6 @@ import 'package:go_router/go_router.dart';
import 'package:vaani/features/you/view/server_manager.dart'; import 'package:vaani/features/you/view/server_manager.dart';
import 'package:vaani/router/router.dart'; import 'package:vaani/router/router.dart';
class MyDrawer extends StatelessWidget { class MyDrawer extends StatelessWidget {
const MyDrawer({ const MyDrawer({
super.key, super.key,

View file

@ -255,8 +255,10 @@ class _BookOnShelfPlayButton extends HookConsumerWidget {
child: CircularProgressIndicator( child: CircularProgressIndicator(
value: userProgress.progress, value: userProgress.progress,
strokeWidth: strokeWidth, strokeWidth: strokeWidth,
backgroundColor: backgroundColor: Theme.of(context)
Theme.of(context).colorScheme.onPrimary.withOpacity(0.8), .colorScheme
.onPrimary
.withValues(alpha: 0.8),
valueColor: AlwaysStoppedAnimation<Color>( valueColor: AlwaysStoppedAnimation<Color>(
Theme.of(context).colorScheme.primary, Theme.of(context).colorScheme.primary,
), ),
@ -274,7 +276,10 @@ class _BookOnShelfPlayButton extends HookConsumerWidget {
const Size(size, size), const Size(size, size),
), ),
backgroundColor: WidgetStateProperty.all( backgroundColor: WidgetStateProperty.all(
Theme.of(context).colorScheme.onPrimary.withOpacity(0.9), Theme.of(context)
.colorScheme
.onPrimary
.withValues(alpha: 0.9),
), ),
), ),
onPressed: () async { onPressed: () async {
@ -316,9 +321,10 @@ class BookCoverSkeleton extends StatelessWidget {
child: SizedBox( child: SizedBox(
width: 150, width: 150,
child: Shimmer.fromColors( child: Shimmer.fromColors(
baseColor: Theme.of(context).colorScheme.surface.withOpacity(0.3), baseColor:
Theme.of(context).colorScheme.surface.withValues(alpha: 0.3),
highlightColor: highlightColor:
Theme.of(context).colorScheme.onSurface.withOpacity(0.1), Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.1),
child: Container( child: Container(
color: Theme.of(context).colorScheme.surface, color: Theme.of(context).colorScheme.surface,
), ),

View file

@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 0.0.16+7 version: 0.0.17+8
environment: environment:
sdk: ">=3.3.4 <4.0.0" sdk: ">=3.3.4 <4.0.0"

@ -1 +1 @@
Subproject commit ac8e94df7b28c4334165a11c3b445cd0cc497495 Subproject commit 5cc545ca87c05615473ab9c363cfa29e341d1e2a