Flutter认证授权插件kimko_auth的使用

Flutter认证授权插件kimko_auth的使用

Overview

kimko_auth 是一个用于管理 Flutter 应用程序用户认证的强大库。它支持多种操作,如登录、注册、注销、获取用户详细信息、更新个人资料信息、更新头像以及停用账户。

目录

  1. 安装
  2. 使用
  3. 公共方法
  4. 示例代码
  5. 唯一应用ID

安装

在您的 Flutter 项目中使用 kimko_auth 库时,将其添加到 pubspec.yaml 文件中:

dependencies:
  kimko_auth: ^1.0.4

然后运行以下命令以安装新的依赖项:

flutter pub get

使用

在项目中添加 kimko_auth 后,通过导入包并初始化 KimkoAuth 来开始使用。

初始化库

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

KimkoAuth kimkoAuth = KimkoAuth();

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await KimkoAuth.initialize(teamId: 'your-team-id'); // 替换为您的团队ID

  runApp(const MyApp());
}

kimiko 响应类

kimiko 提供了一个响应类 KimikoResponse 和异常类 KimikoException 来处理 API 返回的结果。

class KimikoResponse {
  final dynamic data;
  final String? error;
  final int? statusCode;

  KimikoResponse({this.data, this.error, this.statusCode});

  bool get isSuccess => error == null;
}

class KimikoException implements Exception {
  final String? error;

  KimikoException({this.error});
}

kimiko 用户 JSON 示例

返回的用户数据格式如下:

{
  "id": "",
  "first_name": "",
  "last_name": "",
  "is_active": true,
  "email": "somethingm@gmail.com",
  "avatar_url": ""
}

注册功能

返回值:

Future<KimikoResponse>
包含用户响应

示例代码:

TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();
TextEditingController fNameController = TextEditingController();
TextEditingController lNameController = TextEditingController();
TextEditingController userNameController = TextEditingController();

Future<void> signUp() async {
  try {
    var res = await kimkoAuth.signup(
        username: userNameController.text.trim(),
        email: emailController.text.trim(),
        password: passwordController.text.trim(),
        firstName: fNameController.text.trim(),
        lastName: lNameController.text.trim());
    Navigator.of(context).pushReplacement(
        MaterialPageRoute(builder: (_) => const LoginScreen()));
  } on KimikoException catch (e) {
    print('Kimiko ${e.error}');
  } catch (e) {
    print("Another error $e");
  }
}

登录功能

返回值:

Future<KimikoResponse>
包含用户响应

示例代码:

TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();

Future<void> signIn(BuildContext context) async {
  try {
    var res = await kimkoAuth.signIn(
        email: emailController.text.trim(),
        password: passwordController.text.trim());
  } on KimikoException catch (e) {
    print('Kimiko ${e.error}');
  } catch (e) {
    print("Another error $e");
  }
}

获取用户信息

从 API 获取用户详细信息。

返回值:

Future<KimikoResponse>
包含用户响应

示例代码:

Future<void> getUser() async {
  try {
    var res = await kimkoAuth.getUser();
    print(res.data);
    if (res.data != null) {
      setState(() {
        user.value = res.data['data'];
      });
      Navigator.of(context).push(MaterialPageRoute(builder: (_) => const ProfileScreen()));
    }
  } on KimikoException catch (e) {
    debugPrint('Kimiko ${e.error}');
    errorSnack(e.error.toString(), context: context);
  } catch (e) {
    debugPrint("Another error $e");
    errorSnack(e.toString(), context: context);
  }
}

获取已登录用户

获取当前已登录用户的详细信息。

返回值:

Future<KimikoResponse>
包含用户响应

示例代码:

var res = await kimkoAuth.getLoggedInUser();
print(res.data);

更新用户信息

更新用户的详细信息,包括名字、姓氏、头像 URL 和用户名。

返回值:

Future<KimikoResponse>
包含用户响应

示例代码:

Future<void> updateUser() async {
  try {
    var res = await kimkoAuth.updateUser(
      firstName: fNameController.text.trim(),
      lastName: lNameController.text.trim(),
      avatarUrl: newImageURL,
    );
    print(res.data);
  } on KimikoException catch (e) {
    debugPrint('Kimiko ${e.error}');
    errorSnack(e.error.toString(), context: context);
  } catch (e) {
    debugPrint("Another error $e");
    errorSnack(e.toString(), context: context);
  }
}

注销

此方法会删除所有用户数据并结束会话。

返回值:

Future<KimikoResponse>
包含用户响应

示例代码:

var res = await kimkoAuth.logOut();

团队ID

以下是不同团队及其对应的 ID:

团队名称 团队ID
Team Kimiko (Flutter Team F) angrybird-flutter-f01
Flutter Team A angrybird-kimiko-f06
Team Starlight heritagequest-starlight-f02
Team Anchor hockeygame-anchor-f03

示例代码完整 Demo

以下是一个完整的示例代码,展示如何集成 kimko_auth 的登录和注册功能:

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

KimkoAuth kimkoAuth = KimkoAuth();

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await KimkoAuth.initialize(teamId: 'your-team-id');
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const LoginScreen(),
    );
  }
}

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

  [@override](/user/override)
  State<LoginScreen> createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  final emailController = TextEditingController();
  final passwordController = TextEditingController();

  Future<void> signIn() async {
    try {
      final res = await kimkoAuth.signIn(
          email: emailController.text.trim(),
          password: passwordController.text.trim());
      print(res.data);
    } on KimikoException catch (e) {
      print('Kimiko ${e.error}');
    } catch (e) {
      print("Another error $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Login")),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: emailController,
              decoration: const InputDecoration(labelText: "Email"),
            ),
            TextField(
              controller: passwordController,
              obscureText: true,
              decoration: const InputDecoration(labelText: "Password"),
            ),
            ElevatedButton(
              onPressed: signIn,
              child: const Text("Login"),
            ),
            TextButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (_) => const SignUpScreen()),
                );
              },
              child: const Text("Sign Up"),
            ),
          ],
        ),
      ),
    );
  }
}

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

  [@override](/user/override)
  State<SignUpScreen> createState() => _SignUpScreenState();
}

class _SignUpScreenState extends State<SignUpScreen> {
  final emailController = TextEditingController();
  final passwordController = TextEditingController();
  final firstNameController = TextEditingController();
  final lastNameController = TextEditingController();
  final usernameController = TextEditingController();

  Future<void> signUp() async {
    try {
      final res = await kimkoAuth.signup(
        username: usernameController.text.trim(),
        email: emailController.text.trim(),
        password: passwordController.text.trim(),
        firstName: firstNameController.text.trim(),
        lastName: lastNameController.text.trim(),
      );
      print(res.data);
    } on KimikoException catch (e) {
      print('Kimiko ${e.error}');
    } catch (e) {
      print("Another error $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Sign Up")),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: firstNameController,
              decoration: const InputDecoration(labelText: "First Name"),
            ),
            TextField(
              controller: lastNameController,
              decoration: const InputDecoration(labelText: "Last Name"),
            ),
            TextField(
              controller: usernameController,
              decoration: const InputDecoration(labelText: "Username"),
            ),
            TextField(
              controller: emailController,
              decoration: const InputDecoration(labelText: "Email"),
            ),
            TextField(
              controller: passwordController,
              obscureText: true,
              decoration: const InputDecoration(labelText: "Password"),
            ),
            ElevatedButton(
              onPressed: signUp,
              child: const Text("Sign Up"),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter认证授权插件kimko_auth的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


kimko_auth 是一个用于 Flutter 的认证和授权插件,它可以帮助开发者轻松地集成用户认证和授权功能到 Flutter 应用中。以下是如何使用 kimko_auth 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 kimko_auth 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  kimko_auth: ^1.0.0  # 请使用最新版本

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

2. 初始化插件

在你的 Flutter 应用中初始化 kimko_auth 插件。通常,你可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await KimkoAuth.initialize(
    apiKey: 'YOUR_API_KEY',
    authDomain: 'YOUR_AUTH_DOMAIN',
  );
  runApp(MyApp());
}

3. 用户注册

使用 kimko_auth 进行用户注册:

void registerUser(String email, String password) async {
  try {
    await KimkoAuth.instance.register(email: email, password: password);
    print('User registered successfully');
  } catch (e) {
    print('Error registering user: $e');
  }
}

4. 用户登录

使用 kimko_auth 进行用户登录:

void loginUser(String email, String password) async {
  try {
    await KimkoAuth.instance.login(email: email, password: password);
    print('User logged in successfully');
  } catch (e) {
    print('Error logging in: $e');
  }
}

5. 检查用户登录状态

你可以检查用户是否已经登录:

void checkLoginStatus() async {
  bool isLoggedIn = await KimkoAuth.instance.isLoggedIn();
  if (isLoggedIn) {
    print('User is logged in');
  } else {
    print('User is not logged in');
  }
}

6. 用户注销

使用 kimko_auth 进行用户注销:

void logoutUser() async {
  try {
    await KimkoAuth.instance.logout();
    print('User logged out successfully');
  } catch (e) {
    print('Error logging out: $e');
  }
}

7. 获取用户信息

你可以获取当前登录用户的信息:

void getUserInfo() async {
  try {
    User user = await KimkoAuth.instance.getUser();
    print('User info: ${user.email}');
  } catch (e) {
    print('Error getting user info: $e');
  }
}

8. 处理认证状态变化

你可以监听用户的认证状态变化:

void listenToAuthState() {
  KimkoAuth.instance.authStateChanges.listen((User? user) {
    if (user != null) {
      print('User is logged in: ${user.email}');
    } else {
      print('User is logged out');
    }
  });
}

9. 错误处理

在使用 kimko_auth 时,确保正确处理可能出现的错误。例如,网络错误、无效的凭据等。

10. 示例应用

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

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await KimkoAuth.initialize(
    apiKey: 'YOUR_API_KEY',
    authDomain: 'YOUR_AUTH_DOMAIN',
  );
  runApp(AuthApp());
}

class AuthApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AuthScreen(),
    );
  }
}

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

class _AuthScreenState extends State<AuthScreen> {
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();

  void _register() async {
    try {
      await KimkoAuth.instance.register(
        email: _emailController.text,
        password: _passwordController.text,
      );
      print('User registered successfully');
    } catch (e) {
      print('Error registering user: $e');
    }
  }

  void _login() async {
    try {
      await KimkoAuth.instance.login(
        email: _emailController.text,
        password: _passwordController.text,
      );
      print('User logged in successfully');
    } catch (e) {
      print('Error logging in: $e');
    }
  }

  void _logout() async {
    try {
      await KimkoAuth.instance.logout();
      print('User logged out successfully');
    } catch (e) {
      print('Error logging out: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Kimko Auth Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
            ),
            TextField(
              controller: _passwordController,
              decoration: InputDecoration(labelText: 'Password'),
              obscureText: true,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _register,
              child: Text('Register'),
            ),
            ElevatedButton(
              onPressed: _login,
              child: Text('Login'),
            ),
            ElevatedButton(
              onPressed: _logout,
              child: Text('Logout'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部