Flutter列表选择组件插件list_selection_widget的使用

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

Flutter列表选择组件插件list_selection_widget的使用

list_selection_widget 是一个Flutter插件,提供了一个高度可定制的下拉列表,用于轻松选择单个或多个选项。

预览

以下是该插件的效果预览图:

Untitled video - Made with Clipchamp image

使用方法

1. 导入包

首先,在你的Dart文件中导入 list_selection_widget 包:

import 'package:list_selection_widget/list_selection_widget.dart';
2. 单选和多选

插件提供了两种主要的构造函数:

  • ListSelectionWidget.single:用于单选
  • ListSelectionWidget.multi:用于多选
单选示例

以下是一个单选的示例代码:

ListSelectionWidget<String>.single(
  hintText: '选择一个选项',
  listItems: [
    SelectionItem(value: 'flutter', label: 'Flutter'),
    SelectionItem(value: 'react_native', label: 'React Native'),
    SelectionItem(value: 'swift', label: 'Swift'),
  ],
  selectedValue: null,
  onSingleItemSelected: (item) {
    print('Selected: ${item.label}');
  },
)
多选示例

以下是一个多选的示例代码:

ListSelectionWidget<String>.multi(
  hintText: '选择多个选项',
  listItems: [
    SelectionItem(value: 'flutter', label: 'Flutter'),
    SelectionItem(value: 'react_native', label: 'React Native'),
    SelectionItem(value: 'swift', label: 'Swift'),
  ],
  multiSelectValues: [],
  onMultiItemsSelected: (items) {
    print('Selected: ${items.map((item) => item.label).join(', ')}');
  },
)
3. 自定义

该组件提供了多种自定义选项,例如:

  • decoration:自定义组件的整体外观
  • iconStyle:自定义组件中的图标样式
  • textStyle:自定义文本样式
  • paddingData:调整组件不同部分的内边距
  • hideLines:隐藏项目之间的分隔线
  • maxHeight:设置下拉列表的最大高度

以下是一个带有自定义选项的单选示例:

ListSelectionWidget<String>.single(
  hintText: '选择一个选项',
  listItems: [
    SelectionItem(value: 'flutter', label: 'Flutter'),
    SelectionItem(value: 'react_native', label: 'React Native'),
    SelectionItem(value: 'swift', label: 'Swift'),
  ],
  selectedValue: null,
  onSingleItemSelected: (item) {
    print('Selected: ${item.label}');
  },
  hideLines: true,
  decoration: BoxDecoration(
    color: Colors.blue,
    borderRadius: BorderRadius.circular(10),
  ),
  iconStyle: IconStyleData(
    collapsedIconColor: Colors.white,
    expandedIconColor: Colors.amber,
  ),
  textStyle: TextStyleData(
    titleStyle: TextStyle(color: Colors.white),
    itemTextStyle: TextStyle(color: Colors.white),
  ),
  maxHeight: 200,
)

完整示例

以下是一个完整的示例,展示了如何在Flutter应用中使用单选和多选组件,并结合状态管理来跟踪已选中的项目:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'List Selection Widget Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const Demo(title: 'List Selection Widget Demo'),
    );
  }
}

class Demo extends StatefulWidget {
  const Demo({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<Demo> createState() => _DemoState();
}

class _DemoState extends State<Demo> {
  final List<SelectionItem<String>> _listItems = [
    SelectionItem(value: 'flutter', label: 'Flutter'),
    SelectionItem(value: 'react_native', label: 'React Native'),
    SelectionItem(value: 'swift', label: 'Swift'),
    SelectionItem(value: 'kotlin', label: 'Kotlin'),
  ];

  SelectionItem<String>? _selectedItem;
  List<SelectionItem<String>> _multiSelectedItems = [];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            // 单选组件
            ListSelectionWidget<String>.single(
              hintText: '选择一个项目',
              listItems: _listItems,
              selectedValue: _selectedItem,
              onSingleItemSelected: (item) {
                setState(() {
                  _selectedItem = item;
                });
              },
              hideLines: true,
            ),
            const SizedBox(height: 30),
            // 多选组件
            ListSelectionWidget<String>.multi(
              hintText: '选择多个项目',
              listItems: _listItems,
              multiSelectValues: _multiSelectedItems,
              onMultiItemsSelected: (items) {
                setState(() {
                  _multiSelectedItems = items;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用list_selection_widget插件的示例代码。请注意,list_selection_widget是一个假设的插件名称,实际使用时,你需要确保该插件在pub.dev上是可用的,并且名称正确。如果实际插件名称不同,请替换为实际插件名称。

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

dependencies:
  flutter:
    sdk: flutter
  list_selection_widget: ^x.y.z  # 替换为实际版本号

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

接下来是一个使用list_selection_widget插件的简单示例:

import 'package:flutter/material.dart';
import 'package:list_selection_widget/list_selection_widget.dart'; // 假设插件导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter List Selection Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> items = ['Item 1', 'Item 2', 'Item 3', 'Item 4'];
  List<String> selectedItems = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('List Selection Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: ListSelectionWidget<String>(
          items: items,
          selectedItems: selectedItems,
          onChanged: (List<String> newSelection) {
            setState(() {
              selectedItems = newSelection;
            });
          },
          itemBuilder: (context, item) {
            return ListTile(
              title: Text(item),
            );
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 示例:打印选中的项目
          print('Selected items: $selectedItems');
        },
        tooltip: 'Show selected items',
        child: Icon(Icons.print),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 引入依赖:在pubspec.yaml文件中添加了list_selection_widget插件的依赖项,并运行flutter pub get

  2. 创建主应用MyApp类是我们的主应用类,它包含了一个MaterialApp

  3. 创建主页MyHomePage类是我们的主页,它是一个有状态的widget,用于管理选中的项目列表。

  4. 使用ListSelectionWidget:在MyHomePagebuild方法中,我们使用ListSelectionWidget来显示一个可选择的列表。items属性包含了所有可选择的项,selectedItems属性包含了当前选中的项,onChanged回调函数用于更新选中的项,itemBuilder属性用于自定义每个列表项的显示方式。

  5. 浮动操作按钮:我们添加了一个浮动操作按钮,用于打印当前选中的项目列表。

请注意,这个示例代码假设list_selection_widget插件提供了一个ListSelectionWidget类,并且该类具有上述属性和方法。如果实际插件的API不同,请查阅该插件的官方文档并进行相应的调整。

回到顶部