Flutter图标选择器插件flutter_iconpicker_plus的使用
Flutter图标选择器插件flutter_iconpicker_plus的使用
这个包提供了一个图标选择器,支持(或自定义提供)图标,可以通过一个AlertDialog来选择。所有图标都通过名称映射到IconData
。这是为了使通过搜索来查找图标成为可能。全文搜索包括如果没有找到结果时的提示。

声明(重要)
此包定期维护,稳定且被许多生产软件解决方案使用(在此感谢所有人 🙏)。
然而,不能保证所有图标都能正确显示 -> 为什么? -> flutter框架不断更改例如codePoint
的值,比如对于Icons.camera
。所以如果你开发的应用使用的是较旧的flutter版本和flutter_iconpicker_plus版本,你就可以正常使用,但如果你想更新你的应用和flutter版本,codePoint
的值可能会被破坏,不再与Icons.camera
等匹配!
我们可以做什么?
简单地通过提供包含正确codePoint
的IconData
列表来使用自定义图标(而不是Icons.camera
!)
好的:'camera': IconData(0xe3af, fontFamily: 'MaterialIcons')
不好:'camera': Icons.camera
例如,如果你想提供material
图标,可以复制这里的实际图标:icons.dart,并将它们作为自定义图标传递给图标选择器。
支持的图标包
图标包 | 支持 |
---|---|
Material | ✅ |
(包括Sharp, Rounded 和 Outlined) | |
Cupertino | ✅ |
FontAwesome | ✅ |
LineAwesome | ✅ |
使用
要使用此包,在pubspec.yaml
文件中添加flutter_iconpicker_plus
作为依赖项。
构建
如果你构建你的应用时遇到问题,可能是由于此包。#TreeShakeIcons
为了能够构建你的应用,添加以下标志到你的构建命令中:--no-tree-shake-icons
,然后你应该可以正常构建了!
API参考
参数 | 类型 | 默认值 | 简短描述 |
---|---|---|---|
context (仅需要) | BuildContext |
- | 由于AlertDialog 的基础,因此需要此参数。 |
adaptiveDialog | bool |
false |
如果为true ,图标选择器会根据屏幕大小进行调整。如果为false ,图标选择器将显示在AlertDialog 内。 |
barrierDismissible | bool |
true |
定义用户是否可以通过点击外部屏障来关闭对话框。 |
iconSize | double |
40.0 |
定义可选图标的所有图标的大小。 |
iconColor | Color |
Theme.of(context).iconTheme.color |
设置可选图标的所有图标的颜色。 |
mainAxisSpacing | double |
5.0 |
在主轴上放置子元素之间的空间量。 |
crossAxisSpacing | double |
5.0 |
在交叉轴上放置子元素之间的空间量。 |
iconPickerShape | ShapeBorder |
RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.0)) |
选择器对话框的形状。 |
backgroundColor | Color |
Theme.of(context).dialogBackgroundColor |
AlertDialog 的背景颜色。 |
constraints | BoxConstraints |
如果adaptiveDialog 为true ,则默认为:BoxConstraints(maxHeight: 500, minWidth: 450, maxWidth: 720) ,否则:BoxConstraints(maxHeight: 350, minWidth: 450, maxWidth: 678) 。 |
对话框的BoxConstraints 用于限制/设置:maxHeight 、maxWidth 、minHeight 和minWidth 。 |
title | Widget |
Text('Pick an icon') |
选择器的标题。位于[搜索栏]和[图标]之上。 |
closeChild | Widget |
Text('Close',textScaleFactor: 1.25,) |
关闭默认对话框的AlertDialog 的动作FlatButton 的内容。 |
searchIcon | Icon |
Icon(Icons.search) |
设置[搜索栏]中的前缀图标。 |
searchHintText | String |
'Search' |
设置[搜索栏]中TextField 的hintText 。 |
searchClearIcon | Icon |
Icon(Icons.close) |
设置[搜索栏]中的后缀图标。 |
noResultsText | String |
'No results for:' |
当未找到搜索词的结果时显示的文本。 |
showTooltips | bool |
false |
显示在相应图标下方的标签。 |
showSearchBar | bool |
true |
如果为true ,则在图标上方显示搜索栏。 |
iconPackModes | List<IconPack> |
const <IconPack>[IconPack.material] |
要显示的图标模式。 |
customIconPack | Map<String, IconData> |
null |
可以使用的自定义图标。 |
图标包模式
你可以通过参数iconPackModes
选择所需的图标包。这默认为const <IconPack>[IconPack.material]
。
更多用法请参阅示例。
自定义图标
如果你不想使用默认图标包,也可以通过创建一个Map<String, IconData>
来提供自己的图标包,其中包含图标名称和特定的IconData
。只需将其传递给customIconPack
并设置图标包模式:IconPack.custom
。
图标选择器的结果和进一步使用(保存和检索)
选择器返回一个IconData
,它只是一个类,例如:
IconData(0xe3af, fontFamily: 'MaterialIcons'); // Icons.camera
这就是代表一个Material图标。
所以如果你计划保存所选图标(如sqflite、firebase等),可以使用序列化方法:
- 调用此方法将所选
IconData
转换为Map
:
serializeIcon(iconData)
- 通过传递映射后的
IconData
来检索IconData
:
deserializeIcon(map)
示例
import 'package:flutter/material.dart';
import 'package:flutter_iconpicker_plus/flutter_iconpicker_plus.dart';
void main() {
runApp(
const MaterialApp(
home: HomeScreen(),
),
);
}
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
Icon? _icon;
_pickIcon() async {
IconData? icon = await FlutterIconPicker.showIconPicker(context,
iconPackModes: [IconPack.cupertino]);
_icon = Icon(icon);
setState(() {});
debugPrint('Picked Icon: $icon');
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _pickIcon,
child: const Text('Open IconPicker'),
),
const SizedBox(height: 10),
AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: _icon ?? Container(),
),
],
),
),
);
}
}
更多关于Flutter图标选择器插件flutter_iconpicker_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图标选择器插件flutter_iconpicker_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_iconpicker_plus
插件的一个基本示例。这个插件允许你在应用中提供一个图标选择器,让用户可以从一系列图标中选择一个。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_iconpicker_plus
依赖:
dependencies:
flutter:
sdk: flutter
flutter_iconpicker_plus: ^x.y.z # 请将x.y.z替换为最新版本号
然后,运行flutter pub get
来安装依赖。
步骤 2: 导入包
在你的Dart文件中(例如main.dart
),导入flutter_iconpicker_plus
包:
import 'package:flutter/material.dart';
import 'package:flutter_iconpicker_plus/flutter_iconpicker_plus.dart';
步骤 3: 使用IconPicker
以下是一个简单的示例,展示如何在你的应用中实现图标选择器:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Icon Picker Plus Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
IconPickerData? _selectedIcon;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Icon Picker Plus Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (_selectedIcon != null)
Icon(
IconData(
_selectedIcon!.codePoint,
fontFamily: _selectedIcon!.fontFamily,
),
size: 50,
color: Colors.blue,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => IconPicker(
onDone: (icons) {
setState(() {
_selectedIcon = icons.first;
});
Navigator.pop(context);
},
icons: IconPickerData.allIcons(), // 获取所有图标
selectedIcons: _selectedIcon != null
? [_selectedIcon!]
: [],
multiSelect: false, // 设置为true以允许多选
showSearchBar: true, // 显示搜索栏
searchBarPlaceholder: 'Search...',
),
),
);
},
child: Text('Select Icon'),
),
],
),
),
);
}
}
解释
- 依赖导入:我们在
pubspec.yaml
中添加了flutter_iconpicker_plus
依赖,并在Dart文件中导入了它。 - 状态管理:我们创建了一个
_MyHomePageState
类来管理选中图标的状态。 - UI布局:
- 使用
Center
和Column
来居中显示图标和按钮。 - 如果已选中图标,则显示该图标。
- 使用
ElevatedButton
来触发图标选择器。
- 使用
- 图标选择器:点击按钮时,导航到一个新的
IconPicker
页面,用户可以选择一个图标。选择完成后,将更新状态并返回到主页面。
这个示例展示了如何使用flutter_iconpicker_plus
插件的基本功能。你可以根据需要进行进一步自定义和扩展。