使用flutter_iconpicker包编译报错,寻求解决方法
解决flutter_iconpicker编译错误及空安全警告问题
问题描述
使用flutter_iconpicker包实现图标选择功能,严格遵循pub.dev安装说明及示例代码编写,但编译时出现以下问题:
- 找不到
Icons.class__sharp、Icons.class__rounded、Icons.class__outlined成员 WidgetsBinding.instance!触发空安全警告
最终Gradle的assembleDebug任务执行失败。
示例代码:
import 'package:flutter/material.dart'; import 'package:flutter_iconpicker/flutter_iconpicker.dart'; void main() { runApp( const MaterialApp( home: HomeScreen(), ), ); } class HomeScreen extends StatefulWidget { const HomeScreen({Key? key}) : super(key: key); @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 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(), ), ], ), ), ); } }
解决方案
1. 图标成员找不到问题
该问题源于使用的flutter_iconpicker版本(3.1.4+1)引用的Material图标命名与当前Flutter SDK版本不匹配:新版本Flutter中,这些图标名称已将双下划线改为单下划线。
两种解决方式:
升级包版本(推荐)
修改pubspec.yaml中的依赖,指定最新版本的flutter_iconpicker:dependencies: flutter_iconpicker: ^最新版本号执行
flutter pub get完成依赖更新,新版本已适配图标命名规范。手动修改包内代码(临时方案)
找到pub缓存中的包路径:C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_iconpicker-3.1.4+1/lib/IconPicker/Packs/Material.dart
打开文件修改1230-1232行,将双下划线替换为单下划线:'class_sharp': Icons.class_sharp, 'class_rounded': Icons.class_rounded, 'class_outlined': Icons.class_outlined,
2. 空安全警告问题
Flutter 3.0+版本中,WidgetsBinding.instance已为非空类型,无需添加!空断言操作符。
解决方式:
- 升级flutter_iconpicker到最新版本,新版本已适配该API变更;
- 若暂时无法升级,手动修改
iconPicker.dart文件第47行:WidgetsBinding.instance.addPostFrameCallback((_) {
3. 重新编译
完成修改后,执行以下命令清理缓存并重新编译:
flutter clean flutter pub get flutter run
内容的提问来源于stack exchange,提问作者Aree Ahmed
相关产品推荐
相关产品推荐

