Flutter项目选择项插件rx_item_picker的使用

Flutter项目选择项插件rx_item_picker的使用

简介

rx_item_picker 是一个用于从下拉底部弹出框中选择项目的插件。它允许用户通过搜索和过滤功能快速找到所需选项。


特性

  • 支持自定义过滤器。
  • 提供丰富的定制化选项,如颜色设置。
  • 支持多种数据类型的选择。

使用步骤

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  rx_item_picker: ^版本号

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


2. 基本用法

示例代码

以下是一个完整的示例代码,展示如何使用 rx_item_picker 插件来选择服务提供商。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Rx Item Picker 示例')),
        body: Center(child: ExamplePage()),
      ),
    );
  }
}

class ExamplePage extends StatefulWidget {
  @override
  _ExamplePageState createState() => _ExamplePageState();
}

class _ExamplePageState extends State<ExamplePage> {
  final providerController = TextEditingController();

  // 模拟的 Provider 数据列表
  List<Provider> providers = [
    Provider(id: '1', name: 'Google'),
    Provider(id: '2', name: 'Apple'),
    Provider(id: '3', name: 'Microsoft'),
  ];

  Future<void> _showPicker() async {
    final provider = await RxItemPicker.picker<Provider>(
      title: "选择服务提供商",
      selectedFilterColor: Colors.blue,
      unselectedFilterColor: Colors.grey,
      value: providers.firstWhereOrNull(
        (element) => element.name == providerController.text,
      ),
      values: providers
          .map(
            (e) => RxItemPickerDto(
              value: e,
              search: [e.id, e.name].join(" "),
            ),
          )
          .toList(),
      itemBuilder: (context, item) => Row(
        children: [
          // 自定义图标(此处为占位符)
          Icon(Icons.business),
          Text(item.value.name),
        ],
      ),
    );

    if (provider != null) {
      setState(() {
        providerController.text = provider.value.name;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        TextField(
          controller: providerController,
          decoration: InputDecoration(labelText: '当前选择'),
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _showPicker,
          child: Text('选择提供商'),
        ),
      ],
    );
  }
}

// 模拟的 Provider 类
class Provider {
  final String id;
  final String name;

  Provider({required this.id, required this.name});
}

3. 高级用法

示例代码

以下是一个更复杂的示例,展示如何使用过滤器和全屏模式。

final plan = await RxItemPicker.picker<Plan>(
  title: "选择计划",
  fullscreen: true, // 是否全屏显示
  initialFilter: "daily", // 初始过滤条件
  filters: ["Daily", "Weekly", "Monthly", "2 Months", "Yearly"], // 过滤选项
  selectedFilterColor: Colors.green,
  unselectedFilterColor: Colors.grey,
  value: plans
      .firstWhereOrNull((element) => element.id == planController.text),
  values: plans
      .map((e) => RxItemPickerDto(
            name: e.name,
            value: e,
            search: e.name,
          ))
      .toList(),
);
if (plan == null) {
  return;
}

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

1 回复

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


rx_item_picker 是一个用于 Flutter 的项目选择插件,它允许用户从一个列表中选择一个或多个项目。该插件通常用于需要用户从多个选项中进行选择的场景,例如选择颜色、尺寸、日期等。

以下是如何在 Flutter 项目中使用 rx_item_picker 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  rx_item_picker: ^1.0.0  # 请根据实际情况使用最新版本

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

2. 导入包

在需要使用 rx_item_picker 的 Dart 文件中导入包:

import 'package:rx_item_picker/rx_item_picker.dart';

3. 使用 RxItemPicker

RxItemPicker 可以用于显示一个选择对话框,用户可以从列表中选择一个或多个项目。

基本用法

以下是一个简单的例子,展示如何使用 RxItemPicker 选择一个项目:

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

  Future<void> _showPicker(BuildContext context) async {
    final selectedItem = await RxItemPicker.showPicker<String>(
      context: context,
      items: items,
      title: 'Select an item',
    );

    if (selectedItem != null) {
      print('Selected item: $selectedItem');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('RxItemPicker Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _showPicker(context),
          child: Text('Show Picker'),
        ),
      ),
    );
  }
}

多选用法

如果你希望用户可以选择多个项目,可以使用 RxItemPicker.showMultiPicker

Future<void> _showMultiPicker(BuildContext context) async {
  final selectedItems = await RxItemPicker.showMultiPicker<String>(
    context: context,
    items: items,
    title: 'Select items',
  );

  if (selectedItems != null && selectedItems.isNotEmpty) {
    print('Selected items: $selectedItems');
  }
}

4. 自定义选项

RxItemPicker 允许你自定义选择器的外观和行为。例如,你可以自定义每个项目的显示方式:

final selectedItem = await RxItemPicker.showPicker<String>(
  context: context,
  items: items,
  title: 'Select an item',
  itemBuilder: (context, item, isSelected) {
    return ListTile(
      title: Text(item),
      trailing: isSelected ? Icon(Icons.check) : null,
    );
  },
);
回到顶部