Flutter身份认证与工具集插件idkit的使用

Flutter身份认证与工具集插件idkit的使用

1. 简介

idkit 是一个为 Flutter 开发者提供的基础库,包含了许多常用的开发功能。该库具有以下特点:

  • 简单易用
  • 功能全面
  • 稳定性好
  • 长期维护

idkit 的目标是让开发变得更简单!

2. 功能目录

idkit 提供了多种功能和小部件,具体如下:

功能类别
  1. 金额千分位处理

    • formatThousands 方法可以将数字格式化为带有千分位的字符串。
  2. 扩展Widget边距

    • insetsinsetsOnlyinsetsSymmetric 等方法可以方便地为 Widget 添加边距。
  3. 颜色十六进制值处理

    • hexColoraHexColorhexAColor 等方法可以将十六进制颜色值转换为 Color 对象。
  4. Widget之间的间距

    • vGaphGap 可以在垂直和水平方向上添加间距。
  5. 文本样式扩展

    • bolditalicc(Colors)fSize 等方法可以快速设置文本样式。
  6. 日期扩展

    • formatfriendFormatgetWeak 等方法可以格式化日期和时间。
  7. 数字格式化

    • phoneFormatbankFormatidFormat 等方法可以格式化电话号码、银行卡号和身份证号。
  8. 数字脱敏处理

    • phoneDesensitizedbankDesensitizedidDesensitized 等方法可以对敏感信息进行脱敏处理。
小部件类别
  1. IDKitChoice

    • 用于实现多选或单选的功能,支持列表、网格、流式布局等。
  2. IDKitMultiFingerRecognizer

    • 用于多指识别,可以检测屏幕上同时触摸的指数量。
  3. Fd_Console

    • 用于调试输出,支持多指识别。

3. 使用示例

以下是一个完整的示例代码,展示了如何使用 idkit 进行身份认证和工具集的功能调用。

import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:idkit/idkit.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('idkit 示例')),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              // 日期格式化示例
              ElevatedButton(
                onPressed: () => timeFormatHandle(),
                child: const Text('日期格式化'),
              ),
              const SizedBox(height: 10),
              
              // 千分位处理示例
              ElevatedButton(
                onPressed: () => thousandsHandle(),
                child: const Text('千分位处理'),
              ),
              const SizedBox(height: 10),
              
              // 脱敏处理示例
              ElevatedButton(
                onPressed: () => desensitizedMethod(),
                child: const Text('脱敏处理'),
              ),
              const SizedBox(height: 10),
              
              // 数字格式化示例
              ElevatedButton(
                onPressed: () => numberFormatMethod(),
                child: const Text('数字格式化'),
              ),
              const SizedBox(height: 10),
              
              // IDKitChoice 示例
              ElevatedButton(
                onPressed: () => Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const ChoiceWidget()),
                ),
                child: const Text('IDKitChoice 示例'),
              ),
              const SizedBox(height: 10),
              
              // 多指识别示例
              ElevatedButton(
                onPressed: () => Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const MultiFingerWidget()),
                ),
                child: const Text('多指识别示例'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

// 日期格式化处理
void timeFormatHandle() {
  final DateTime dateTime = DateTime(2022, 6, 12, 9, 22, 50);
  
  // 标准格式化
  debugPrint(dateTime.format()); // 2022-06-12 09:22:50
  
  // 自定义格式化
  debugPrint(dateTime.format(style: 'yyyy/MM/dd hh:mm:ss')); // 2022/06/12 09:22:50
  
  // 友好格式化
  debugPrint(DateTime.now().friendFormat()); // 刚刚
  debugPrint(DateTime.now().subtract(const Duration(minutes: 2)).friendFormat()); // 2分钟前
  debugPrint(DateTime.now().subtract(const Duration(days: 1)).friendFormat()); // 昨天
}

// 千分位处理
void thousandsHandle() {
  // int 类型
  debugPrint((-0).formatThousands()); // 0
  debugPrint((-123).formatThousands()); // -123
  debugPrint(123456.formatThousands()); // 123,456
  debugPrint(123456789.formatThousands()); // 123,456,789
  
  // double 类型
  debugPrint(0.0.formatThousands()); // 0.0
  debugPrint(123.12.formatThousands()); // 123.12
  debugPrint(123456.1234.formatThousands()); // 123,456.1234
  
  // String 类型
  debugPrint('0.0'.formatThousands()); // 0.0
  debugPrint('123.12'.formatThousands()); // 123.12
  debugPrint('-  123456.1234'.formatThousands()); // -123,456.1234
  
  // 自定义千分位符号
  debugPrint(1234567.formatThousands(symbol: '_')); // 1_234_567
  
  // 保留指定小数位数
  debugPrint(0.56.formatThousands(fractionDigits: 0)); // 1
  debugPrint(1234.5.formatThousands(fractionDigits: 2)); // 1,234.50
}

// 脱敏处理
void desensitizedMethod() {
  // 手机号码脱敏
  debugPrint('18801210283'.phoneDesensitized); // 188****0283
  
  // 银行卡号脱敏
  debugPrint('6333234433554466'.bankDesensitized); // ****4466
  
  // 身份证号脱敏
  debugPrint('411122128995160537'.idDesensitized); // 411122********0537
}

// 数字格式化
void numberFormatMethod() {
  // 手机号码格式化
  debugPrint('18702210183'.phoneFormat); // 187 0221 0183
  
  // 银行卡号格式化
  debugPrint('6222333444455551'.bankFormat); // 6222 3334 4445 5551
  
  // 身份证号格式化
  debugPrint('411422189806789226'.idFormat); // 4114 2218 9806 7892 26
}

// IDKitChoice 示例
class ChoiceWidget extends StatelessWidget {
  const ChoiceWidget({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    final List<String> list = ['王昭君', '甄姬', '妲己', '不知火舞', '貂蝉'];
    
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        // 单选列表
        Text(
          'IDKitChoice.list',
          style: const TextStyle().bold.fSize(20),
        ),
        IDKitChoice<String>.list(
          type: ChoiceType.single,
          sources: list,
          chosenIndexs: const [2],
          itemBuilder: (context, state, data, index) {
            final color = state ? Colors.red : Colors.blue;
            return Container(
              width: 200,
              color: color,
              alignment: Alignment.center,
              child: Text(data),
            );
          },
          choiceCallMethod: (result, results) {
            debugPrint(result);
          },
        ).insetsOnly(bottom: 20),
        
        // 多选列表
        Text(
          'IDKitChoice.listSeparated',
          style: const TextStyle().bold.fSize(20),
        ),
        IDKitChoice<String>.listSeparated(
          type: ChoiceType.multiple,
          sources: list,
          separatorBuilder: (_, state, result, index) {
            return const Divider(
              height: 2,
              color: Colors.red,
              thickness: 2,
            );
          },
          itemBuilder: (context, state, data, index) {
            final color = state ? Colors.red : Colors.blue;
            return Container(
              width: 200,
              color: color,
              alignment: Alignment.center,
              child: Text(data),
            );
          },
          choiceCallMethod: (result, results) {
            debugPrint(results.toString());
          },
        ).insetsOnly(bottom: 20),
      ],
    );
  }
}

// 多指识别示例
class MultiFingerWidget extends StatelessWidget {
  const MultiFingerWidget({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return IDKitGestureRecognizer(
      fingerCount: (p0) {
        log('$p0 fingers identified');
      },
      onTap: (p0) {
        log('Tapped with $p0 fingers');
      },
      onStart: (p0) {
        log('Zoom start -- ${p0.points.first.localPosition}');
      },
      onUpdate: (IDKitUpdateDetails p0) {
        log('Zoom update -- ${p0.pointerCount}');
      },
      onEnd: (p0) {
        log('Zoom end');
      },
      child: Container(
        color: Colors.red,
        width: 200,
        height: 200,
      ),
    ).insetsAll(100);
  }
}

更多关于Flutter身份认证与工具集插件idkit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


在Flutter项目中,使用idkit插件可以简化身份认证流程。idkit通常用于集成多种身份认证服务,比如手机号验证码登录、邮箱验证码登录、第三方社交账号登录等。下面是一个简单的代码示例,展示了如何在Flutter项目中使用idkit进行身份认证。

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

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

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

接下来,是一个使用idkit进行手机号验证码登录的简单示例。

1. 初始化Idkit

在你的Flutter应用的入口文件(通常是main.dart)中,初始化Idkit

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

void main() {
  // 初始化Idkit
  Idkit.init(
    appId: '你的App ID', // 替换为你的应用ID
    appKey: '你的App Key', // 替换为你的应用密钥
    serverUrl: '你的服务器URL', // 替换为你的服务器地址
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Idkit Demo'),
        ),
        body: Center(
          child: LoginPage(),
        ),
      ),
    );
  }
}

2. 创建登录页面

创建一个LoginPage,用于处理手机号验证码登录逻辑。

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

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  final TextEditingController _phoneController = TextEditingController();
  final TextEditingController _codeController = TextEditingController();
  String _verificationMessage = '';

  void _sendVerificationCode() async {
    try {
      String phone = _phoneController.text;
      var result = await Idkit.sendSmsCode(phoneNumber: phone);
      setState(() {
        _verificationMessage = '验证码已发送';
      });
      // 通常这里会有一个倒计时逻辑,防止用户频繁点击发送验证码
    } catch (e) {
      setState(() {
        _verificationMessage = '发送验证码失败: ${e.message}';
      });
    }
  }

  void _loginWithCode() async {
    try {
      String phone = _phoneController.text;
      String code = _codeController.text;
      var result = await Idkit.loginWithSmsCode(phoneNumber: phone, code: code);
      setState(() {
        _verificationMessage = '登录成功: ${result.user.id}';
      });
    } catch (e) {
      setState(() {
        _verificationMessage = '登录失败: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        TextField(
          controller: _phoneController,
          decoration: InputDecoration(labelText: '手机号'),
          keyboardType: TextInputType.phoneNumber,
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _sendVerificationCode,
          child: Text('发送验证码'),
        ),
        SizedBox(height: 20),
        TextField(
          controller: _codeController,
          decoration: InputDecoration(labelText: '验证码'),
          keyboardType: TextInputType.number,
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _loginWithCode,
          child: Text('登录'),
        ),
        SizedBox(height: 20),
        Text(_verificationMessage),
      ],
    );
  }
}

注意事项

  1. 错误处理:在实际应用中,你应该更全面地处理各种可能的错误情况。
  2. 安全性:确保在服务器端验证验证码和用户信息,以防止安全漏洞。
  3. 用户体验:添加倒计时逻辑、加载指示器等,以提升用户体验。

以上代码提供了一个基本的框架,展示了如何使用idkit插件进行手机号验证码登录。根据你的具体需求,你可能需要调整代码以适应你的后端服务和用户认证流程。

回到顶部