Flutter自动丢弃管理插件quanht_auto_dropper的使用

Flutter自动丢弃管理插件quanht_auto_dropper的使用

一个轻量级库,通过根据可用空间智能调整下拉位置,确保下拉框完全可见,可以打开在触发按钮上方或下方。

特性 v0.0.1

  • AppAutoDropdown 小部件支持数据列表以处理空间不足的情况。
  • parentScrollController 是屏幕滚动控制器,当屏幕滚动时会自动关闭下拉框。
  • DropItem 类已取代 DropListWidget 类。
  • onSeleted 已被替换为 onSelected。当在下拉框中选择或取消选择时,onSelected 回调会被调用。

入门指南

TODO: 列出先决条件并提供或指向如何开始使用该包的信息。

预览

|| |

使用

简单使用

如果你希望在滚动时控制自动关闭下拉框,则需要在小部件中添加 parentScrollControllerparentScrollController 是屏幕的滚动控制器。

TODO: 请检查 /example 文件夹。

下拉项列表需要转换成 DropItem 类型,包括 nameid 属性,这两个属性是必需的。此外,DropItem 允许添加前缀标志到下拉框中。

final DropItem listDrop = DropItem(name: '', id: -1);
AppAutoDropdown(
  items: <DropItem>[],
  label: '$Label',
  hintText: '$Hint text',
  parentScrollController: scrollController,
  onSelected: (output){},
),

完整示例

以下是一个完整的示例代码,展示了如何使用 quanht_auto_dropper 插件:

// ignore_for_file: avoid_print, constant_identifier_names

import 'package:flutter/material.dart';
import 'package:quanht_auto_dropper/models/drop_item.dart';
import 'package:quanht_auto_dropper/quanht_auto_dropper.dart';

enum Format { EXCEL, PDF, UNKNOWN }

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

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

  // This widget is the root of your application.
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Auto Dropper'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;
  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Format _formatSelect = Format.UNKNOWN;
  ScrollController scrollController = ScrollController();
  final _itemsFormat =
      Format.values.where((v) => v != Format.UNKNOWN).map((element) {
    final index = Format.values.indexOf(element);
    return DropItem(id: index, name: element.name, index: index, data: element);
  }).toList();

  void _selectDropdown(DropItem item) {
    _formatSelect = item.data;
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.amber[100],
        title: Text(widget.title),
      ),
      backgroundColor: Colors.amber,
      body: Column(
        children: [
          const SizedBox(height: 20),
          Expanded(
            child: SingleChildScrollView(
              controller: scrollController,
              child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 16.0),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    const Text(
                      'You just select :',
                    ),
                    Text(
                      _formatSelect.name,
                      style: Theme.of(context).textTheme.headlineMedium,
                    ),
                    AppAutoDropdown(
                      items: _itemsFormat,
                      label: 'Label',
                      hintText: 'Hint text',
                      parentScrollController: scrollController,
                      onSelected: _selectDropdown,
                    ),
                    const SizedBox(height: 500.0),
                    AppAutoDropdown(
                      items: _itemsFormat,
                      label: 'Label',
                      hintText: 'Hint text',
                      parentScrollController: scrollController,
                      onSelected: _selectDropdown,
                    ),
                  ],
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter自动丢弃管理插件quanht_auto_dropper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动丢弃管理插件quanht_auto_dropper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


quanht_auto_dropper 是一个 Flutter 插件,旨在帮助开发者自动管理资源,避免内存泄漏或资源未释放的情况。该插件通过自动丢弃不再使用的资源来简化资源管理。

安装

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

dependencies:
  quanht_auto_dropper: ^latest_version

然后运行 flutter pub get 来安装插件。

基本用法

quanht_auto_dropper 提供了一个 AutoDropper 类,你可以用它来管理需要自动丢弃的资源。

1. 创建 AutoDropper 实例

import 'package:quanht_auto_dropper/quanht_auto_dropper.dart';

final autoDropper = AutoDropper();

2. 添加需要自动丢弃的资源

你可以使用 add 方法将资源添加到 AutoDropper 中。这些资源可以是任何对象,比如数据库连接、文件句柄、网络请求等。

final resource = MyResource();
autoDropper.add(resource);

3. 自动丢弃资源

AutoDropper 会在适当的时候自动丢弃资源。例如,当 AutoDropper 对象被垃圾回收时,它会自动调用资源的 disposeclose 方法(如果资源实现了这些方法)。

class MyResource {
  void dispose() {
    // 释放资源的代码
  }
}

4. 手动丢弃资源

你也可以手动调用 drop 方法来丢弃资源:

autoDropper.drop(resource);

5. 丢弃所有资源

如果你想一次性丢弃所有资源,可以使用 dropAll 方法:

autoDropper.dropAll();

高级用法

自定义丢弃逻辑

如果资源没有实现 disposeclose 方法,你可以通过传入一个回调函数来自定义丢弃逻辑:

autoDropper.add(resource, onDrop: () {
  // 自定义丢弃逻辑
});

绑定到 Widget 生命周期

你可以将 AutoDropper 绑定到 Flutter Widget 的生命周期中,以确保在 Widget 被销毁时自动丢弃资源:

class MyWidget extends StatefulWidget {
  [@override](/user/override)
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final autoDropper = AutoDropper();

  [@override](/user/override)
  void dispose() {
    autoDropper.dropAll();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    final resource = MyResource();
    autoDropper.add(resource);

    return Container(
      // Widget 内容
    );
  }
}
回到顶部