lang: zh-CN
title: 如何在你的 Flutter 中应用 input chip 标签组件

description: 译文

如何在你的 Flutter 中应用 input chip 标签组件

这里有一些领有属性的 chip,其中之一就是 input chip。input chip 通常用于以激进的构造解决客户端输出或向客户端提供想法。除了 label 和 avtar 之外,input chip 还能够有一个删除图标。在 Flutter 中,您能够利用 InputChip widget 制作这种 chip。

原文 https://medium.flutterdevs.co...

前言

InputChip 是一个 material widget ,它以激进的构造解决令人难以置信的数据片段。Flutter 提供了一个名为 InputChip 的 widget ,它容许咱们在应用程序中增加一个 input chip。

默认状况下,input chip 是禁用的。咱们能够通过设置为“抉择”来加强它的能力。咱们能够给出一个标签,以及它的疏导和尾随符号。不同品种的 chip 有 Chip、 ChoiceChip、 ActionChip 和 FilterChip。

https://api.flutter.dev/flutt...

  • 演示:

这个演示视频显示了如何在 Flutter 中应用 input chip,并显示了 input chip 将如何在 Flutter 应用程序中工作。咱们将显示一个用户按下 chip,而后 chip 将被选中,并且用户将删除 chip。它会显示在你们的设施上。

注释

类结构

要利用 InputChip,您须要调用上面的构造函数:

要在 Flutter 中制作 input chip,咱们须要利用 Flutter 给出的 InputChip 类的构造函数。

const InputChip({  Key? key,  this.avatar,  required this.label,  this.labelStyle,  this.labelPadding,  this.selected = false,  this.isEnabled = true,  this.onSelected,  this.deleteIcon,  this.onDeleted,  this.deleteIconColor,  this.deleteButtonTooltipMessage,  this.onPressed,  this.pressElevation,  this.disabledColor,  this.selectedColor,  this.tooltip,  this.side,  this.shape,  this.clipBehavior = Clip.none,  this.focusNode,  this.autofocus = false,  this.backgroundColor,  this.padding,  this.visualDensity,  this.materialTapTargetSize,  this.elevation,  this.shadowColor,  this.selectedShadowColor,  this.showCheckmark,  this.checkmarkColor,  this.avatarBorder = const CircleBorder(),  @Deprecated(    'Migrate to deleteButtonTooltipMessage. '    'This feature was deprecated after v2.10.0-0.3.pre.'  )  this.useDeleteButtonTooltip = true,})

inputChip widget 的一个必须属性是 label 属性。标签能够是任何 widget ,通常是一个文本 widget 。为了利用 InputChip widget ,咱们须要为这个属性提供一个值。

属性

InputChip 的一些个性是:

  • 选中ー此属性用于设置要选中或未选中的 chip 状态。它须要一个布尔值设置,真正会使 chip 抉择和假将使 chip 未被选中。
  • onSelected ー此属性用于更新 input chip 的选定或未选定状态,并在 chip 被选定或未选定时执行一些操作。
  • isEnable ー此属性用于启用或禁用 input chip。它须要一个布尔值。默认状况下,该值为 true。无论咱们是否将这个属性设置为 true,咱们都须要设置 onSelected、 onDelete 或 onPress 的一个回调来启用该按钮。
  • 禁用色彩ーー这个属性用于在禁用 chip 时为 inputChip 利用色彩,咱们将利用这个属性。所以为了禁用这个按钮,我要打消每一个回调。
  • showCheckmark ー此属性用于显示/暗藏选中 chip 时的复选标记。它须要一个布尔值。
  • 这个属性被用来扭转当咱们按下 chip 时咱们想要应用的升高量。

如何在 Dart 文件中实现代码

您须要别离在代码中实现它:

lib 文件夹中创立一个名为 _item_model.dart_ 的新 dart 文件。

首先,咱们须要一个 ItemModel 类来保留 Inputchip 的信息。ItemModel 类将有三个边界标签、色彩和 isSelected。标签将持有 chip 的标记,色彩将持有背景色彩和被抉择的将持有抉择或未抉择的条件的 input chip。

import 'dart:ui';class ItemModel {  String label;  Color color;  bool isSelected;  ItemModel(this.label, this.color, this.isSelected);}
在 lib 文件夹中创立一个名为 _main.dart_ 的新 dart 文件。

总体来说。在 dart 文件中,咱们将创立一个新的类 MyHomePage ()。在这个类中,咱们将首先创立类型 ItemModel 的 List 并为 chip 提供数据。

final List<ItemModel> _chips = [  ItemModel("Android", Colors.green, false),  ItemModel("Flutter", Colors.blueGrey, false),  ItemModel("Ios", Colors.deepOrange, false),  ItemModel("Python", Colors.cyan, false),  ItemModel("React JS", Colors.teal, false),];

在主体中,咱们将增加 Column widget 。在这个 widget 中,咱们将增加一个图像和包装 widget 。在这个 widget 中,咱们将增加方向是程度的,其子级是 itemsChips ()办法。

Center(    child: Column(  children: [    Image.asset(      "assets/logo.png",      height: 300,      width: 350,    ),    Wrap(direction: Axis.horizontal, children: itemsChips()),  ],)),
当初咱们将深刻定义 itemsChips ()办法:

此办法在 widget 列表中。咱们将增加 InputChip widget 。在这个 widget 中,咱们将增加一个头像、标签、 backoundColor、 select、 onDelected、 onSelected,而后返回 chip。

List<Widget> itemsChips() {  List<Widget> chips = [];  for (int i = 0; i < _chips.length; i++) {    Widget item = Padding(      padding: const EdgeInsets.only(left: 10, right: 5),      child: InputChip(        avatar: CircleAvatar(          backgroundColor: Colors.white,          child: Text(_chips[i].label[0].toUpperCase()),        ),        label: Text(_chips[i].label),        labelStyle: const TextStyle(color: Colors.white),        backgroundColor: _chips[i].color,        selected: _chips[i].isSelected,        onDeleted: () {          setState(() {            _chips.removeAt(i);          });        },        onSelected: (bool value) {          setState(() {            _chips[i].isSelected = value;          });        },      ),    );    chips.add(item);  }  return chips;}
当咱们运行应用程序时,咱们应该失去屏幕的输入,就像上面的屏幕截图一样。

最终输入

全副代码

import 'package:flutter/material.dart';import 'package:flutter_input_chip_demo/item_model.dart';import 'package:flutter_input_chip_demo/splash_screen.dart';void main() {  runApp(const MyApp());}class MyApp extends StatelessWidget {  const MyApp({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return MaterialApp(      theme: ThemeData(        primarySwatch: Colors.red,      ),      debugShowCheckedModeBanner: false,      home: const Splash(),    );  }}class MyHomePage extends StatefulWidget {  const MyHomePage({Key? key}) : super(key: key);  @override  _MyHomePageState createState() {    return _MyHomePageState();  }}class _MyHomePageState extends State<MyHomePage> {  final List<ItemModel> _chips = [    ItemModel("Android", Colors.green, false),    ItemModel("Flutter", Colors.blueGrey, false),    ItemModel("Ios", Colors.deepOrange, false),    ItemModel("Python", Colors.cyan, false),    ItemModel("React JS", Colors.teal, false),  ];  @override  Widget build(BuildContext context) {    return Scaffold(      backgroundColor: Colors.grey[200],      appBar: AppBar(        title: const Text("Flutter Input Chip Demo"),        centerTitle: true,        automaticallyImplyLeading: false,        backgroundColor: Colors.orangeAccent,      ),      body: Center(          child: Column(        children: [          Image.asset(            "assets/logo.png",            height: 300,            width: 350,          ),          Wrap(direction: Axis.horizontal, children: itemsChips()),        ],      )),    );  }  List<Widget> itemsChips() {    List<Widget> chips = [];    for (int i = 0; i < _chips.length; i++) {      Widget item = Padding(        padding: const EdgeInsets.only(left: 10, right: 5),        child: InputChip(          avatar: CircleAvatar(            backgroundColor: Colors.white,            child: Text(_chips[i].label[0].toUpperCase()),          ),          label: Text(_chips[i].label),          labelStyle: const TextStyle(color: Colors.white),          backgroundColor: _chips[i].color,          selected: _chips[i].isSelected,          onDeleted: () {            setState(() {              _chips.removeAt(i);            });          },          onSelected: (bool value) {            setState(() {              _chips[i].isSelected = value;            });          },        ),      );      chips.add(item);    }    return chips;  }}

论断

在本文中,我简略介绍了 input chip 的根本构造; 您能够依据本人的抉择批改此代码。这是一个小的介绍 input chip 用户交互从我的方面,它的工作应用 Flutter 。

我心愿这个博客将提供足够的信息,试验 input chip 在您的 Flutter 我的项目。咱们将向您展现什么是介绍,什么是 input chip 的构造和性能,并作出一个演示程序与 input chip 工作在您的 Flutter 应用程序。所以请你试试。


如果本文对你有帮忙,请转发让更多的敌人浏览。

© 猫哥

  • 微信 ducafecat
  • https://wiki.ducafecat.tech
  • https://video.ducafecat.tech

本文由mdnice多平台公布