Flutter高级选择器组件插件flutter_awesome_select_clone的使用

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

Flutter高级选择器组件插件flutter_awesome_select_clone的使用

本文档将详细介绍如何在Flutter项目中使用flutter_awesome_select_clone插件,该插件是基于SmartSelect插件开发的,提供了丰富的选择器组件功能。

关于

flutter_awesome_select_clone允许您轻松地将普通的表单选择或下拉菜单转换为动态页面、弹出对话框或滑动底部表单,支持多种输入方式如单选、多选、开关等。它受到了Framework7的启发。

特性

  • 可高度自定义模态窗口的各个部分(头部、尾部、搜索栏、确认按钮、搜索栏切换)。
  • 支持验证后再确认。
  • 自动搜索和高亮搜索结果。
  • 支持Chip样式的选择项。
  • 支持网格布局的选择项。
  • 支持水平或垂直滚动方向的选择列表。
  • 简化的类名和枚举。
  • 配置支持copyWithmerge方法。
  • 使用StatefulWidget作为状态管理。
  • 易于配置快捷方式。
  • 软依赖其他包。

使用指南

单选示例

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SingleChoicePage(),
    );
  }
}

class SingleChoicePage extends StatefulWidget {
  @override
  _SingleChoicePageState createState() => _SingleChoicePageState();
}

class _SingleChoicePageState extends State<SingleChoicePage> {
  String value = 'flu';
  List<S2Choice<String>> options = [
    S2Choice<String>(value: 'ion', title: 'Ionic'),
    S2Choice<String>(value: 'flu', title: 'Flutter'),
    S2Choice<String>(value: 'rea', title: 'React Native'),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Single Choice Example')),
      body: SmartSelect<String>.single(
        title: 'Frameworks',
        value: value,
        choiceItems: options,
        onChange: (state) => setState(() => value = state.value),
      ),
    );
  }
}

多选示例

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MultipleChoicePage(),
    );
  }
}

class MultipleChoicePage extends StatefulWidget {
  @override
  _MultipleChoicePageState createState() => _MultipleChoicePageState();
}

class _MultipleChoicePageState extends State<MultipleChoicePage> {
  List<int> value = [2];
  List<S2Choice<int>> frameworks = [
    S2Choice<int>(value: 1, title: 'Ionic'),
    S2Choice<int>(value: 2, title: 'Flutter'),
    S2Choice<int>(value: 3, title: 'React Native'),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Multiple Choice Example')),
      body: SmartSelect<int>.multiple(
        title: 'Frameworks',
        value: value,
        choiceItems: frameworks,
        onChange: (state) => setState(() => value = state.value),
      ),
    );
  }
}

异步加载选项

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AsyncChoicePage(),
    );
  }
}

class AsyncChoicePage extends StatefulWidget {
  @override
  _AsyncChoicePageState createState() => _AsyncChoicePageState();
}

class _AsyncChoicePageState extends State<AsyncChoicePage> {
  String value;
  Future<List<S2Choice<String>>> fetchOptions() async {
    await Future.delayed(Duration(seconds: 2));
    return [
      S2Choice<String>(value: 'ion', title: 'Ionic'),
      S2Choice<String>(value: 'flu', title: 'Flutter'),
      S2Choice<String>(value: 'rea', title: 'React Native'),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Async Choice Example')),
      body: FutureBuilder<List<S2Choice<String>>>(
        future: fetchOptions(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return SmartSelect<String>.single(
              title: 'Frameworks',
              value: value,
              choiceItems: snapshot.data,
              onChange: (state) => setState(() => value = state.value),
            );
          } else {
            return Center(child: CircularProgressIndicator());
          }
        },
      ),
    );
  }
}

通过上述代码示例,您可以快速上手flutter_awesome_select_clone插件,并根据实际需求进行扩展和定制。希望这些内容对您有所帮助!


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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_awesome_select_clone这个高级选择器组件插件的示例代码。这个插件通常用于实现复杂的下拉选择器,比如多选、单选以及带有搜索功能的选择器等。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_awesome_select_clone: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_awesome_select_clone

1. 导入插件

在你的Dart文件中导入插件:

import 'package:flutter_awesome_select_clone/flutter_awesome_select_clone.dart';

2. 准备数据

准备一些示例数据,比如一个包含多个选项的列表:

List<Map<String, dynamic>> items = [
  {"value": "1", "text": "Option 1"},
  {"value": "2", "text": "Option 2"},
  {"value": "3", "text": "Option 3"},
  // 添加更多选项...
];

3. 创建并显示选择器

在你的Flutter组件中,创建一个AwesomeSelect组件并传递必要的参数:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Awesome Select Clone Example'),
        ),
        body: SelectorScreen(),
      ),
    );
  }
}

class SelectorScreen extends StatefulWidget {
  @override
  _SelectorScreenState createState() => _SelectorScreenState();
}

class _SelectorScreenState extends State<SelectorScreen> {
  List<Map<String, dynamic>> selectedItems = [];

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: AwesomeSelect(
        isMultiSelect: true,  // 是否多选
        title: 'Select Options',
        options: items,
        selectedValues: selectedItems.map((e) => e['value']).toList(),  // 已选中的值
        onChange: (result) {
          setState(() {
            selectedItems = result;
          });
        },
        // 可选参数,比如设置搜索输入框的占位符
        searchPlaceholder: "Search...",
        // 其他配置...
      ),
    );
  }
}

4. 运行项目

现在,你可以运行你的Flutter项目,应该能够看到一个包含搜索功能的多选选择器组件。

注意事项

  • isMultiSelect:设置为true表示多选,设置为false表示单选。
  • options:传入一个包含选项的列表,每个选项通常是一个包含valuetext字段的Map。
  • selectedValues:传入一个包含已选中值的列表,这些值将用于初始化选择器的选中状态。
  • onChange:当选择发生变化时调用的回调函数,用于更新状态。

这个示例展示了如何使用flutter_awesome_select_clone插件创建一个简单的选择器组件。你可以根据实际需求进一步自定义和扩展该组件。

回到顶部