Skip to content

Commit 050f956

Browse files
committed
...
1 parent e9be9e7 commit 050f956

File tree

8 files changed

+238
-24
lines changed

8 files changed

+238
-24
lines changed

README.md

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,29 @@ Enable OIDC provider on [firebase console](https://console.firebase.google.com/)
2020

2121
## Usage
2222

23+
<!-- embedme readme/usage_1.dart -->
2324
```dart
2425
import 'package:firebase_core/firebase_core.dart';
2526
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
26-
import 'package:firebase_ui_oauth_apple/firebase_ui_oauth_oidc.dart';
27+
import 'package:firebase_ui_oauth_oidc/firebase_ui_oauth_oidc.dart';
28+
import 'package:flutter/material.dart';
2729
28-
void main() {
29-
WidgetsFlutterBinding.ensureInitialized();
30-
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
30+
import 'example_button_style.dart';
31+
import 'firebase_options.dart';
3132
32-
FirebaseUIAuth.configureProviders([
33-
AppleProvider(),
34-
]);
33+
void main() async {
34+
WidgetsFlutterBinding.ensureInitialized();
35+
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
3536
36-
runApp(MyApp());
37+
FirebaseUIAuth.configureProviders([
38+
OidcProvider(providerId: 'oidc.example', style: const ExampleButtonStyle()),
39+
]);
40+
41+
runApp(const MyApp());
3742
}
3843
3944
class MyApp extends StatelessWidget {
40-
const MyApp({Key? key}) : super(key: key);
45+
const MyApp({super.key});
4146
4247
@override
4348
Widget build(BuildContext context) {
@@ -52,40 +57,63 @@ class MyApp extends StatelessWidget {
5257
);
5358
}
5459
}
60+
5561
```
5662

5763
Alternatively you could use the `OAuthProviderButton`
5864

65+
<!-- embedme readme/usage_2.dart -->
5966
```dart
67+
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
68+
import 'package:firebase_ui_oauth_oidc/firebase_ui_oauth_oidc.dart';
69+
import 'package:flutter/material.dart';
70+
71+
import 'example_button_style.dart';
72+
6073
class MyScreen extends StatelessWidget {
74+
const MyScreen({super.key});
75+
6176
@override
6277
Widget build(BuildContext context) {
6378
return AuthStateListener<OAuthController>(
6479
listener: (oldState, newState, controller) {
6580
if (newState is SignedIn) {
6681
// navigate to other screen.
82+
return true;
6783
}
84+
return false;
6885
},
6986
child: OAuthProviderButton(
70-
provider: AppleProvider(),
87+
provider: OidcProvider(
88+
providerId: 'oidc.example',
89+
style: const ExampleButtonStyle(),
90+
),
7191
),
7292
);
7393
}
7494
}
95+
7596
```
7697

77-
Also there is a standalone version of the `AppleSignInButton`
98+
Also there is a standalone version of the `OidcSignInButton`
7899

100+
<!-- embedme readme/usage_3.dart -->
79101
```dart
102+
import 'package:firebase_auth/firebase_auth.dart';
103+
import 'package:flutter/material.dart';
104+
80105
class MyScreen extends StatelessWidget {
106+
const MyScreen({super.key});
107+
81108
@override
82109
Widget build(BuildContext context) {
83-
return AppleSignInButton(
84-
loadingIndicator: CircularProgressIndicator(),
110+
return OidcSignInButton(
111+
loadingIndicator: const CircularProgressIndicator(),
85112
onSignedIn: (UserCredential credential) {
86113
// perform navigation.
87-
}
114+
},
88115
);
89116
}
90117
}
118+
91119
```

lib/firebase_ui_oauth_oidc.dart

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,126 @@ export 'package:firebase_ui_oauth/firebase_ui_oauth.dart'
55

66
export 'src/provider.dart' show OidcProvider, OidcToken;
77
export 'src/theme.dart' show OidcProviderButtonStyle;
8+
9+
10+
class AppleSignInButton extends _AppleSignInButton {
11+
const AppleSignInButton({
12+
Key? key,
13+
required Widget loadingIndicator,
14+
AuthAction? action,
15+
FirebaseAuth? auth,
16+
bool? isLoading,
17+
String? label,
18+
DifferentProvidersFoundCallback? onDifferentProvidersFound,
19+
SignedInCallback? onSignedIn,
20+
void Function()? onTap,
21+
bool? overrideDefaultTapAction,
22+
double? size,
23+
void Function(Exception exception)? onError,
24+
VoidCallback? onCanceled,
25+
}) : super(
26+
key: key,
27+
action: action,
28+
auth: auth,
29+
isLoading: isLoading ?? false,
30+
loadingIndicator: loadingIndicator,
31+
label: label,
32+
onDifferentProvidersFound: onDifferentProvidersFound,
33+
onSignedIn: onSignedIn,
34+
onTap: onTap,
35+
overrideDefaultTapAction: overrideDefaultTapAction,
36+
size: size,
37+
onError: onError,
38+
onCanceled: onCanceled,
39+
);
40+
}
41+
42+
class AppleSignInIconButton extends _AppleSignInButton {
43+
const AppleSignInIconButton({
44+
Key? key,
45+
required Widget loadingIndicator,
46+
AuthAction? action,
47+
FirebaseAuth? auth,
48+
bool? isLoading,
49+
DifferentProvidersFoundCallback? onDifferentProvidersFound,
50+
SignedInCallback? onSignedIn,
51+
void Function()? onTap,
52+
bool? overrideDefaultTapAction,
53+
double? size,
54+
void Function(Exception exception)? onError,
55+
VoidCallback? onCanceled,
56+
}) : super(
57+
key: key,
58+
action: action,
59+
auth: auth,
60+
isLoading: isLoading ?? false,
61+
loadingIndicator: loadingIndicator,
62+
label: '',
63+
onDifferentProvidersFound: onDifferentProvidersFound,
64+
onSignedIn: onSignedIn,
65+
onTap: onTap,
66+
overrideDefaultTapAction: overrideDefaultTapAction,
67+
size: size,
68+
onError: onError,
69+
onCanceled: onCanceled,
70+
);
71+
}
72+
73+
class _AppleSignInButton extends StatelessWidget {
74+
final String label;
75+
final Widget loadingIndicator;
76+
final void Function()? onTap;
77+
final bool overrideDefaultTapAction;
78+
final bool isLoading;
79+
80+
/// {@macro ui.auth.auth_action}
81+
final AuthAction? action;
82+
83+
/// {@macro ui.auth.auth_controller.auth}
84+
final FirebaseAuth? auth;
85+
final DifferentProvidersFoundCallback? onDifferentProvidersFound;
86+
final SignedInCallback? onSignedIn;
87+
final double size;
88+
final void Function(Exception exception)? onError;
89+
final VoidCallback? onCanceled;
90+
91+
const _AppleSignInButton({
92+
Key? key,
93+
required this.loadingIndicator,
94+
String? label,
95+
bool? overrideDefaultTapAction,
96+
this.onTap,
97+
this.isLoading = false,
98+
this.action = AuthAction.signIn,
99+
this.auth,
100+
this.onDifferentProvidersFound,
101+
this.onSignedIn,
102+
double? size,
103+
this.onError,
104+
this.onCanceled,
105+
}) : label = label ?? 'Sign in with Apple',
106+
overrideDefaultTapAction = overrideDefaultTapAction ?? false,
107+
size = size ?? 19,
108+
super(key: key);
109+
110+
AppleProvider get provider => AppleProvider();
111+
112+
@override
113+
Widget build(BuildContext context) {
114+
return OAuthProviderButtonBase(
115+
provider: provider,
116+
label: label,
117+
onTap: onTap,
118+
loadingIndicator: loadingIndicator,
119+
isLoading: isLoading,
120+
action: action,
121+
auth: auth ?? FirebaseAuth.instance,
122+
onDifferentProvidersFound: onDifferentProvidersFound,
123+
onSignedIn: onSignedIn,
124+
overrideDefaultTapAction: overrideDefaultTapAction,
125+
size: size,
126+
onError: onError,
127+
onCancelled: onCanceled,
128+
);
129+
}
130+
}

pubspec.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ packages:
107107
source: hosted
108108
version: "5.1.3"
109109
firebase_core:
110-
dependency: transitive
110+
dependency: "direct dev"
111111
description:
112112
name: firebase_core
113113
url: "https://pub.dartlang.org"
@@ -142,7 +142,7 @@ packages:
142142
source: hosted
143143
version: "0.2.3+22"
144144
firebase_ui_auth:
145-
dependency: transitive
145+
dependency: "direct dev"
146146
description:
147147
name: firebase_ui_auth
148148
url: "https://pub.dartlang.org"

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ dev_dependencies:
2020

2121
rexios_lints: ^4.0.0
2222
firebase_core: ^2.3.0
23+
firebase_ui_auth: ^1.1.0

readme/example_button_style.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'package:firebase_ui_oauth_oidc/firebase_ui_oauth_oidc.dart';
2+
3+
class ExampleButtonStyle extends OidcProviderButtonStyle {
4+
const ExampleButtonStyle();
5+
6+
@override
7+
ThemedColor get backgroundColor => throw UnimplementedError();
8+
9+
@override
10+
ThemedColor get color => throw UnimplementedError();
11+
12+
@override
13+
ThemedIconSrc get iconSrc => throw UnimplementedError();
14+
15+
@override
16+
String get label => throw UnimplementedError();
17+
}
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@ import 'package:firebase_ui_auth/firebase_ui_auth.dart';
33
import 'package:firebase_ui_oauth_oidc/firebase_ui_oauth_oidc.dart';
44
import 'package:flutter/material.dart';
55

6+
import 'example_button_style.dart';
67
import 'firebase_options.dart';
78

89
void main() async {
9-
WidgetsFlutterBinding.ensureInitialized();
10-
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
10+
WidgetsFlutterBinding.ensureInitialized();
11+
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
1112

12-
FirebaseUIAuth.configureProviders([
13-
OidcProvider(providerId: 'oidc.example', style: ),
14-
]);
13+
FirebaseUIAuth.configureProviders([
14+
OidcProvider(providerId: 'oidc.example', style: const ExampleButtonStyle()),
15+
]);
1516

16-
runApp(const MyApp());
17+
runApp(const MyApp());
1718
}
1819

1920
class MyApp extends StatelessWidget {
20-
const MyApp({Key? key}) : super(key: key);
21+
const MyApp({super.key});
2122

2223
@override
2324
Widget build(BuildContext context) {
@@ -31,4 +32,4 @@ class MyApp extends StatelessWidget {
3132
),
3233
);
3334
}
34-
}
35+
}

readme/usage_2.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
2+
import 'package:firebase_ui_oauth_oidc/firebase_ui_oauth_oidc.dart';
3+
import 'package:flutter/material.dart';
4+
5+
import 'example_button_style.dart';
6+
7+
class MyScreen extends StatelessWidget {
8+
const MyScreen({super.key});
9+
10+
@override
11+
Widget build(BuildContext context) {
12+
return AuthStateListener<OAuthController>(
13+
listener: (oldState, newState, controller) {
14+
if (newState is SignedIn) {
15+
// navigate to other screen.
16+
return true;
17+
}
18+
return false;
19+
},
20+
child: OAuthProviderButton(
21+
provider: OidcProvider(
22+
providerId: 'oidc.example',
23+
style: const ExampleButtonStyle(),
24+
),
25+
),
26+
);
27+
}
28+
}

readme/usage_3.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:firebase_auth/firebase_auth.dart';
2+
import 'package:flutter/material.dart';
3+
4+
class MyScreen extends StatelessWidget {
5+
const MyScreen({super.key});
6+
7+
@override
8+
Widget build(BuildContext context) {
9+
return OidcSignInButton(
10+
loadingIndicator: const CircularProgressIndicator(),
11+
onSignedIn: (UserCredential credential) {
12+
// perform navigation.
13+
},
14+
);
15+
}
16+
}

0 commit comments

Comments
 (0)