Flutter身份验证插件main_auth的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter身份验证插件main_auth的使用

main_auth 是一个提供可定制登录和注册界面的Flutter插件。它支持轻松集成登录表单、社交登录按钮,并允许自定义标题、样式和布局。

目录

功能

  • LoginScreen: 可定制的登录界面,具有可配置的顶部、中部和底部部分。
  • SignUpScreen: 可定制的注册界面,支持额外字段如电话号码和确认密码。
  • 社交登录集成: 提供Google、Apple、Facebook和Twitter(X)的社交登录按钮。
  • 可定制样式: 可应用自定义按钮样式、标题和布局配置。
  • 回调支持: 处理登录、注册和社交登录按钮点击事件的回调。

安装

在您的 pubspec.yaml 文件中添加以下内容:

dependencies:
  main_auth: <latest_version>

本地化

要在工厂构造函数中启用验证消息的本地化,请将 ValidationLocalizations.delegate 添加到应用程序的委托列表中:

MaterialApp(
  localizationsDelegates: [
    ValidationLocalizations.delegate,
    AuthLocalizations.delegate,
    // 其他委托...
  ],
  // 其他应用程序配置...
)

登录构造参数

参数 类型 默认值 描述
hideAppBar bool false 控制是否隐藏AppBar。
title String? null 显示在屏幕顶部的标题。如果为null,则使用默认的"Login"标题。
image Widget? null 可选的图像小部件,通常用于显示logo。
buttonSocialType ButtonSocialType ButtonSocialType.defaultType 定义底部部分的社交登录按钮类型。
buttonStyle ButtonDecoration ButtonDecoration.defaultStyle 定义社交登录按钮的装饰和样式。
titleStyle TextStyle? null 标题的可选样式。如果为null,则使用默认文本样式。
hideTopLogin bool false 控制是否隐藏顶部登录部分。
topLoginWidget Widget? null 可选的小部件,用于替换默认的顶部登录部分。
hideMiddleLogin bool false 控制是否隐藏中间登录部分。
middleLoginWidget Widget? null 可选的小部件,用于替换默认的中间登录部分。
hideBottomLogin bool false 控制是否隐藏底部登录部分。
bottomLoginWidget Widget? null 可选的小部件,用于替换默认的底部登录部分。
padding EdgeInsets? EdgeInsets.all(12) 围绕主体内容的填充。
onLoginPressed void Function(String email, String password)? null 当登录按钮被按下时触发的回调函数,传递输入的电子邮件和密码。

示例用法:登录

LoginScreen(
  title: 'Welcome Back',
  image: Image.asset('assets/logo.png'),
  hideAppBar: true,
  onLoginPressed: (email, password) {
    // 处理登录操作
  },
  hideTopLogin: false,
  hideMiddleLogin: false,
  hideBottomLogin: false,
  buttonSocialType: ButtonSocialType.google,
  buttonStyle: ButtonDecoration.rounded,
)

注册构造参数

参数 类型 默认值 描述
hideAppBar bool false 控制是否隐藏AppBar。
title String? null 可选标题,显示在屏幕顶部。如果为null,则显示默认的本地化标题(“Sign up”)。
image Widget? null 可选的图像小部件,通常用于显示logo或品牌标识。
buttonSocialType ButtonSocialType ButtonSocialType.defaultType 定义底部部分的社交登录按钮类型。
buttonStyle ButtonDecoration ButtonDecoration.defaultStyle 定义社交登录按钮的装饰和样式。
titleStyle TextStyle? null 应用于标题的可选样式。如果不提供,则使用默认文本样式。
hideTopSignUp bool false 控制是否隐藏顶部注册部分。
topSignUpWidget Widget? null 可选小部件,用于替换默认的顶部注册部分。
hideMiddleSignUp bool false 控制是否隐藏中间注册部分。
middleSignUpWidget Widget? null 可选小部件,用于替换默认的中间注册部分。
hideBottomSignUp bool false 控制是否隐藏底部注册部分。
hideConfirmPasswordField bool false 控制是否隐藏“确认密码”字段。
hidePhoneField bool false 控制是否隐藏电话号码字段。
bottomSignUpWidget Widget? null 可选小部件,用于替换默认的底部注册部分,通常用于社交登录按钮或其他选项。
padding EdgeInsets? EdgeInsets.all(12) 应用于主体内容的填充。
onSignUpPressed void Function(String email, String password, {String? phone, String? confirmPassword})? null 当“注册”按钮被按下时触发的回调函数,提供输入的电子邮件、密码以及可选的电话号码和确认密码。
onTapGoogle VoidCallback? null 当Google登录按钮被按下时触发的回调函数。
onTapX VoidCallback? null 当X(Twitter)登录按钮被按下时触发的回调函数。
onTapApple VoidCallback? null 当Apple登录按钮被按下时触发的回调函数。
onTapFacebook VoidCallback? null 当Facebook登录按钮被按下时触发的回调函数。
onTermsTap VoidCallback? null 当“条款和条件”链接被按下时触发的回调函数。

示例用法:注册

SignUpScreen(
  title: 'Create Your Account',
  image: Image.asset('assets/logo.png'),
  hideAppBar: true,
  onSignUpPressed: (email, password, {phone, confirmPassword}) {
    // 处理注册逻辑
  },
  onTapGoogle: () {
    // 处理Google注册
  },
  onTapFacebook: () {
    // 处理Facebook注册
  },
  hideConfirmPasswordField: false,
  hidePhoneField: true, // 隐藏电话号码字段
  buttonSocialType: ButtonSocialType.google,
  buttonStyle: ButtonDecoration.rounded,
)

贡献

欢迎对该项目进行贡献。

如果您发现了一个bug或者想要一个新功能但不知道如何修复/实现,请提交一个issue
如果您修复了一个bug或实现了新功能,请发送一个pull request

示例代码

以下是完整的示例代码,展示了如何使用main_auth插件创建一个简单的登录和注册页面。

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:main_auth/main_auth.dart';
import 'package:main_widgets/main_widgets.dart';
import 'package:smart_localize/smart_localize.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    MainWidgetsUtil.init(context,
        designSize: const Size(375, 812), minTextAdapt: true);
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      supportedLocales: const [
        Locale('en'),
        Locale('ar'),
      ],
      locale: const Locale('en'),
      localeResolutionCallback: (locale, supportedLocales) =>
          locale ?? const Locale('en'),
      localizationsDelegates: context.smartLocalizeDelegates,
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Center(
              child: LoginScreen(
                title: 'Welcome Back',
                image: Image.asset('assets/logo.png'),
                hideAppBar: true,
                onLoginPressed: (email, password) {
                  log('Email: $email, Password: $password');
                },
                buttonSocialType: ButtonSocialType.google,
                buttonStyle: ButtonDecoration.rounded,
              ),
            ),
            SizedBox(height: 20),
            Center(
              child: SignUpScreen(
                title: 'Create Your Account',
                image: Image.asset('assets/logo.png'),
                hideAppBar: true,
                onSignUpPressed: (email, password, {phone, confirmPassword}) {
                  log('Email: $email, Password: $password');
                },
                onTapGoogle: () {
                  log('Google Sign Up');
                },
                onTapFacebook: () {
                  log('Facebook Sign Up');
                },
                hideConfirmPasswordField: false,
                hidePhoneField: true,
                buttonSocialType: ButtonSocialType.google,
                buttonStyle: ButtonDecoration.rounded,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

此示例展示了如何使用main_auth插件来创建登录和注册界面,并处理用户输入和社交登录按钮点击事件。您可以根据需要进一步自定义这些界面和功能。


更多关于Flutter身份验证插件main_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter身份验证插件main_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,使用main_auth插件进行身份验证通常涉及几个关键步骤:安装插件、配置插件、实现用户登录和注册功能。请注意,main_auth这个插件名称可能是一个假设或者示例名称,实际中可能并不存在一个叫做main_auth的官方插件。不过,我可以基于常见的身份验证插件(如firebase_auth)给出一个类似的实现案例。

1. 安装插件

首先,确保在pubspec.yaml文件中添加了身份验证插件的依赖项。这里以firebase_auth为例:

dependencies:
  flutter:
    sdk: flutter
  firebase_auth: ^4.0.0  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

2. 配置插件

对于firebase_auth,你需要在Firebase项目中配置身份验证,并在你的Flutter应用中初始化Firebase。

  • 在Firebase控制台中为你的应用启用电子邮件/密码和/或其他身份验证方法。
  • 下载google-services.json文件并将其放置在android/app/目录中。
  • 对于iOS,下载GoogleService-Info.plist并放置在ios/Runner/目录中,并在Xcode中配置相关的Build Settings。

3. 实现用户登录和注册功能

以下是一个简单的示例,展示了如何使用firebase_auth进行用户注册和登录:

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Auth Demo',
      home: AuthScreen(),
    );
  }
}

class AuthScreen extends StatefulWidget {
  @override
  _AuthScreenState createState() => _AuthScreenState();
}

class _AuthScreenState extends State<AuthScreen> {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  String _email = '';
  String _password = '';
  bool _isLoading = false;

  void _signUp() async {
    setState(() {
      _isLoading = true;
    });

    try {
      UserCredential userCredential = await _auth.createUserWithEmailAndPassword(
        email: _email,
        password: _password,
      );
      // 用户注册成功后的处理逻辑
      print('User registered: ${userCredential.user?.uid}');
    } catch (e) {
      print(e.message);
    }

    setState(() {
      _isLoading = false;
    });
  }

  void _signIn() async {
    setState(() {
      _isLoading = true;
    });

    try {
      UserCredential userCredential = await _auth.signInWithEmailAndPassword(
        email: _email,
        password: _password,
      );
      // 用户登录成功后的处理逻辑
      print('User signed in: ${userCredential.user?.uid}');
    } catch (e) {
      print(e.message);
    }

    setState(() {
      _isLoading = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Auth Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              decoration: InputDecoration(labelText: 'Email'),
              onChanged: (value) => _email = value,
            ),
            TextField(
              decoration: InputDecoration(labelText: 'Password'),
              obscureText: true,
              onChanged: (value) => _password = value,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _isLoading ? null : _signUp,
              child: Text('Sign Up'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _isLoading ? null : _signIn,
              child: Text('Sign In'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 安全性:在生产环境中,不要将密码等敏感信息硬编码在客户端。
  2. 错误处理:上述示例中简单地打印了错误信息,实际应用中应该有更友好的错误提示和处理逻辑。
  3. UI/UX:上述示例是一个简单的UI,实际应用中可能需要更复杂的界面设计和用户体验。

如果你确实在寻找一个名为main_auth的插件,请确保检查Flutter的官方插件库或社区提供的插件,并按照其文档进行配置和使用。

回到顶部