Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(firebase_ui_oauth): fix OAuth provider buttons paddings #9991

Merged
merged 2 commits into from Dec 1, 2022
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/firebase_ui_auth/lib/firebase_ui_auth.dart
Expand Up @@ -61,6 +61,7 @@ export 'src/widgets/reauthenticate_dialog.dart';
export 'src/widgets/different_method_sign_in_dialog.dart';
export 'src/widgets/email_sign_up_dialog.dart';
export 'src/widgets/email_link_sign_in_button.dart';
export 'src/widgets/layout_flow_aware_padding.dart';

export 'src/views/login_view.dart';
export 'src/views/phone_input_view.dart';
Expand Down
@@ -0,0 +1,56 @@
import 'package:flutter/widgets.dart';

/// Padding widget that takes into account current layout flow.
/// If nearest ancestor is [Row] (or [Flex] with [Flex.direction] equal to
/// [Axis.horizontal]) – horizontal paddings are ignored.
/// Otherwise vertical paddings are ignored.
class LayoutFlowAwarePadding extends StatelessWidget {
final Widget child;
final EdgeInsets padding;
const LayoutFlowAwarePadding({
Key? key,
required this.child,
required this.padding,
}) : super(key: key);

@override
Widget build(BuildContext context) {
Axis? axis;

context.visitAncestorElements((element) {
if (element.widget is Row) {
axis = Axis.horizontal;
return false;
} else if (element.widget is Column) {
axis = Axis.vertical;
return false;
} else if (element.widget is Flex) {
axis = (element.widget as Flex).direction;
return false;
}

return true;
});

EdgeInsets finalPadding;

if (axis == null) {
finalPadding = padding;
} else if (axis == Axis.horizontal) {
finalPadding = EdgeInsets.only(
left: padding.left,
right: padding.right,
);
} else {
finalPadding = EdgeInsets.only(
top: padding.top,
bottom: padding.bottom,
);
}

return Padding(
padding: finalPadding,
child: child,
);
}
}
Expand Up @@ -169,7 +169,7 @@ class _OAuthProviderButtonBaseState extends State<OAuthProviderButtonBase>
) {
final br = BorderRadius.circular(borderRadius);

return Padding(
return LayoutFlowAwarePadding(
padding: EdgeInsets.all(margin),
child: CupertinoTheme(
data: CupertinoThemeData(
Expand Down Expand Up @@ -481,7 +481,7 @@ class _ButtonContainer extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Padding(
return LayoutFlowAwarePadding(
padding: EdgeInsets.all(margin),
child: SizedBox(
height: height,
Expand Down
23 changes: 23 additions & 0 deletions packages/firebase_ui_oauth/test/flutterfire_ui_oauth_test.dart
@@ -1,4 +1,5 @@
import 'package:firebase_auth/firebase_auth.dart' show FirebaseAuth;
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_test/flutter_test.dart';
Expand Down Expand Up @@ -138,5 +139,27 @@ void main() {

expect(iconFinder, findsOneWidget);
});

testWidgets('has layout flow aware padding', (tester) async {
await tester.pumpWidget(DefaultAssetBundle(
bundle: FakeAssetBundle(),
child: MaterialApp(
home: Scaffold(
body: Row(
children: [
OAuthProviderButtonBase(
provider: provider,
auth: FakeAuth(),
label: 'Sign in with Fake provider',
loadingIndicator: const CircularProgressIndicator(),
)
],
),
),
),
));

expect(find.byType(LayoutFlowAwarePadding), findsOneWidget);
});
});
}