You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:06:32