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 多平台公布