Flutter图标选择插件icon_picker的使用
Flutter图标选择插件icon_picker的使用
介绍
icon_picker
是一个用于展示图标集合以供选择的 Flutter 小部件。该小部件扩展了 TextField
,并且具有类似 TextFormField
的行为。
使用
在你的 Flutter 项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
...
icon_picker: "^2.1.0"
在你的库文件中添加以下导入语句:
import 'package:icon_picker/icon_picker.dart';
示例
IconPicker
默认使用内置的 MaterialIcon
集合,但你可以设置自己的图标集合。你只需要通过 iconCollection
参数传递一个 Map<String, IconData>
类型的对象。
final Map<String, IconData> myIconCollection = {
'favorite': Icons.favorite,
'home': Icons.home,
'android': Icons.android,
'album': Icons.album,
'ac_unit': Icons.ac_unit,
...
}
使用 IconPicker
的示例代码如下:
IconPicker(
initialValue: 'favorite', // 初始值
icon: Icon(Icons.apps), // 图标
labelText: "Icon", // 文本标签
title: "Select an icon", // 标题
cancelBtn: "CANCEL", // 取消按钮文本
enableSearch: true, // 是否启用搜索功能
searchHint: 'Search icon', // 搜索提示
iconCollection: myIconCollection, // 自定义图标集合
onChanged: (val) => print(val), // 改变时的回调
onSaved: (val) => print(val), // 保存时的回调
);
当选择一个图标时,onChanged
和 onSaved
回调函数的返回值是一个 JSON 字符串。例如,如果你选择了 ac_unit
图标,则返回值将是:
'{"iconName": "ac_unit", "codePoint": 60219, "fontFamily": "MaterialIcons"}'
要将 IconPicker
返回的字符串转换为 IconData
,可以使用以下代码:
String value = '{"iconName": "ac_unit", "codePoint": 60219, "fontFamily": "MaterialIcons"}';
var iconDataJson = jsonDecode(value);
IconData icon = IconData(iconDataJson['codePoint'], fontFamily: iconDataJson['fontFamily']);
Icon(icon);
预览
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:icon_picker/icon_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter IconPicker Demo',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key}) : super(key: key);
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
GlobalKey<FormState> _oFormKey = GlobalKey<FormState>();
TextEditingController? _controller;
//String _initialValue = '';
String _valueChanged = '';
String _valueToValidate = '';
String _valueSaved = '';
[@override](/user/override)
void initState() {
super.initState();
//_initialValue = 'home';
_controller = TextEditingController(text: 'home');
_getValue();
}
/// This implementation is just to simulate a load data behavior
/// from a database SQLite or from an API
Future<void> _getValue() async {
await Future.delayed(const Duration(seconds: 3), () {
setState(() {
//_initialValue = 'favorite';
_controller?.text = 'favorite';
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter IconPicker Demo'),
),
body: SingleChildScrollView(
padding: EdgeInsets.only(left: 20, right: 20, top: 10),
child: Form(
key: _oFormKey,
child: Column(
children: <Widget>[
IconPicker(
controller: _controller,
//initialValue: _initialValue,
icon: Icon(Icons.apps),
labelText: "Icon",
enableSearch: true,
onChanged: (val) => setState(() => _valueChanged = val),
validator: (val) {
setState(() => _valueToValidate = val ?? '');
return null;
},
onSaved: (val) => setState(() => _valueSaved = val ?? ''),
),
SizedBox(height: 30),
Text(
'IconPicker data value onChanged:',
style: TextStyle(fontWeight: FontWeight.bold),
),
SizedBox(height: 10),
SelectableText(_valueChanged),
SizedBox(height: 30),
ElevatedButton(
onPressed: () {
final loForm = _oFormKey.currentState;
if (loForm?.validate() == true) {
loForm?.save();
}
},
child: Text('Submit'),
),
SizedBox(height: 30),
Text(
'IconPicker data value validator:',
style: TextStyle(fontWeight: FontWeight.bold),
),
SizedBox(height: 10),
SelectableText(_valueToValidate),
SizedBox(height: 30),
Text(
'IconPicker data value onSaved:',
style: TextStyle(fontWeight: FontWeight.bold),
),
SizedBox(height: 10),
SelectableText(_valueSaved),
SizedBox(height: 30),
ElevatedButton(
onPressed: () {
final loForm = _oFormKey.currentState;
loForm?.reset();
setState(() {
_valueChanged = '';
_valueToValidate = '';
_valueSaved = '';
});
},
child: Text('Reset'),
),
],
),
),
),
);
}
}
更多关于Flutter图标选择插件icon_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图标选择插件icon_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
icon_picker
是 Flutter 中一个用于选择图标的插件。它允许用户从预定义的图标列表中选择一个图标,并将选中的图标返回给应用程序。这个插件通常用于需要用户选择图标的场景,比如设置应用的图标、选择类别图标等。
安装 icon_picker
首先,你需要在 pubspec.yaml
文件中添加 icon_picker
依赖:
dependencies:
flutter:
sdk: flutter
icon_picker: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
安装依赖。
使用 icon_picker
下面是一个简单的示例,展示如何在 Flutter 应用中使用 icon_picker
。
import 'package:flutter/material.dart';
import 'package:icon_picker/icon_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Icon Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: IconPickerDemo(),
);
}
}
class IconPickerDemo extends StatefulWidget {
@override
_IconPickerDemoState createState() => _IconPickerDemoState();
}
class _IconPickerDemoState extends State<IconPickerDemo> {
IconData? _selectedIcon;
Future<void> _pickIcon() async {
final IconData? icon = await showIconPicker(
context: context,
iconPackMode: IconPack.material, // 选择图标包,可以是 material 或 cupertino
);
if (icon != null) {
setState(() {
_selectedIcon = icon;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Icon Picker Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (_selectedIcon != null)
Icon(
_selectedIcon,
size: 50,
color: Colors.blue,
)
else
Text('No icon selected'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _pickIcon,
child: Text('Pick an Icon'),
),
],
),
),
);
}
}
代码解释
-
_pickIcon
方法: 这个方法使用showIconPicker
函数来显示图标选择器对话框。用户可以从 Material 或 Cupertino 图标包中选择一个图标。 -
IconData? _selectedIcon
: 这是一个状态变量,用于存储用户选择的图标。 -
showIconPicker
: 这个函数显示一个对话框,允许用户从预定义的图标列表中选择一个图标。iconPackMode
参数可以设置为IconPack.material
或IconPack.cupertino
,分别表示使用 Material 或 Cupertino 图标包。 -
setState
: 当用户选择了一个图标后,调用setState
更新界面,显示选中的图标。
主题和自定义
你可以通过 iconColor
、backgroundColor
等参数来自定义图标选择器的外观。
final IconData? icon = await showIconPicker(
context: context,
iconPackMode: IconPack.material,
iconColor: Colors.red,
backgroundColor: Colors.black,
);