Flutter用户管理与网格布局插件apptive_grid_user_management的使用

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

Flutter用户管理与网格布局插件apptive_grid_user_management的使用

ApptiveGrid UserManagement 是一个用于实现用户管理和网格布局的 Flutter 插件。它可以帮助开发者轻松地添加用户登录、注册和账户管理功能。

安装

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

dependencies:
  apptive_grid_user_management: ^最新版本号

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

配置

在你的 Flutter 应用中添加 ApptiveGridUserManagement 小部件。建议将其放置在靠近 ApptiveGrid 的位置。

ApptiveGrid(
  child: ApptiveGridUserManagement(
    group: 'YOUR_GROUP_ID', // 替换为你的组ID
    onChangeEnvironment: (newEnvironment) async {}, // 环境改变时调用的回调
    confirmAccountPrompt: (confirmationWidget) {
      // 显示确认小部件
    },
    onAccountConfirmed: (loggedIn) {
      // 处理账户确认逻辑
    },
    child: MyApp(), // 你的应用根小部件
  ),
)

Android 配置

AndroidManifest.xml 中添加以下条目以支持打开确认链接:

<activity>
  ...
  <intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
      android:host="alpha.apptivegrid.de"
      android:pathPattern="/auth/YOUR_GROUP_ID/confirm/.*"
      android:scheme="YOUR_SCHEME"/>
    <data
      android:host="beta.apptivegrid.de"
      android:pathPattern="/auth/YOUR_GROUP_ID/confirm/.*"
      android:scheme="YOUR_SCHEME"/>
    <data
      android:host="app.apptivegrid.de"
      android:pathPattern="/auth/YOUR_GROUP_ID/confirm/.*"
      android:scheme="YOUR_SCHEME"/>
  </intent-filter>
</activity>

iOS 配置

对于 iOS,你需要进行以下配置来支持打开确认链接:

使用通用链接(HTTPS 作为方案)

Runner.entitlements 文件中添加以下内容:

<key>com.apple.developer.associated-domains</key>
<array>
  <string>applinks:alpha.apptivegrid.de</string>
  <string>applinks:beta.apptivegrid.de</string>
  <string>applinks:app.apptivegrid.de</string>
</array>

使用自定义方案

Info.plist 文件中添加以下内容:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Viewer</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>YOUR_SCHEMA</string>
    </array>
  </dict>
</array>

显示登录/注册内容

在你的屏幕中添加 ApptiveGridUserManagementContent 小部件以显示登录/注册界面。主题将从你的应用主题中继承。

Card(
  child: Padding(
    padding: const EdgeInsets.all(8.0),
    child: ApptiveGridUserManagementContent(
      initialContentType: ContentType.login, // 初始内容类型为登录
      onLogin: () {
        context.go('/home'); // 登录后导航到主页
      },
    ),
  ),
)

删除账户

为了符合苹果审核指南的要求,如果你的应用提供账户创建功能,则必须提供删除账户的功能。该插件提供了几个小部件来展示删除账户的选项。

// 作为 ListTile
DeleteAccount.listTile(
  onAccountDeleted: () {
    // 跳转到登录页面等操作
  },
),

// 作为 TextButton
DeleteAccount.textButton(
  onAccountDeleted: () {
    // 跳转到登录页面等操作
  },
),

// 作为自定义小部件
DeleteAccount(
  onAccountDeleted: () {
    // 跳转到登录页面等操作
  },
  child: CustomWidget(), // 自定义子小部件
),

点击这些小部件会显示一个对话框,让用户确认是否要删除他们的账户。

示例代码

以下是完整的示例代码,展示了如何使用 ApptiveGridUserManagement 插件。

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

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

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

  final _navigatorKey = GlobalKey<NavigatorState>();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return ApptiveGrid(
      options: const ApptiveGridOptions(
        environment: ApptiveGridEnvironment.alpha,
      ),
      child: Builder(
        builder: (context) {
          return ApptiveGridUserManagement(
            group: 'YOUR_USER_GROUP', // 替换为你的用户组ID
            clientId: 'app',
            redirectScheme: 'resetTest',
            confirmAccountPrompt: (confirmWidget) {
              // 显示确认小部件
              _navigatorKey.currentState?.push(
                MaterialPageRoute(
                  builder: (_) => Scaffold(
                    appBar: AppBar(
                      title: const Text('Confirm Account'),
                    ),
                    body: SingleChildScrollView(
                      child: confirmWidget,
                    ),
                  ),
                ),
              );
            },
            onAccountConfirmed: (loggedIn) {
              // 账户被确认
              // 如果未登录则跳转到登录页面
              ScaffoldMessenger.of(_navigatorKey.currentContext!).showSnackBar(
                SnackBar(
                  content: Text('Account Confirmed. LoggedIn: $loggedIn'),
                ),
              );
              if (loggedIn) {
                Navigator.of(context).pushReplacement(
                  MaterialPageRoute(
                    builder: (_) {
                      return const AccountPage();
                    },
                  ),
                );
              } else {
                _navigatorKey.currentState?.pop();
              }
            },
            resetPasswordPrompt: (resetPasswordWidget) {
              // 显示重置密码小部件
              _navigatorKey.currentState?.push(
                MaterialPageRoute(
                  builder: (_) => Scaffold(
                    appBar: AppBar(
                      title: const Text('Reset Password'),
                    ),
                    body: SingleChildScrollView(
                      child: resetPasswordWidget,
                    ),
                  ),
                ),
              );
            },
            onPasswordReset: (loggedIn) async {
              // 用户重置了密码
              // 跳转到登录页面
              debugPrint('Password reset success');
              debugPrint('User is now loggedIn: $loggedIn');
              _navigatorKey.currentState?.pop();
            },
            passwordRequirement: PasswordRequirement.safetyHint,
            child: MaterialApp(
              navigatorKey: _navigatorKey,
              title: 'Apptive Grid User Management Example',
              theme: ThemeData(
                primarySwatch: Colors.blue,
              ),
              home: const LoginRegistrationPage(),
            ),
          );
        },
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Login/Register'),
      ),
      body: ListView(
        children: [
          Padding(
            padding: const EdgeInsets.all(8),
            child: Card(
              child: Padding(
                padding: const EdgeInsets.all(8.0),
                child: ApptiveGridUserManagementContent(
                  appName: 'ApptiveGridUserManagement Example',
                  onLogin: () {
                    Navigator.of(context).pushReplacement(
                      MaterialPageRoute(
                        builder: (_) {
                          return const AccountPage();
                        },
                      ),
                    );
                  },
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

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

  [@override](/user/override)
  State<AccountPage> createState() => _AccountPageState();
}

class _AccountPageState extends State<AccountPage> {
  User? _user;

  [@override](/user/override)
  void didChangeDependencies() {
    super.didChangeDependencies();
    ApptiveGrid.getClient(context).getMe().then((user) {
      setState(() {
        _user = user;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Account'),
      ),
      body: Builder(
        builder: (_) {
          if (_user == null) {
            return const Center(
              child: CircularProgressIndicator.adaptive(),
            );
          } else {
            return Column(
              children: [
                Text('Logged in as ${_user!.firstName} ${_user!.lastName}'),
                TextButton(
                  onPressed: () {
                    ApptiveGrid.getClient(context, listen: false)
                        .logout()
                        .then((_) {
                      if (context.mounted) {
                        Navigator.of(context).pushReplacement(
                          MaterialPageRoute(
                            builder: (_) {
                              return const LoginRegistrationPage();
                            },
                          ),
                        );
                      }
                    });
                  },
                  child: const Text('Logout'),
                ),
                DeleteAccount.textButton(
                  onAccountDeleted: () {
                    WidgetsBinding.instance.addPostFrameCallback((_) {
                      Navigator.of(context).pushReplacement(
                        MaterialPageRoute(
                          builder: (_) {
                            return const LoginRegistrationPage();
                          },
                        ),
                      );
                    });
                  },
                ),
              ],
            );
          }
        },
      ),
    );
  }
}

更多关于Flutter用户管理与网格布局插件apptive_grid_user_management的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter用户管理与网格布局插件apptive_grid_user_management的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用apptive_grid_user_management插件(假设该插件存在,因为这不是一个广泛认知的官方插件,但我们可以模拟其功能)以及基本的用户管理的代码示例。这里我们假设apptive_grid_user_management提供了用户管理和网格布局的功能。

首先,确保在pubspec.yaml文件中添加依赖项(假设插件名称为apptive_grid_user_management,实际使用时请替换为正确的插件名称):

dependencies:
  flutter:
    sdk: flutter
  apptive_grid_user_management: ^latest_version  # 请替换为实际版本号

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

接下来,创建一个简单的Flutter应用,展示如何使用这个插件进行用户管理和网格布局。

import 'package:flutter/material.dart';
import 'package:apptive_grid_user_management/apptive_grid_user_management.dart'; // 假设的导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter User Management with Grid Layout',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: UserManagementScreen(),
    );
  }
}

class User {
  String id;
  String name;
  String avatarUrl;

  User({required this.id, required this.name, required this.avatarUrl});
}

class UserManagementScreen extends StatefulWidget {
  @override
  _UserManagementScreenState createState() => _UserManagementScreenState();
}

class _UserManagementScreenState extends State<UserManagementScreen> {
  List<User> users = [
    User(id: '1', name: 'Alice', avatarUrl: 'https://example.com/alice.jpg'),
    User(id: '2', name: 'Bob', avatarUrl: 'https://example.com/bob.jpg'),
    User(id: '3', name: 'Charlie', avatarUrl: 'https://example.com/charlie.jpg'),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User Management with Grid Layout'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            // 添加用户的按钮(模拟用户管理功能)
            ElevatedButton(
              onPressed: () {
                // 这里可以添加新用户到列表,并更新UI
                setState(() {
                  users.add(User(id: '${users.length + 1}', name: 'New User ${users.length}', avatarUrl: 'https://example.com/default.jpg'));
                });
              },
              child: Text('Add User'),
            ),
            SizedBox(height: 16),
            Expanded(
              child: ApptiveGridUserManagement( // 假设的插件Widget
                users: users,
                onUserTap: (User user) {
                  // 用户点击事件处理
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('User ${user.name} tapped')),
                  );
                },
                gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                  crossAxisCount: 2, // 每行两列
                  crossAxisSpacing: 4.0,
                  mainAxisSpacing: 4.0,
                ),
                userItemBuilder: (BuildContext context, User user) {
                  return Card(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Image.network(user.avatarUrl, width: 50, height: 50),
                        SizedBox(height: 8),
                        Text(user.name),
                      ],
                    ),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

// 注意:以下是一个假设的插件Widget定义,实际使用时请参考插件文档
// class ApptiveGridUserManagement extends StatelessWidget {
//   final List<User> users;
//   final Function(User) onUserTap;
//   final SliverGridDelegate gridDelegate;
//   final Widget Function(BuildContext, User) userItemBuilder;
//
//   ApptiveGridUserManagement({
//     required this.users,
//     required this.onUserTap,
//     required this.gridDelegate,
//     required this.userItemBuilder,
//   });
//
//   @override
//   Widget build(BuildContext context) {
//     return GridView.builder(
//       gridDelegate: gridDelegate,
//       itemCount: users.length,
//       itemBuilder: (context, index) {
//         final user = users[index];
//         return GestureDetector(
//           onTap: () => onUserTap(user),
//           child: userItemBuilder(context, user),
//         );
//       },
//     );
//   }
// }

请注意,由于apptive_grid_user_management插件并非一个真实存在的官方插件(至少在我最后的知识更新时),上面的代码示例中包含了一个假设的ApptiveGridUserManagement类定义。在实际使用中,你应该根据插件的官方文档来正确使用它。通常,插件文档会提供详细的Widget使用说明和参数配置。

如果你是在寻找一个真实存在的插件,请确保查阅Flutter的Pub仓库,找到符合你需求的插件,并按照其文档进行集成和使用。

回到顶部