Skip to content

Latest commit

 

History

History
108 lines (90 loc) · 3.7 KB

File metadata and controls

108 lines (90 loc) · 3.7 KB

Theming

Firebase UI widgets are built on top of Material and Cupertino design patterns provided by Flutter.

To provide consistency across your application, the Firebase UI widgets depend on the ThemeData or CupertinoThemeData instances provided to your MaterialApp or CupertinoApp widget.

For example, the SignInScreen widget with an email provider wrapped in a MaterialApp will use the following widgets:

class FirebaseAuthUIExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: SignInScreen(
        providers: [
          EmailAuthProvider(),
        ],
      ),
    );
  }
}

This will render a screen with the default Material style widgets:

Firebase UI Auth Theming - default email form style

To update these styles, we can override the ThemeData provided to the MaterialApp. For example, to apply a border to the input fields, we can override the InputDecorationTheme:

class FirebaseAuthUIExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        inputDecorationTheme: InputDecorationTheme(
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(8),
          ),
        ),
      ),
      home: const SignInScreen(
        providers: [
          EmailAuthProvider(),
        ],
      ),
    );
  }
}

The UI widgets will respect the updated theme data, and the UI will be reflected to match:

Firebase UI Auth Theming - email form outline border

Furthermore, we can customize the button used in the UI by overriding the OutlinedButtonThemeData:

class FirebaseAuthUIExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        inputDecorationTheme: InputDecorationTheme(
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(8),
          ),
        ),
        outlinedButtonTheme: OutlinedButtonThemeData(
          style: ButtonStyle(
            padding: MaterialStateProperty.all<EdgeInsets>(
              const EdgeInsets.all(24),
            ),
            backgroundColor: MaterialStateProperty.all<Color>(Colors.blue),
            foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
          ),
        ),
      ),
      home: const SignInScreen(
        providers: [
          EmailAuthProvider(),
        ],
      ),
    );
  }
}

The button will now respect the updated theme data and display a styled button instead:

Firebase UI Auth Theming - email form custom button style

Other topics