Flutter身份验证插件arcana_auth_flutter的使用

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

Flutter身份验证插件arcana_auth_flutter的使用

Arcana SDK

一个为iOS和Android平台提供加密钱包认证支持的类型安全的React Native库,包括对所有货币变体的支持。

前提条件

  • (仅限iOS)你需要使用Xcode版本11或更高版本。这将允许你开发时使用iOS版本13及以上,在这些版本中提供了通过Apple登录的API。

安装

该插件在Pub上可用:https://pub.dev/packages/arcana_auth_flutter

在你的应用pubspec.yaml文件的依赖项中添加以下内容:

  arcana_auth_flutter: ^0.0.6

使用

初始化

import 'package:arcana_sdk/arcana_sdk.dart';

final auth = AuthProvider(clientId:"xar_xxxx_...");
auth.init(context: context);

登录/登出

使用社交账号登录

auth.loginWithSocial("google").then((_) {
  // 登录成功后执行的操作
}).catchError(...);

使用OTP登录

auth.loginWithOTP("${email_id}").then((_) {
  // 登录成功后执行的操作
}).catchError(...);

登出

auth.logout().then((_) {
  // 登出后执行的操作
});

显示/隐藏钱包

显示钱包

auth.showWallet();

隐藏钱包

auth.hideWallet();

获取钱包可见性状态

var isVisible = auth.isVisible();

清除Webview缓存

auth.clearCache();

方法

请求(如EIP1193)

auth.request(method: "...", params: [...]).then(() {
  // 执行的操作
});

获取用户信息

auth.getUserInfo().then((UserInfo info) {
  // 执行的操作
});

发送交易

auth.sendTransaction({ to: "", value: "" }).then((hash) {
  // 执行的操作
});

获取账户

auth.getAccount().then((account) {
  // 执行的操作
});

登出

auth.logout();

示例代码

以下是一个完整的示例代码,展示了如何使用arcana_auth_flutter插件进行身份验证。

import 'dart:convert';
import 'dart:math';

import 'package:arcana_auth_flutter/common.dart';
import 'package:arcana_sdk_example/strings.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:arcana_auth_flutter/arcana_sdk.dart';

void main() {
  runApp(MaterialApp(home: const MyApp()));
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final auth = AuthProvider(
      clientId: "xar_dev_2cbfe3fc82840d8f4191935e1811b0c2e33619f8");
  TextEditingController heightController = TextEditingController();
  TextEditingController widthController = TextEditingController();
  String logs = '';
  String action = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息是异步的,因此我们在异步方法中初始化
  Future<void> initPlatformState() async {
    setState(() {
      logs = '';
    });
    auth.init(context: context);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Column(
          children: [
            Row(children: [
              Flexible(
                child: Container(
                  padding: const EdgeInsets.only(
                      bottom: 13.0, top: 13.0, left: 13.0, right: 13.0),
                  child: Text(
                    "结果: $logs",
                    style: const TextStyle(
                      fontSize: 13.0,
                      fontFamily: 'Roboto',
                      color: Color(0xFF212121),
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
              ),
            ]),
            Row(children: [
              Container(
                  padding: const EdgeInsets.only(
                      bottom: 13.0, top: 13.0, left: 13.0, right: 13.0),
                  width: MediaQuery.of(context).size.width * 0.8,
                child: Row(children: [Flexible(
                  child: Text(
                    "操作: $action",
                    style: const TextStyle(
                      fontSize: 13.0,
                      fontFamily: 'Roboto',
                      color: Color(0xFF212121),
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                )],
                ),
              ),
            ]),
            Row(
              children: [
                Expanded(
                  child: ElevatedButton(
                      onPressed: () {
                        auth.loginWithSocial("google").then((_) {
                          action = "login_complete";
                          setState(() {});
                        });
                        logs = '';
                        action = 'login_google';
                        setState(() {});
                      },
                      child: Text("使用Google登录")),
                )
              ],
            ),
            Row(
              children: [
                Expanded(
                    child: ElevatedButton(
                        onPressed: () {
                          auth.showWallet();
                          logs = '';
                          action = 'show_wallet';
                          setState(() {});
                        },
                        child: Text("显示钱包")),
                SizedBox(width: 50),
                Expanded(
                    child: ElevatedButton(
                        onPressed: () {
                          auth.hideWallet();
                          action = 'hide_wallet';
                        },
                        child: Text("隐藏钱包")),
              ],
            ),
            Row(children: [
              Expanded(
                child: ElevatedButton(
                    onPressed: () {
                      auth.getUserInfo().then((info) {
                        debugPrint(info.address);
                        logs = info.toJSONString();
                        action = 'get_user_info';
                        setState(() {});
                      });
                    },
                    child: Text('获取用户信息')),
              ),
              SizedBox(width: 50),
              Expanded(
                child: ElevatedButton(
                    onPressed: () {
                      auth.sendTransaction(params: {
                        "to": "0xE28F01Cf69f27Ee17e552bFDFB7ff301ca07e780",
                        "value": "0x9184e72a"
                      }).then((hash) {
                        debugPrint("哈希值: $hash");
                        logs = hash;
                        action = 'send_transaction';
                        setState(() {});
                      });
                    },
                    child: Text('发送交易')),
              )
            ]),
            Row(
              children: [
                Expanded(
                  child: ElevatedButton(
                      onPressed: () {
                        auth.getAccount().then((account) {
                          debugPrint("账户: $account");
                          logs = account;
                          action = 'get_account';
                          setState(() {});
                        });
                      },
                      child: Text('获取账户')),
                ),
                SizedBox(width: 50),
                Expanded(
                  child: ElevatedButton(
                      onPressed: () {
                        auth.logout();
                        action = 'logout';
                      },
                      child: Text('登出')),
                ),
              ],
            ),
            Row(
              children: [
                Expanded(
                    child: TextField(
                  controller: heightController,
                )),
                Expanded(
                    child: TextField(
                  controller: widthController,
                )),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用arcana_auth_flutter插件的一个简单示例。arcana_auth_flutter插件通常用于处理身份验证流程,比如登录和注册。以下示例展示了如何进行基本的身份验证操作。

首先,确保你已经在pubspec.yaml文件中添加了arcana_auth_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  arcana_auth_flutter: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,我们编写一些Flutter代码来使用这个插件。以下是一个基本的示例,展示如何初始化插件并进行登录操作。

main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Arcana Auth Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AuthScreen(),
    );
  }
}

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

class _AuthScreenState extends State<AuthScreen> {
  final ArcanaAuth _arcanaAuth = ArcanaAuth();
  String _authStatus = 'Not Logged In';

  @override
  void initState() {
    super.initState();
    // 初始化插件(如果需要的话,这里可以配置一些初始化参数)
    // _arcanaAuth.initialize(...);
  }

  Future<void> _login() async {
    try {
      // 假设我们使用电子邮件和密码登录
      final result = await _arcanaAuth.loginWithEmailAndPassword(
        email: 'user@example.com',
        password: 'password123',
      );

      if (result.isSuccessful) {
        setState(() {
          _authStatus = 'Logged In';
        });
      } else {
        // 处理登录失败的情况
        setState(() {
          _authStatus = 'Login Failed: ${result.errorMessage}';
        });
      }
    } catch (e) {
      // 处理异常
      setState(() {
        _authStatus = 'Login Failed: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Arcana Auth Flutter Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              _authStatus,
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _login,
              child: Text('Login'),
            ),
          ],
        ),
      ),
    );
  }
}

注意点

  1. 初始化:某些身份验证插件可能需要初始化步骤,比如配置API密钥等。请查阅arcana_auth_flutter的官方文档来了解是否需要初始化步骤以及如何初始化。

  2. 错误处理:在真实的应用中,你应该更详细地处理错误情况,比如网络错误、认证失败等。

  3. 用户数据:一旦用户成功登录,你可能需要将用户数据保存在本地(比如使用shared_preferences插件),以便在用户重新打开应用时能够识别他们的登录状态。

  4. 注销功能:虽然上面的示例没有展示注销功能,但arcana_auth_flutter插件很可能提供了注销方法。你可以查阅文档来了解如何使用它。

  5. UI/UX:在实际应用中,你可能需要更复杂的UI/UX设计来处理身份验证流程,比如显示加载指示器、处理多种身份验证方式等。

这个示例只是一个起点,具体实现可能会根据你的应用需求和arcana_auth_flutter插件的API有所不同。务必查阅官方文档以获取最新和详细的信息。

回到顶部