Skip to main content

forui_firebase_ui_oauth 0.1.0 copy "forui_firebase_ui_oauth: ^0.1.0" to clipboard
forui_firebase_ui_oauth: ^0.1.0 copied to clipboard

Firebase UI widgets for authentication & OAuth

example/lib/main.dart

// Copyright 2022, the Chromium project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:forui_firebase_ui_oauth/forui_firebase_ui_oauth.dart';
import 'package:forui_firebase_ui_oauth_apple/forui_firebase_ui_oauth_apple.dart';
import 'package:forui_firebase_ui_oauth_facebook/forui_firebase_ui_oauth_facebook.dart';
import 'package:forui_firebase_ui_oauth_google/forui_firebase_ui_oauth_google.dart';
import 'package:forui_firebase_ui_oauth_twitter/forui_firebase_ui_oauth_twitter.dart';
import 'package:material_ui/material_ui.dart';
import 'package:forui/forui.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const OAuthProviderButtonExample());
}

class OAuthProviderButtonExample extends StatelessWidget {
  const OAuthProviderButtonExample({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(brightness: Brightness.light, useMaterial3: true),
      builder: (context, child) =>
          FTheme(data: FTheme.neutral.light.touch, child: child!),
      home: const FScaffold(child: Content()),
    );
  }
}

class Content extends StatefulWidget {
  const Content({super.key});

  @override
  State<Content> createState() => _ContentState();
}

class _ContentState extends State<Content> {
  String? loadingProvider;

  void Function() _onTap(String provider) {
    return () {
      setState(() {
        loadingProvider = provider;
      });
    };
  }

  Widget _button(OAuthProvider provider, String label) {
    return OAuthProviderButtonBase(
      provider: provider,
      label: label,
      onTap: _onTap(provider.providerId),
      isLoading: loadingProvider == provider.providerId,
      loadingIndicator: const FCircularProgress(),
      overrideDefaultTapAction: true,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: SizedBox(
        width: 350,
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            _button(AppleProvider(), 'Sign in with Apple'),
            _button(
              FacebookProvider(clientId: '', redirectUri: ''),
              'Sign in with Facebook',
            ),
            _button(
              GoogleProvider(clientId: '', redirectUri: '', scopes: []),
              'Sign in with Google',
            ),
            _button(
              TwitterProvider(apiKey: '', apiSecretKey: '', redirectUri: ''),
              'Sign in with Twitter',
            ),
          ],
        ),
      ),
    );
  }
}