Flutter模态选择插件flutter_modalselection的使用

Flutter模态选择插件flutter_modalselection的使用

flutter_modalselection简介

flutter_modalselection 是一个用于实现模态选择功能的 Flutter 插件。它允许用户从列表中选择一个选项,并通过回调函数更新选择的状态。

平台支持

Android iOS MacOS Web Linux Windows

使用方法

导入插件

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

dependencies:
  flutter_modalselection: ^x.x.x

然后运行以下命令以安装依赖:

flutter pub get

接下来在 Dart 文件中导入插件:

import 'package:flutter_modalselection/flutter_modalselection.dart';

定义选择项的 UI

定义一个类来表示每个选择项的 UI。这个类需要继承 StatelessWidget,并接受一个回调函数用于处理点击事件。

// 定义选择项的 UI
class SimpleElement extends StatelessWidget {
  String text;
  Function(String)? onTapCallback;

  // 构造函数接收文本和回调函数
  SimpleElement({super.key, required this.text, this.onTapCallback});

  // 处理点击事件
  void _processOnTap() {
    if (onTapCallback != null) {
      onTapCallback!(text);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 如果有回调函数,则使用 GestureDetector 包装
    if (onTapCallback != null) {
      return GestureDetector(
        onTap: _processOnTap,
        child: _SimpleElement(text: text), // 调用内部实际 UI 类
      );
    }

    // 如果没有回调函数,则直接返回 UI
    return _SimpleElement(text: text);
  }
}

// 实际的 UI 组件
class _SimpleElement extends StatelessWidget {
  String text;

  _SimpleElement({required this.text});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(20),
        child: Row(
          children: [
            Expanded(child: Text(text)), // 显示文本
          ],
        ),
      ),
    );
  }
}

定义模态框的 UI

定义一个类来表示模态框的 UI。该类需要继承 ModalSelectionModal,以便访问必要的属性。

// 定义模态框的 UI
class SelecteStringModal extends ModalSelectionModal<String> {
  SelecteStringModal({
    required super.availableEntitis,
    required super.selectedCallback,
    super.selectedEntity,
  });

  // 定义模态框的构建逻辑
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 处理回调函数
    void manageCallback(String? s) {
      selectedCallback(s); // 调用回调函数
      Navigator.of(context).pop(); // 关闭模态框
    }

    return Container(
      padding: const EdgeInsets.all(25),
      height: MediaQuery.of(context).copyWith().size.height, // 设置高度为屏幕高度
      child: Column(
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              Text("选择元素"), // 模态框标题
            ],
          ),
          const SizedBox(height: 10),
          Expanded(
            child: ListView.builder(
              itemCount: availableEntitis.length, // 列表项数量
              itemBuilder: (context, index) => SimpleElement(
                onTapCallback: manageCallback, // 设置点击回调
                text: availableEntitis[index], // 显示文本
              ),
            ),
          ),
        ],
      ),
    );
  }
}

在主界面中使用模态选择组件

在主界面中集成 ModalSelection 组件,并将其与模态框和选择项绑定。

// 主应用界面
class MainAppUI extends StatefulWidget {
  const MainAppUI({super.key});

  [@override](/user/override)
  State<MainAppUI> createState() => _MainAppUIState();
}

class _MainAppUIState extends State<MainAppUI> {
  // 当前选中的文本
  String selectedText = "请选择一个元素";

  // 可供选择的文本列表
  List<String> avbTexts = ["文本1", "文本2", "文本3"];

  // 选择回调函数
  void onSelection(String? s) {
    setState(() {
      selectedText = s ?? ""; // 更新选中的文本
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Padding(
        padding: const EdgeInsets.all(20),
        child: ModalSelection<String>(
          // 可供选择的列表
          availableEntitis: avbTexts,
          // 选择回调
          selectionCallback: onSelection,
          // 当前选中的文本
          selectedEntity: selectedText,
          // 模态框内容
          modalContent: SelecteStringModal(
            availableEntitis: avbTexts,
            selectedCallback: onSelection,
            selectedEntity: selectedText,
          ),
          // 当前选中的元素展示
          selectElement: ModalSelectionElement<String>(
            entity: selectedText,
            displayElement: SimpleElement(text: selectedText),
          ),
        ),
      ),
    );
  }
}

// 主应用
class MainApp extends StatelessWidget {
  const MainApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: MainAppUI(),
      ),
    );
  }
}
1 回复

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


flutter_modalselection 是一个用于在 Flutter 应用中实现模态选择功能的插件。它允许你以模态对话框的形式展示一个选择列表,用户可以从列表中选择一个选项。以下是如何使用 flutter_modalselection 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_modalselection 插件的依赖。

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

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

2. 导入插件

在你的 Dart 文件中导入 flutter_modalselection 插件。

import 'package:flutter_modalselection/flutter_modalselection.dart';

3. 使用 ModalSelection 组件

你可以使用 ModalSelection 组件来创建一个模态选择器。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Modal Selection Example'),
        ),
        body: Center(
          child: ModalSelectionExample(),
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return ModalSelection<String>(
      items: items,
      onSelected: (selectedItem) {
        print('Selected: $selectedItem');
      },
      child: Text('Select an option'),
    );
  }
}

4. 解释代码

  • items: 这是一个包含所有可选选项的列表。
  • onSelected: 这是一个回调函数,当用户选择一个选项时会被调用,并传递选中的选项。
  • child: 这是触发模态选择器的控件,通常是一个按钮或文本。

5. 自定义模态选择器

你可以通过传递不同的参数来自定义模态选择器的外观和行为。例如,你可以设置标题、提示文本、按钮文本等。

ModalSelection<String>(
  items: items,
  onSelected: (selectedItem) {
    print('Selected: $selectedItem');
  },
  title: 'Select an option',
  hintText: 'Search for an option',
  confirmText: 'OK',
  cancelText: 'Cancel',
  child: Text('Select an option'),
);

6. 处理选择结果

onSelected 回调中,你可以处理用户选择的选项。例如,你可以更新 UI 或执行其他操作。

onSelected: (selectedItem) {
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('You selected: $selectedItem')),
  );
},
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!