Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion fastlane/metadata/android/de-DE/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Wir haben einige Fehler behoben und die App verbessert.
Schaltflächen und Inhalte werden nicht mehr von der Systemleiste am unteren Bildschirmrand verdeckt. Dazu kleinere Verbesserungen an der Oberfläche.
2 changes: 1 addition & 1 deletion fastlane/metadata/android/en-GB/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
We fixed a few bugs and polished the app.
Buttons and content are no longer hidden behind the system bar at the bottom of the screen. Plus a few smaller layout fixes.
2 changes: 1 addition & 1 deletion fastlane/metadata/android/es-ES/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Hemos corregido algunos errores y pulido la aplicación.
Los botones y el contenido ya no quedan ocultos tras la barra del sistema en la parte inferior de la pantalla. Además, pequeñas mejoras en la interfaz.
2 changes: 1 addition & 1 deletion fastlane/metadata/android/fr-FR/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Nous avons corrigé quelques bugs et peaufiné l’application.
Les boutons et le contenu ne sont plus masqués par la barre système en bas de l’écran. Et quelques petites améliorations de l’interface.
2 changes: 1 addition & 1 deletion fastlane/metadata/android/it-IT/changelogs/default.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Abbiamo corretto alcuni errori e migliorato l’app.
I pulsanti e i contenuti non sono più nascosti dalla barra di sistema nella parte inferiore dello schermo. Inoltre, piccoli miglioramenti all’interfaccia.
2 changes: 1 addition & 1 deletion fastlane/metadata/ios/de-DE/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Wir haben einige Fehler behoben und die App verbessert.
Schaltflächen und Inhalte werden nicht mehr von der Systemleiste am unteren Bildschirmrand verdeckt. Dazu kleinere Verbesserungen an der Oberfläche.
2 changes: 1 addition & 1 deletion fastlane/metadata/ios/en-GB/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
We fixed a few bugs and polished the app.
Buttons and content are no longer hidden behind the system bar at the bottom of the screen. Plus a few smaller layout fixes.
2 changes: 1 addition & 1 deletion fastlane/metadata/ios/es-ES/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Hemos corregido algunos errores y pulido la aplicación.
Los botones y el contenido ya no quedan ocultos tras la barra del sistema en la parte inferior de la pantalla. Además, pequeñas mejoras en la interfaz.
2 changes: 1 addition & 1 deletion fastlane/metadata/ios/fr-FR/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Nous avons corrigé quelques bugs et peaufiné l’application.
Les boutons et le contenu ne sont plus masqués par la barre système en bas de l’écran. Et quelques petites améliorations de l’interface.
2 changes: 1 addition & 1 deletion fastlane/metadata/ios/it/release_notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Abbiamo corretto alcuni errori e migliorato l’app.
I pulsanti e i contenuti non sono più nascosti dalla barra di sistema nella parte inferiore dello schermo. Inoltre, piccoli miglioramenti all’interfaccia.
53 changes: 28 additions & 25 deletions lib/presentation/screens/auth.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,32 +29,35 @@ class AuthScreen extends StatelessWidget {
// TODO(borgoat): this shouldn't be needed: fix the navigation stack instead
automaticallyImplyLeading: false,
),
body: SingleChildScrollView(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
children: [
SupaEmailAuth(
redirectTo: _getRedirectUrl(),
// The Redux auth listener (main.dart) also reacts to sign-in, but upstream
// supabase_auth_ui requires these callbacks; navigate home to match
// SupaSocialsAuth.onSuccess below.
onSignInComplete: (response) => HomeScreenRoute().go(context),
// Email confirmation is disabled, so sign-up yields a session immediately.
// TODO: if confirmations get enabled, show a "check your email" state instead.
onSignUpComplete: (response) => HomeScreenRoute().go(context),
),
Divider(height: 64),
SupaSocialsAuth(
socialProviders: [OAuthProvider.apple, OAuthProvider.google],
nativeGoogleAuthConfig: NativeGoogleAuthConfig(
webClientId: config.socialAuthWebClientId,
iosClientId: config.socialAuthIosClientId,
body: SafeArea(
top: false,
child: SingleChildScrollView(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
children: [
SupaEmailAuth(
redirectTo: _getRedirectUrl(),
// The Redux auth listener (main.dart) also reacts to sign-in, but upstream
// supabase_auth_ui requires these callbacks; navigate home to match
// SupaSocialsAuth.onSuccess below.
onSignInComplete: (response) => HomeScreenRoute().go(context),
// Email confirmation is disabled, so sign-up yields a session immediately.
// TODO: if confirmations get enabled, show a "check your email" state instead.
onSignUpComplete: (response) => HomeScreenRoute().go(context),
),
enableNativeAppleAuth: true,
redirectUrl: _getRedirectUrl(),
onSuccess: (session) => HomeScreenRoute().go(context),
),
],
Divider(height: 64),
SupaSocialsAuth(
socialProviders: [OAuthProvider.apple, OAuthProvider.google],
nativeGoogleAuthConfig: NativeGoogleAuthConfig(
webClientId: config.socialAuthWebClientId,
iosClientId: config.socialAuthIosClientId,
),
enableNativeAppleAuth: true,
redirectUrl: _getRedirectUrl(),
onSuccess: (session) => HomeScreenRoute().go(context),
),
],
),
),
),
);
Expand Down
4 changes: 2 additions & 2 deletions lib/presentation/screens/group_member_details.dart
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ class GroupMemberDetailsScreen extends StatelessWidget {
ListTile(
leading: const Icon(Icons.group_remove_outlined),
title: Text(l10n.groupRemoveMember),
splashColor: theme.colorScheme.error.withOpacity(0.3),
splashColor: theme.colorScheme.error.withValues(alpha: 0.3),
iconColor: theme.colorScheme.error,
textColor: theme.colorScheme.error,
onTap: () => _confirmRemoveMember(context, member!),
Expand All @@ -121,7 +121,7 @@ class GroupMemberDetailsScreen extends StatelessWidget {
ListTile(
leading: const Icon(Icons.waving_hand),
title: Text(l10n.groupLeave),
splashColor: theme.colorScheme.error.withOpacity(0.3),
splashColor: theme.colorScheme.error.withValues(alpha: 0.3),
iconColor: theme.colorScheme.error,
textColor: theme.colorScheme.error,
onTap: () => _confirmRemoveMember(context, member!),
Expand Down
7 changes: 7 additions & 0 deletions lib/presentation/screens/group_schedule_details.dart
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,13 @@ class GroupScheduleDetailsScreen extends StatelessWidget {
},
),
],
// CustomScrollView slivers don't apply the bottom view inset
// automatically (unlike ListView), so pad past the system nav bar.
SliverPadding(
padding: EdgeInsets.only(
bottom: MediaQuery.paddingOf(context).bottom,
),
),
],
),
);
Expand Down
26 changes: 13 additions & 13 deletions lib/presentation/screens/locale.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,26 +26,26 @@ class LocaleScreen extends StatelessWidget {
final l10n = AppLocalizations.of(context)!;

final radioButtons = AppLocalizations.supportedLocales.map(
(l) => RadioListTile<Locale>.adaptive(
(l) => RadioListTile<Locale?>.adaptive(
title: Text(localeNames[l.languageCode] ?? l.languageCode),
groupValue: selectedLocale,
value: l,
onChanged: (l) => onLocaleChanged(l!),
),
);

return Scaffold(
appBar: AppBar(title: Text(l10n.language)),
body: Column(
children: [
RadioListTile.adaptive(
title: Text(l10n.systemLanguage),
groupValue: selectedLocale,
value: null,
onChanged: (l) => onLocaleChanged(null),
),
...radioButtons,
],
body: RadioGroup<Locale?>(
groupValue: selectedLocale,
onChanged: onLocaleChanged,
child: ListView(
children: [
RadioListTile<Locale?>.adaptive(
title: Text(l10n.systemLanguage),
value: null,
),
...radioButtons,
],
),
),
);
}
Expand Down
131 changes: 67 additions & 64 deletions lib/presentation/screens/profile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -63,77 +63,80 @@ class _ProfileScreenState extends State<ProfileScreen> {
),
],
),
body: Form(
key: _formKey,
autovalidateMode: AutovalidateMode.onUserInteraction,
onChanged: () {
setState(() {
if (_formKey.currentState!.validate()) {
_enableSaveButton = true;
} else {
_enableSaveButton = false;
}
});
},
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
children: [
ImageFormField(
controller: _imageController,
initialImage: widget.profile?.picture != null
? NetworkImage(widget.profile!.picture!)
: null,
radius: 64,
icon: Icons.person,
),
TextFormField(
focusNode: _nameFocusNode,
controller: _nameController,
decoration: InputDecoration(
labelText: l10n.enterYourName,
body: SafeArea(
top: false,
child: Form(
key: _formKey,
autovalidateMode: AutovalidateMode.onUserInteraction,
onChanged: () {
setState(() {
if (_formKey.currentState!.validate()) {
_enableSaveButton = true;
} else {
_enableSaveButton = false;
}
});
},
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
children: [
ImageFormField(
controller: _imageController,
initialImage: widget.profile?.picture != null
? NetworkImage(widget.profile!.picture!)
: null,
radius: 64,
icon: Icons.person,
),
validator: (value) {
if (value == null || value.isEmpty) {
return l10n.enterYourNamePlease;
}
return null;
},
),
// TODO(borgoat): options to link additional auth providers
],
TextFormField(
focusNode: _nameFocusNode,
controller: _nameController,
decoration: InputDecoration(
labelText: l10n.enterYourName,
),
validator: (value) {
if (value == null || value.isEmpty) {
return l10n.enterYourNamePlease;
}
return null;
},
),
// TODO(borgoat): options to link additional auth providers
],
),
),
),
),
Padding(
padding: const EdgeInsets.all(16),
child: FilledButton(
onPressed: _enableSaveButton
? () {
if (_formKey.currentState!.validate()) {
setState(() {
_enableSaveButton = false;
});
_formKey.currentState!.save();
_nameFocusNode.unfocus();
widget.onSave((
_nameController.text.trim(),
_imageController.value,
));
Padding(
padding: const EdgeInsets.all(16),
child: FilledButton(
onPressed: _enableSaveButton
? () {
if (_formKey.currentState!.validate()) {
setState(() {
_enableSaveButton = false;
});
_formKey.currentState!.save();
_nameFocusNode.unfocus();
widget.onSave((
_nameController.text.trim(),
_imageController.value,
));

if (!(widget.userNavigated ?? false)) {
Navigator.of(context).pop(context);
if (!(widget.userNavigated ?? false)) {
Navigator.of(context).pop(context);
}
}
}
}
: null,
child: Text(l10n.save),
: null,
child: Text(l10n.save),
),
),
),
],
],
),
),
),
);
Expand Down
21 changes: 12 additions & 9 deletions lib/presentation/screens/schedule_create.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,18 @@ class _ScheduleCreateScreenState extends State<ScheduleCreateScreen> {

return Scaffold(
appBar: AppBar(title: Text(l10n.createNewEvent)),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16.0),
child: ScheduleForm(
onChanged: (schedule) {
setState(() {
_showSaveButton = true;
});
_schedule = schedule;
},
body: SafeArea(
top: false,
child: SingleChildScrollView(
padding: const EdgeInsets.all(16.0),
child: ScheduleForm(
onChanged: (schedule) {
setState(() {
_showSaveButton = true;
});
_schedule = schedule;
},
),
),
),
floatingActionButton: _showSaveButton
Expand Down
15 changes: 9 additions & 6 deletions lib/presentation/widgets/default_rule_action_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,15 @@ class DefaultRuleActionSheet extends StatelessWidget {
),
];

return Wrap(
children: [
_buildActionSheetHeader(context),
...actions,
_buildExplanationWidget(context),
],
return SafeArea(
top: false,
child: Wrap(
children: [
_buildActionSheetHeader(context),
...actions,
_buildExplanationWidget(context),
],
),
);
}

Expand Down
6 changes: 3 additions & 3 deletions lib/presentation/widgets/delete_profile_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ class DeleteProfileTile extends StatelessWidget {
leading: const Icon(Icons.delete),
// Show in red to indicate danger.
iconColor: theme.colorScheme.error,
splashColor: theme.colorScheme.error.withOpacity(0.2),
hoverColor: theme.colorScheme.error.withOpacity(0.1),
focusColor: theme.colorScheme.error.withOpacity(0.1),
splashColor: theme.colorScheme.error.withValues(alpha: 0.2),
hoverColor: theme.colorScheme.error.withValues(alpha: 0.1),
focusColor: theme.colorScheme.error.withValues(alpha: 0.1),
textColor: theme.colorScheme.error,
onTap: () => _confirmDelete(context),
);
Expand Down
Loading
Loading