File tree 4 files changed +82
-2
lines changed
4 files changed +82
-2
lines changed Original file line number Diff line number Diff line change @@ -61,6 +61,7 @@ export 'src/widgets/reauthenticate_dialog.dart';
61
61
export 'src/widgets/different_method_sign_in_dialog.dart' ;
62
62
export 'src/widgets/email_sign_up_dialog.dart' ;
63
63
export 'src/widgets/email_link_sign_in_button.dart' ;
64
+ export 'src/widgets/layout_flow_aware_padding.dart' ;
64
65
65
66
export 'src/views/login_view.dart' ;
66
67
export 'src/views/phone_input_view.dart' ;
Original file line number Diff line number Diff line change
1
+ import 'package:flutter/widgets.dart' ;
2
+
3
+ /// Padding widget that takes into account current layout flow.
4
+ /// If nearest ancestor is [Row] (or [Flex] with [Flex.direction] equal to
5
+ /// [Axis.horizontal] ) – horizontal paddings are ignored.
6
+ /// Otherwise vertical paddings are ignored.
7
+ class LayoutFlowAwarePadding extends StatelessWidget {
8
+ final Widget child;
9
+ final EdgeInsets padding;
10
+ const LayoutFlowAwarePadding ({
11
+ Key ? key,
12
+ required this .child,
13
+ required this .padding,
14
+ }) : super (key: key);
15
+
16
+ @override
17
+ Widget build (BuildContext context) {
18
+ Axis ? axis;
19
+
20
+ context.visitAncestorElements ((element) {
21
+ if (element.widget is Row ) {
22
+ axis = Axis .horizontal;
23
+ return false ;
24
+ } else if (element.widget is Column ) {
25
+ axis = Axis .vertical;
26
+ return false ;
27
+ } else if (element.widget is Flex ) {
28
+ axis = (element.widget as Flex ).direction;
29
+ return false ;
30
+ }
31
+
32
+ return true ;
33
+ });
34
+
35
+ EdgeInsets finalPadding;
36
+
37
+ if (axis == null ) {
38
+ finalPadding = padding;
39
+ } else if (axis == Axis .horizontal) {
40
+ finalPadding = EdgeInsets .only (
41
+ left: padding.left,
42
+ right: padding.right,
43
+ );
44
+ } else {
45
+ finalPadding = EdgeInsets .only (
46
+ top: padding.top,
47
+ bottom: padding.bottom,
48
+ );
49
+ }
50
+
51
+ return Padding (
52
+ padding: finalPadding,
53
+ child: child,
54
+ );
55
+ }
56
+ }
Original file line number Diff line number Diff line change @@ -169,7 +169,7 @@ class _OAuthProviderButtonBaseState extends State<OAuthProviderButtonBase>
169
169
) {
170
170
final br = BorderRadius .circular (borderRadius);
171
171
172
- return Padding (
172
+ return LayoutFlowAwarePadding (
173
173
padding: EdgeInsets .all (margin),
174
174
child: CupertinoTheme (
175
175
data: CupertinoThemeData (
@@ -488,7 +488,7 @@ class _ButtonContainer extends StatelessWidget {
488
488
489
489
@override
490
490
Widget build (BuildContext context) {
491
- return Padding (
491
+ return LayoutFlowAwarePadding (
492
492
padding: EdgeInsets .all (margin),
493
493
child: SizedBox (
494
494
height: height,
Original file line number Diff line number Diff line change 1
1
import 'package:firebase_auth/firebase_auth.dart' show FirebaseAuth;
2
+ import 'package:firebase_ui_auth/firebase_ui_auth.dart' ;
2
3
import 'package:flutter/material.dart' ;
3
4
import 'package:flutter_svg/flutter_svg.dart' ;
4
5
import 'package:flutter_test/flutter_test.dart' ;
@@ -138,5 +139,27 @@ void main() {
138
139
139
140
expect (iconFinder, findsOneWidget);
140
141
});
142
+
143
+ testWidgets ('has layout flow aware padding' , (tester) async {
144
+ await tester.pumpWidget (DefaultAssetBundle (
145
+ bundle: FakeAssetBundle (),
146
+ child: MaterialApp (
147
+ home: Scaffold (
148
+ body: Row (
149
+ children: [
150
+ OAuthProviderButtonBase (
151
+ provider: provider,
152
+ auth: FakeAuth (),
153
+ label: 'Sign in with Fake provider' ,
154
+ loadingIndicator: const CircularProgressIndicator (),
155
+ )
156
+ ],
157
+ ),
158
+ ),
159
+ ),
160
+ ));
161
+
162
+ expect (find.byType (LayoutFlowAwarePadding ), findsOneWidget);
163
+ });
141
164
});
142
165
}
You can’t perform that action at this time.
0 commit comments