@@ -2,11 +2,14 @@ package com.firebase.ui.auth.compose.ui.method_picker
2
2
3
3
import androidx.compose.foundation.Image
4
4
import androidx.compose.foundation.layout.Box
5
+ import androidx.compose.foundation.layout.BoxWithConstraints
5
6
import androidx.compose.foundation.layout.Column
6
7
import androidx.compose.foundation.layout.fillMaxSize
8
+ import androidx.compose.foundation.layout.fillMaxWidth
7
9
import androidx.compose.foundation.layout.padding
8
10
import androidx.compose.foundation.layout.safeDrawingPadding
9
11
import androidx.compose.foundation.lazy.LazyColumn
12
+ import androidx.compose.foundation.lazy.itemsIndexed
10
13
import androidx.compose.runtime.Composable
11
14
import androidx.compose.ui.Alignment
12
15
import androidx.compose.ui.Modifier
@@ -29,8 +32,8 @@ import com.firebase.ui.auth.compose.ui.components.AuthProviderButton
29
32
* ```kotlin
30
33
* AuthMethodPicker(
31
34
* providers = listOf(
32
- * AuthProvider.Google(),
33
- * AuthProvider.Email(),
35
+ * AuthProvider.Google(),
36
+ * AuthProvider.Email(),
34
37
* ),
35
38
* onProviderSelected = { provider -> /* ... */ }
36
39
* )
@@ -68,7 +71,8 @@ fun AuthMethodPicker(
68
71
logo?.let {
69
72
Image (
70
73
modifier = Modifier
71
- .weight(0.4f ),
74
+ .weight(0.4f )
75
+ .align(Alignment .CenterHorizontally ),
72
76
painter = it.painter,
73
77
contentDescription = if (inPreview) " "
74
78
else stringResource(R .string.fui_auth_method_picker_logo)
@@ -77,26 +81,32 @@ fun AuthMethodPicker(
77
81
if (customLayout != null ) {
78
82
customLayout(providers, onProviderSelected)
79
83
} else {
80
- LazyColumn (
84
+ BoxWithConstraints (
81
85
modifier = Modifier
82
- .fillMaxSize()
83
- .weight(1f )
84
- .testTag(" AuthMethodPicker LazyColumn" ),
85
- horizontalAlignment = Alignment .CenterHorizontally ,
86
+ .weight(1f ),
86
87
) {
87
- items(providers.size) { index ->
88
- val provider = providers[index]
89
- Box (
90
- modifier = Modifier
91
- .padding(bottom = 16 .dp)
92
- ) {
93
- AuthProviderButton (
94
- onClick = {
95
- onProviderSelected(provider)
96
- },
97
- provider = provider,
98
- stringProvider = DefaultAuthUIStringProvider (context)
99
- )
88
+ val paddingWidth = maxWidth.value * 0.23
89
+ LazyColumn (
90
+ modifier = Modifier
91
+ .padding(horizontal = paddingWidth.dp)
92
+ .testTag(" AuthMethodPicker LazyColumn" ),
93
+ horizontalAlignment = Alignment .CenterHorizontally ,
94
+ ) {
95
+ itemsIndexed(providers) { index, provider ->
96
+ Box (
97
+ modifier = Modifier
98
+ .padding(bottom = if (index < providers.lastIndex) 16 .dp else 0 .dp)
99
+ ) {
100
+ AuthProviderButton (
101
+ modifier = Modifier
102
+ .fillMaxWidth(),
103
+ onClick = {
104
+ onProviderSelected(provider)
105
+ },
106
+ provider = provider,
107
+ stringProvider = DefaultAuthUIStringProvider (context)
108
+ )
109
+ }
100
110
}
101
111
}
102
112
}
@@ -118,46 +128,51 @@ fun AuthMethodPicker(
118
128
@Preview(showBackground = true )
119
129
@Composable
120
130
fun PreviewAuthMethodPicker () {
121
- AuthMethodPicker (
122
- providers = listOf (
123
- AuthProvider .Email (
124
- actionCodeSettings = null ,
125
- passwordValidationRules = emptyList()
126
- ),
127
- AuthProvider .Phone (
128
- defaultNumber = null ,
129
- defaultCountryCode = null ,
130
- allowedCountries = null ,
131
- ),
132
- AuthProvider .Google (
133
- scopes = emptyList(),
134
- serverClientId = null
135
- ),
136
- AuthProvider .Facebook (),
137
- AuthProvider .Twitter (
138
- customParameters = emptyMap()
139
- ),
140
- AuthProvider .Github (
141
- customParameters = emptyMap()
142
- ),
143
- AuthProvider .Microsoft (
144
- tenant = null ,
145
- customParameters = emptyMap()
146
- ),
147
- AuthProvider .Yahoo (
148
- customParameters = emptyMap()
149
- ),
150
- AuthProvider .Apple (
151
- locale = null ,
152
- customParameters = emptyMap()
131
+ Column (
132
+ modifier = Modifier
133
+ .fillMaxSize()
134
+ ) {
135
+ AuthMethodPicker (
136
+ providers = listOf (
137
+ AuthProvider .Email (
138
+ actionCodeSettings = null ,
139
+ passwordValidationRules = emptyList()
140
+ ),
141
+ AuthProvider .Phone (
142
+ defaultNumber = null ,
143
+ defaultCountryCode = null ,
144
+ allowedCountries = null ,
145
+ ),
146
+ AuthProvider .Google (
147
+ scopes = emptyList(),
148
+ serverClientId = null
149
+ ),
150
+ AuthProvider .Facebook (),
151
+ AuthProvider .Twitter (
152
+ customParameters = emptyMap()
153
+ ),
154
+ AuthProvider .Github (
155
+ customParameters = emptyMap()
156
+ ),
157
+ AuthProvider .Microsoft (
158
+ tenant = null ,
159
+ customParameters = emptyMap()
160
+ ),
161
+ AuthProvider .Yahoo (
162
+ customParameters = emptyMap()
163
+ ),
164
+ AuthProvider .Apple (
165
+ locale = null ,
166
+ customParameters = emptyMap()
167
+ ),
168
+ AuthProvider .Anonymous ,
153
169
),
154
- AuthProvider .Anonymous ,
155
- ),
156
- logo = AuthUIAsset .Resource (R .drawable.fui_ic_check_circle_black_128dp),
157
- onProviderSelected = { provider ->
170
+ logo = AuthUIAsset .Resource (R .drawable.fui_ic_check_circle_black_128dp),
171
+ onProviderSelected = { provider ->
158
172
159
- },
160
- termsOfServiceUrl = " https://example.com/terms" ,
161
- privacyPolicyUrl = " https://example.com/privacy"
162
- )
173
+ },
174
+ termsOfServiceUrl = " https://example.com/terms" ,
175
+ privacyPolicyUrl = " https://example.com/privacy"
176
+ )
177
+ }
163
178
}
0 commit comments