Flutter标签管理插件simple_tags的使用

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

Flutter标签管理插件simple_tags的使用

pub package

simple_tags 是一个Flutter插件,用于在Wrap中显示基于字符串的标签。该插件保持极简和直接。

使用方法

要使用此插件,请将 simple_tags 作为 依赖项添加到您的 pubspec.yaml 文件 中:

dependencies:
  simple_tags: "0.0.6"

示例

您可以通过注入字符串列表来指定 SimpleTagscontent。这将创建一个基本的标签布局,而无需任何样式。下面的例子展示了一些样式选项,例如更改 TextStyleBoxDecoration 的标签容器。您可以根据需要调整标签文本和标签容器。还提供了一些基本回调,用于处理标签容器的点击、长按或双击事件。

完整示例Demo

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple Tags Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SimpleTagExample(title: 'Simple Tags Demo'),
    );
  }
}

class SimpleTagExample extends StatefulWidget {
  SimpleTagExample({Key key, this.title}) : super(key: key);

  final String title;
  final List<String> content = [
    'Apple',
    'Banana',
    'Orange',
    'Pomme',
    'Carambola',
    'Cherries',
    'Date Fruit',
    'A Fruit with a really long name',
    'A Fruit with a really, really, really, really, very, very, very, very long name',
    'Durian',
    'Grapefruit'
  ];

  @override
  _SimpleTagExampleState createState() => _SimpleTagExampleState();
}

class _SimpleTagExampleState extends State<SimpleTagExample> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SimpleTags(
        content: widget.content,
        wrapSpacing: 4,
        wrapRunSpacing: 4,
        onTagPress: (tag) {print('pressed $tag');},
        onTagLongPress: (tag) {print('long pressed $tag');},
        onTagDoubleTap: (tag) {print('double tapped $tag');},
        tagContainerPadding: EdgeInsets.all(6),
        tagTextStyle: TextStyle(color: Colors.deepPurple),
        tagIcon: Icon(Icons.clear, size: 12),
        tagContainerDecoration: BoxDecoration(
          color: Colors.white,
          border: Border.all(color: Colors.grey),
          borderRadius: BorderRadius.all(
            Radius.circular(20),
          ),
          boxShadow: [
            BoxShadow(
              color: Color.fromRGBO(139, 139, 142, 0.16),
              spreadRadius: 1,
              blurRadius: 1,
              offset: Offset(1.75, 3.5), // c
            )
          ],
        ), // This trailing comma makes auto-formatting nicer for build methods.
      ),
    );
  }
}

贡献

感谢您的关注!如果您有任何问题、反馈或发现某些功能不如预期工作,请随时打开一个问题。我们非常欢迎您提交改进库或文档的Pull请求。

许可证

本库及其内容发布在 MIT License 下。


这个帖子提供了关于如何在Flutter项目中使用`simple_tags`插件的详细说明,并附带了一个完整的示例demo。希望这对您有所帮助!

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

1 回复

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


当然,下面是一个关于如何使用Flutter标签管理插件simple_tags的代码案例。这个插件允许你在Flutter应用中轻松管理标签。

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

dependencies:
  flutter:
    sdk: flutter
  simple_tags: ^最新版本号  # 请替换为当前最新版本号

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

接下来是一个简单的示例代码,展示如何使用simple_tags插件来创建和管理标签。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Simple Tags Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: TagManagerScreen(),
    );
  }
}

class TagManagerScreen extends StatefulWidget {
  @override
  _TagManagerScreenState createState() => _TagManagerScreenState();
}

class _TagManagerScreenState extends State<TagManagerScreen> {
  final List<String> initialTags = ['Flutter', 'Dart', 'Mobile Development'];
  List<Tag> tags = [];

  @override
  void initState() {
    super.initState();
    tags = initialTags.map((tag) => Tag(text: tag)).toList();
  }

  void _addTag(String tagText) {
    setState(() {
      tags.add(Tag(text: tagText));
    });
  }

  void _removeTag(Tag tag) {
    setState(() {
      tags.remove(tag);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tag Manager'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Current Tags:', style: TextStyle(fontSize: 20)),
            SizedBox(height: 16),
            Wrap(
              spacing: 8,
              runSpacing: 8,
              children: List.generate(
                tags.length,
                (index) => GestureDetector(
                  onTap: () => _removeTag(tags[index]),
                  child: TagWidget(
                    tag: tags[index],
                    decoration: BoxDecoration(
                      color: Colors.blue.shade300,
                      borderRadius: BorderRadius.circular(16),
                    ),
                    labelStyle: TextStyle(color: Colors.white),
                    closeIcon: Icon(
                      Icons.close,
                      color: Colors.white,
                    ),
                  ),
                ),
              ),
            ),
            SizedBox(height: 32),
            TextField(
              decoration: InputDecoration(
                labelText: 'Add a new tag',
                border: OutlineInputBorder(),
              ),
              onSubmitted: (value) {
                if (value.isNotEmpty) {
                  _addTag(value);
                }
              },
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                // Handle button press (e.g., submit form)
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

class TagWidget extends StatelessWidget {
  final Tag tag;
  final BoxDecoration decoration;
  final TextStyle labelStyle;
  final Widget closeIcon;

  const TagWidget({
    Key key,
    @required this.tag,
    this.decoration,
    this.labelStyle,
    this.closeIcon,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Expanded(
          child: Container(
            decoration: decoration,
            padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
            child: Text(tag.text, style: labelStyle),
          ),
        ),
        if (closeIcon != null) Padding(
          padding: EdgeInsets.only(left: 8),
          child: closeIcon,
        ),
      ],
    );
  }
}

在这个示例中:

  1. 我们创建了一个TagManagerScreen,它包含了当前标签的显示和添加新标签的输入框。
  2. tags列表用于存储当前的标签。
  3. _addTag方法用于添加新标签,_removeTag方法用于移除标签。
  4. TagWidget是一个自定义的小部件,用于显示单个标签,并包含删除图标(如果有的话)。

注意:simple_tags插件的具体用法可能会根据其版本有所不同,因此请参考插件的官方文档以获取最新和最准确的用法。上面的代码只是一个基于假设的示例,用于展示如何使用类似功能。

回到顶部