Flutter分组选择插件grouped_selection的使用

Flutter分组选择插件grouped_selection的使用

GroupedSelection 是一个在 Flutter 中用于以网格布局进行单选或多选的小组件。它支持添加图标和文本,提供了交互式且视觉上吸引人的选择方式。

特性

  • 单选或多选:可以轻松切换单个或多个项目的选择模式。
  • 自定义图标:为每个项目添加左侧和/或右侧图标,以便更好地视觉表示。
  • 动态网格布局:指定列数以控制项目排列方式。
  • 选择更改回调:在所选项目发生变化时获得通知,允许你处理所选数据。

示例

安装

pubspec.yaml 文件中添加 grouped_selection

dependencies:
  grouped_selection: ^0.1.0

然后运行 flutter pub get 来获取该包。

使用

基本示例

以下是如何在你的 Flutter 应用中使用 GroupedSelection 的基本示例:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text("Grouped Selection Example")),
        body: Center(
          child: GroupedSelection(
            items: [
              SelectionItem(text: 'Item 1'),
              SelectionItem(text: 'Item 2'),
              SelectionItem(text: 'Item 3'),
            ],
            columnCount: 2,
            onSelectionChanged: (selectedItems) {
              // 处理选择更改
            },
          ),
        ),
      ),
    );
  }
}

自定义

你可以通过多种参数来自定义 GroupedSelection

GroupedSelection(
  items: [
    SelectionItem(text: 'Item 1', leftIcon: Icons.star),
    SelectionItem(text: 'Item 2', rightIcon: Icons.check),
    SelectionItem(text: 'Item 3', leftIcon: Icons.star, rightIcon: Icons.check),
  ],
  columnCount: 3,
  multiple: true,
  onSelectionChanged: (selectedItems) {
    // 处理多选更改
    print('Selected items: $selectedItems');
  },
)

参数

  • items:一个包含 SelectionItem 对象的列表,每个对象代表网格中的一个可选项。
  • columnCount:网格中的列数,默认为 1
  • multiple:一个布尔值,确定是否可以选择多个项目,默认为 false
  • onSelectionChanged:当选择更改时调用的回调函数,提供当前选中的 SelectionItem 列表。

SelectionItem 类

SelectionItem 类用于定义每个可选项的属性:

SelectionItem({
  required this.text,
  this.leftIcon,
  this.rightIcon,
  this.isSelected = false,
});
  • text:项目的标签。
  • leftIcon:显示在文本左侧的可选图标。
  • rightIcon:显示在文本右侧的可选图标(仅在选中时可见)。
  • isSelected:一个布尔值,指示项目是否被选中。这由 GroupedSelection 小组件内部管理。

示例代码

你可以找到完整的示例代码在 example 目录

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text("Grouped Selection Example")),
        body: Center(
          child: GroupedSelection(
            items: [
              SelectionItem(text: 'Item 1'),
              SelectionItem(text: 'Item 2'),
              SelectionItem(text: 'Item 3'),
            ],
            columnCount: 2,
            onSelectionChanged: (selectedItems) {
              // 处理选择更改
            },
          ),
        ),
      ),
    );
  }
}

更多关于Flutter分组选择插件grouped_selection的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter分组选择插件grouped_selection的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


grouped_selection 是 Flutter 中一个用于实现分组选择的插件。它允许你在多个选项中进行分组选择,类似于多选列表或复选框组。以下是如何使用 grouped_selection 插件的基本步骤:

1. 添加依赖

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

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

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

2. 导入包

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

import 'package:grouped_selection/grouped_selection.dart';

3. 使用 GroupedSelection

GroupedSelection 是一个有状态的组件,你可以通过它来实现分组选择。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Grouped Selection Example'),
        ),
        body: GroupedSelectionExample(),
      ),
    );
  }
}

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

class _GroupedSelectionExampleState extends State<GroupedSelectionExample> {
  List<String> selectedItems = [];

  final List<String> group1 = ['Option 1', 'Option 2', 'Option 3'];
  final List<String> group2 = ['Option 4', 'Option 5', 'Option 6'];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      children: [
        GroupedSelection<String>(
          items: group1,
          selectedItems: selectedItems,
          onItemSelected: (item) {
            setState(() {
              if (selectedItems.contains(item)) {
                selectedItems.remove(item);
              } else {
                selectedItems.add(item);
              }
            });
          },
          itemBuilder: (item) {
            return Text(item);
          },
          groupTitle: 'Group 1',
        ),
        GroupedSelection<String>(
          items: group2,
          selectedItems: selectedItems,
          onItemSelected: (item) {
            setState(() {
              if (selectedItems.contains(item)) {
                selectedItems.remove(item);
              } else {
                selectedItems.add(item);
              }
            });
          },
          itemBuilder: (item) {
            return Text(item);
          },
          groupTitle: 'Group 2',
        ),
        Text('Selected Items: ${selectedItems.join(", ")}'),
      ],
    );
  }
}
回到顶部