Flutter选择器插件flutter_spinner_item_selector的使用

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

Flutter选择器插件flutter_spinner_item_selector的使用

简介

flutter_spinner_item_selector 是一个为 Flutter 应用程序提供简单方式定义选择器项的包。该包可以处理任何提供的列表项(可选类型),例如您可以提供小部件列表、枚举或其他对象。

dark-spinner-item-picker light-spinner-item-picker

安装

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

dependencies:
  flutter_spinner_item_selector: [latest]

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

使用

首先,导入该包:

import 'package:flutter_spinner_item_selector/flutter_spinner_item_selector.dart';

如何使用

以下是一个简单的使用示例:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Item Selector Example',
      darkTheme: ThemeData(
        primarySwatch: Colors.deepPurple,
        useMaterial3: true,
        brightness: Brightness.dark,
      ),
      theme: ThemeData(
        primarySwatch: Colors.deepPurple,
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Icon? selectedItem;

  void _showItemSelector() async {
    final selected = await showSpinnerItemSelector<Icon>(
      context,
      items: const [
        Icon(Icons.home),
        Icon(Icons.back_hand),
        Icon(Icons.face),
        Icon(Icons.bluetooth),
        Icon(Icons.bolt_outlined),
        Icon(Icons.read_more),
      ],
      selectedItemToWidget: (item) => item,
      nonSelectedItemToWidget: (item) => Opacity(opacity: 0.4, child: item as Icon),
      itemHeight: 50,
      height: 150,
      width: 100,
      spinnerHeight: 140,
      spinnerWidth: 90,
    );

    if (selected != null) {
      setState(() {
        selectedItem = selected;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Item Selector Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('Selected Item:', style: TextStyle(fontSize: 18)),
            const SizedBox(height: 10),
            selectedItem != null ? selectedItem! : const Text('. . .'),
            const SizedBox(height: 20),
            FilledButton(onPressed: _showItemSelector, child: const Text('Select an Item')),
          ],
        ),
      ),
    );
  }
}

完全自定义的包

您可以根据需要自定义选择器的各种选项:

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

// --------
showSpinnerItemSelector(
    context,
    items: const [
        Icon(Icons.home),
        Icon(Icons.back_hand),
        Icon(Icons.face),
        Icon(Icons.bluetooth),
        Icon(Icons.bolt_outlined),
        Icon(Icons.read_more),
    ],
    selectedItemToWidget: (item) => item,
    nonSelectedItemToWidget: (item) => Opacity(opacity: 0.4, child: item as Icon),
    itemHeight: 50,
    height: 150,
    width: 100,
    spinnerHeight: 140,
    spinnerWidth: 90,
    title: 'Custom Item Selector',
    backgroundColor: Colors.grey[100],
    foregroundColor: Colors.black,
    titleStyle: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
    buttonStyle: ButtonStyle(
        backgroundColor: MaterialStateProperty.all(Colors.blue),
    ),
    buttonTextStyle: TextStyle(fontSize: 16, color: Colors.white),
    barrierDismissible: true,
    // ... 其他定制选项
);

直接使用SpinnerItemSelector组件

您还可以直接在应用中使用SpinnerItemSelector组件:

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Column(
        children: [
          Text("text"),
          // 使用 `SpinnerItemSelector`
          SpinnerItemSelector<Widget>(
            // 提供项列表
            items: const [
                ListTile(leading: Icon(Icons.home),title: Text("Home")),
                ListTile(leading: Icon(Icons.book),title: Text("Book")),
                ListTile(leading: Icon(Icons.sd_card),title: Text("sdCard")),
            ],
            scrollAxis: Axis.vertical, // 可定制
            selectedItemToWidget: (item) => Container(child: item), // 将项映射到小部件
            nonSelectedItemToWidget: (item) => Container(child: item), // 将项映射到小部件
            onSelectedItemChanged: (item) {
                // 处理选定项
            },
            height: _spinnerHeight,
            width: _spinnerWidth,
            itemHeight: _itemHeight,
            itemWidth: _itemWidth,
            spinnerBgColor: _spinnerBgColor,
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 flutter_spinner_item_selector 插件的示例代码。这个插件允许你在 Flutter 应用中创建一个带有旋转动画的选择器。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_spinner_item_selector: ^latest_version  # 请确保使用最新版本

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

接下来,你可以在你的 Dart 文件中使用 flutter_spinner_item_selector。以下是一个完整的示例,展示如何在 Flutter 应用中使用这个插件:

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

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

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

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Spinner Item Selector Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Item: $selectedItem',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            SpinnerItemSelector(
              itemCount: items.length,
              onItemSelected: (index) {
                setState(() {
                  selectedItem = items[index];
                });
              },
              builder: (context, index) {
                return Center(
                  child: Text(
                    items[index],
                    style: TextStyle(fontSize: 20),
                  ),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 导入必要的包:我们导入了 flutter/material.dartflutter_spinner_item_selector/flutter_spinner_item_selector.dart
  2. 定义主应用MyApp 类是应用的入口,它包含一个 MaterialApp
  3. 定义主页面MyHomePage 是一个有状态的组件,它包含一个 List 类型的 items 和一个 selectedItem
  4. 构建界面:在 build 方法中,我们返回一个 Scaffold,其中包含一个 AppBar 和一个 ColumnColumn 包含显示当前选中项的 Text 和一个 SpinnerItemSelector
  5. SpinnerItemSelector
    • itemCount 指定了选择器的项数。
    • onItemSelected 是一个回调函数,当用户选择一个项时会调用这个函数,并传递选中项的索引。
    • builder 是一个函数,用于构建每个项。

这个示例展示了如何使用 flutter_spinner_item_selector 插件来创建一个简单的旋转选择器,并处理用户的选择。你可以根据需要进一步自定义和扩展这个示例。

回到顶部