Flutter区块链认证插件web3auth_flutter的使用

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

Flutter区块链认证插件 web3auth_flutter 的使用

Web3Auth 是一种无密码认证服务,专为 Web3 应用和钱包设计。它通过聚合 OAuth 登录(如 Google、Twitter、Discord)、不同钱包以及创新的多方计算(MPC),为您的应用程序中的每个用户提供无缝的登录体验。

📖 文档

查阅官方 Web3Auth 文档SDK 参考 以开始使用!

💡 特性

  • 插件式 OAuth 基于 Web3 认证服务
  • 完全去中心化的非托管密钥基础设施
  • 端到端可白标解决方案
  • 基于阈值加密的密钥重建
  • 多因素认证设置与恢复(包括密码、备份短语、设备因子编辑/删除等)
  • 支持 WebAuthn 和无密码登录
  • 支持连接多个钱包
  • DApp 活动会话管理

…以及其他更多功能

⏪ 要求

iOS

  • 仅支持 iOS 14+,因为需要使用 ASWebAuthenticationSession
    • Xcode 11.4+ / 12.x
    • Swift 4.x / 5.x
    • 对于 iOS 构建:platform :ios 需要设置为 14.0。检查您 Flutter 项目中的 ios/Podfile 文件进行修改。

Android

  • 支持 API 版本 26 或更高版本。
    • 对于 Android 构建:compileSdkVersion 需要设置为 34。
    • 检查您 Flutter 项目中的 android/app/build.gradle 文件进行修改。

⚡ 安装

web3auth_flutter 添加为 pubspec.yaml 文件中的依赖项:

dependencies:
  web3auth_flutter: ^6.1.1

或运行以下命令:

flutter pub add web3auth_flutter

🌟 配置

查阅 SDK 参考 以配置 Android 和 iOS 构建。

🩹 示例

以下是一个完整的示例代码,展示了如何初始化、登录、登出用户,并处理异常:

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

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState with WidgetsBindingObserver {
  String _privKey = '';
  String _userInfo = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    initWeb3Auth();
  }

  [@override](/user/override)
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  Future<void> initWeb3Auth() async {
    await Web3AuthFlutter.init(
      Web3AuthOptions(
        clientId: 'YOUR_WEB3AUTH_CLIENT_ID', // 替换为您从 dashboard.web3auth.io 获取的 client ID
        network: Network.sapphire_devnet,
        redirectUrl: 'YOUR_REDIRECT_URL', // 替换为您的重定向 URL
      ),
    );
  }

  Future<void> initialize() async {
    try {
      final result = await Web3AuthFlutter.initialize();
      setState(() {
        _privKey = result.privKey;
        _userInfo = result.userInfo.toString();
      });
    } catch (e) {
      print('Error initializing: $e');
    }
  }

  Future<void> login() async {
    try {
      await Web3AuthFlutter.login(LoginParams(loginProvider: Provider.google));
      initialize();
    } on UserCancelledException {
      print("User cancelled.");
    } on UnKnownException {
      print("Unknown exception occurred");
    } catch (e) {
      print(e.toString());
    }
  }

  Future<void> logout() async {
    await Web3AuthFlutter.logout();
    setState(() {
      _privKey = '';
      _userInfo = '';
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Web3Auth Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: login,
                child: const Text('Login with Google'),
              ),
              ElevatedButton(
                onPressed: logout,
                child: const Text('Logout'),
              ),
              if (_privKey.isNotEmpty)
                Text('Private Key: $_privKey'),
              if (_userInfo.isNotEmpty)
                Text('User Info: $_userInfo'),
            ],
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  void didChangeAppLifecycleState(final AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      Web3AuthFlutter.setCustomTabsClosed();
    }
  }
}

触发用户取消异常(Android)

在 Android 上,如果您希望触发用户关闭浏览器标签时的异常,可以使用 WidgetsBindingObserver 混入您的登录屏幕:

[@override](/user/override)
void didChangeAppLifecycleState(final AppLifecycleState state) {
  if (state == AppLifecycleState.resumed) {
    Web3AuthFlutter.setCustomTabsClosed();
  }
}

更多关于Flutter区块链认证插件web3auth_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter区块链认证插件web3auth_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用web3auth_flutter插件来进行区块链认证的示例代码。这个插件允许你通过Web3Auth服务进行用户身份验证,并管理他们的区块链账户。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加web3auth_flutter的依赖:

dependencies:
  flutter:
    sdk: flutter
  web3auth_flutter: ^x.y.z  # 请替换为最新版本号

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

2. 配置Web3Auth

在你的Flutter项目的入口文件(通常是main.dart)中,配置Web3Auth客户端。你需要提供你的Web3Auth API密钥(从Web3Auth Dashboard获取)。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Web3Auth Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Web3Auth Demo'),
        ),
        body: Web3AuthScreen(),
      ),
    );
  }
}

class Web3AuthScreen extends StatefulWidget {
  @override
  _Web3AuthScreenState createState() => _Web3AuthScreenState();
}

class _Web3AuthScreenState extends State<Web3AuthScreen> {
  late Web3AuthClient _web3AuthClient;

  @override
  void initState() {
    super.initState();
    // 替换为你的Web3Auth API密钥
    const apiKey = 'YOUR_WEB3AUTH_API_KEY';
    _web3AuthClient = Web3AuthClient(apiKey: apiKey);
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () async {
          try {
            // 启动认证流程
            final authResult = await _web3AuthClient.authenticate();
            // 处理认证结果
            if (authResult.isSuccessful) {
              // 获取用户信息
              final user = authResult.user;
              print('Authenticated user: ${user.toJson()}');
            } else {
              print('Authentication failed: ${authResult.error?.message}');
            }
          } catch (e) {
            print('Error during authentication: $e');
          }
        },
        child: Text('Authenticate with Web3Auth'),
      ),
    );
  }
}

3. 处理认证结果

上面的代码示例中,authenticate()方法会启动认证流程,并返回一个AuthResult对象。如果认证成功,你可以从AuthResult对象中获取用户信息。如果认证失败,你可以处理错误。

4. 注意事项

  • 确保你已经从Web3Auth Dashboard获取了API密钥,并替换示例代码中的YOUR_WEB3AUTH_API_KEY
  • Web3Auth插件依赖于Web视图,因此确保你的应用有适当的权限来处理Web内容。
  • 你可以根据需求进一步自定义认证流程,比如添加UI元素来显示加载状态或错误消息。

这个示例提供了一个基本的框架,你可以在此基础上根据需求进行扩展和修改。

回到顶部