Flutter密码生成插件password_maker的使用

Flutter密码生成插件password_maker的使用

Description

这是一个帮助在登录界面为新用户建议强密码的包。

Features

您可以指定密码的长度。

Getting Started

导入该包:

import 'package:password_maker/password_maker.dart';

Depend on it

pubspec.yaml文件中添加依赖:

dependencies:
  password_maker: ^0.0.2

Usage

初始化一个临时字符串用于存储生成的密码,然后调用generatePassWord方法(传入密码长度)。

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:password_maker/password_maker.dart';
import 'package:provider/provider.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(
    ChangeNotifierProvider<ThemeProvider>(
      // for theme
      create: (_) => ThemeProvider(),
      builder: (context, _) => MyApp(),
    ),
  );
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    final themeProvider = Provider.of<ThemeProvider>(context);
    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        statusBarBrightness: themeProvider.isDarkMode ? Brightness.light : Brightness.dark,
      ),
    );
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        themeMode: themeProvider.isDarkMode ? ThemeMode.dark : ThemeMode.light,
        theme: ThemeData.light().copyWith(
          colorScheme: ThemeData.light().colorScheme.copyWith(),
        ),
        darkTheme: ThemeData.dark().copyWith(
          colorScheme: ThemeData.dark().colorScheme.copyWith(),
        ),
        home: LaunchScreen());
  }
}

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

class _LaunchScreenState extends State<LaunchScreen> {
  [@override](/user/override)
  void initState() {
    super.initState();

    // LaunchScreen
    Future.delayed(Duration(seconds: 2), () {
      Navigator.pushReplacement(
        context,
        MaterialPageRoute(builder: (context) => HomePage()),
      );
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FlutterLogo(
          size: 200,
        ),
      ),
    );
  }
}

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

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  // 初始化控制器
  TextEditingController _nameController = TextEditingController();
  TextEditingController _PasswordController = TextEditingController();

  // 生成密码并赋值给临时变量
  late String temp;

  [@override](/user/override)
  void initState() {
    super.initState();
    temp = generatePassWord(10); // 这里10是密码的长度
    _PasswordController = TextEditingController(text: temp); // 将临时变量赋值给密码控制器
  }

  // 处理控制器释放
  [@override](/user/override)
  void dispose() {
    _PasswordController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    final themeProvider = Provider.of<ThemeProvider>(context);
    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        statusBarBrightness: themeProvider.isDarkMode ? Brightness.light : Brightness.dark,
      ),
    );
    return Scaffold(
      backgroundColor: themeProvider.isDarkMode
          ? Colors.black
          : Color.fromRGBO(248, 234, 221, 1),
      body: SafeArea(
        child: SingleChildScrollView(
          child: Column(
            children: [
              /// 欢迎信息
              Container(
                margin: EdgeInsets.all(20),
                child: Text('Welcome to Flutter',
                    style: TextStyle(fontSize: 40, fontWeight: FontWeight.bold)),
              ),

              /// Logo
              Center(
                child: Container(
                  child: FlutterLogo(
                    size: 200,
                  ),
                ),
              ),

              /// 姓名输入框
              Container(
                margin: EdgeInsets.fromLTRB(20, 50, 20, 20),
                padding: EdgeInsets.all(10),
                decoration: BoxDecoration(
                  color: themeProvider._isDarkMode
                      ? Color.fromRGBO(26, 18, 11, 1)
                      : Colors.white,
                  borderRadius: BorderRadius.circular(30),
                ),
                child: TextField(
                  controller: _nameController,
                  decoration: InputDecoration(
                      hintText: 'Name',
                      hintStyle: TextStyle(
                        color: themeProvider.isDarkMode
                            ? Colors.white
                            : Colors.black,
                      ),
                      border: InputBorder.none),
                ),
              ),

              /// 密码输入框
              Container(
                margin: EdgeInsets.fromLTRB(20, 20, 20, 20),
                padding: EdgeInsets.all(10),
                decoration: BoxDecoration(
                  color: themeProvider._isDarkMode
                      ? Color.fromRGBO(26, 18, 11, 1)
                      : Colors.white,
                  borderRadius: BorderRadius.circular(30),
                ),
                child: TextField(
                  controller: _PasswordController,
                  decoration: InputDecoration(border: InputBorder.none),
                ),
              ),
              Container(
                child: Text('terms and conditions apply'),
              ),

              /// 注册按钮
              GestureDetector(
                onTap: () {},
                child: Container(
                    margin: EdgeInsets.all(5),
                    padding: EdgeInsets.all(10),
                    decoration: BoxDecoration(
                      color: themeProvider._isDarkMode
                          ? Color.fromRGBO(26, 18, 11, 1)
                          : Colors.white,
                      borderRadius: BorderRadius.circular(10),
                      border: Border.all(
                        color: Colors.blue,
                        width: 2,
                      ),
                    ),
                    child: Text('SIGNUP')),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

// 主题管理器
class ThemeProvider with ChangeNotifier {
  bool _isDarkMode = false;

  ThemeProvider() {
    final brightness = WidgetsBinding.instance.window.platformBrightness;
    _isDarkMode = brightness == Brightness.dark;
  }

  bool get isDarkMode => _isDarkMode;

  ThemeData getThemeData() {
    return _isDarkMode
        ? ThemeData.dark().copyWith(
            scaffoldBackgroundColor: Colors.black,
          )
        : ThemeData.light().copyWith(
            scaffoldBackgroundColor: Colors.white,
          );
  }
}

更多关于Flutter密码生成插件password_maker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter密码生成插件password_maker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


password_maker 是一个用于生成随机密码的 Flutter 插件。它可以帮助你快速生成符合特定要求的密码,例如包含大写字母、小写字母、数字和特殊字符的密码。以下是使用 password_maker 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  password_maker: ^1.0.0  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 password_maker 包:

import 'package:password_maker/password_maker.dart';

3. 生成密码

使用 PasswordMaker 类来生成密码。你可以指定密码的长度以及是否包含大写字母、小写字母、数字和特殊字符。

void generatePassword() {
  PasswordMaker passwordMaker = PasswordMaker();

  // 生成一个包含大写字母、小写字母、数字和特殊字符的12位密码
  String password = passwordMaker.generatePassword(
    length: 12,
    includeUppercase: true,
    includeLowercase: true,
    includeNumbers: true,
    includeSpecialChars: true,
  );

  print('Generated Password: $password');
}

4. 自定义密码生成规则

你可以根据需要自定义密码的生成规则。例如,生成一个只包含数字的密码:

void generateNumericPassword() {
  PasswordMaker passwordMaker = PasswordMaker();

  // 生成一个只包含数字的8位密码
  String password = passwordMaker.generatePassword(
    length: 8,
    includeUppercase: false,
    includeLowercase: false,
    includeNumbers: true,
    includeSpecialChars: false,
  );

  print('Generated Numeric Password: $password');
}

5. 处理异常

password_maker 插件可能会在某些情况下抛出异常,例如当密码长度小于1时。你可以使用 try-catch 块来处理这些异常:

void safeGeneratePassword() {
  PasswordMaker passwordMaker = PasswordMaker();

  try {
    String password = passwordMaker.generatePassword(
      length: 0,  // 无效的长度
      includeUppercase: true,
      includeLowercase: true,
      includeNumbers: true,
      includeSpecialChars: true,
    );

    print('Generated Password: $password');
  } catch (e) {
    print('Error generating password: $e');
  }
}

6. 完整示例

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 password_maker 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Password Maker Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: generatePassword,
            child: Text('Generate Password'),
          ),
        ),
      ),
    );
  }

  void generatePassword() {
    PasswordMaker passwordMaker = PasswordMaker();

    try {
      String password = passwordMaker.generatePassword(
        length: 12,
        includeUppercase: true,
        includeLowercase: true,
        includeNumbers: true,
        includeSpecialChars: true,
      );

      print('Generated Password: $password');
    } catch (e) {
      print('Error generating password: $e');
    }
  }
}
回到顶部