首页 > 解决方案 > Flutter statefull 小部件不更新 svg 图标

问题描述

嗨,我正在学习颤振,但遇到了这个问题。当用户单击菜单项但图标未更改时,我正在尝试更改 svg 图标。单击菜单项时,我需要更改图标。

class BottomNavigation extends StatefulWidget {
  const BottomNavigation({
    Key key,
  }) : super(key: key);

  @override
  _BottomNavigationState createState() => _BottomNavigationState();
}

class _BottomNavigationState extends State<BottomNavigation> {
  @override
  Widget build(BuildContext context) {
    num _currentIndex = 1;
    return Container(
      padding: EdgeInsets.only(
          left: kDefaultPadding * 2,
          right: kDefaultPadding * 2,
          bottom: kDefaultPadding),
      height: 90,
      decoration: BoxDecoration(color: Colors.white, boxShadow: [
        BoxShadow(
            offset: Offset(0, -10),
            blurRadius: 35,
            color: kPrimaryColor.withOpacity(0.1))
      ]),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          IconButton(
              icon: _currentIndex == 1
                  ? SvgPicture.asset("assets/svg/bhomeActive.svg")
                  : SvgPicture.asset("assets/svg/bhome.svg"),
              onPressed: () {
                setState(() {
                  _currentIndex = 1;
                });
                print(_currentIndex);
              }),
          IconButton(
              icon: _currentIndex == 5
                  ? SvgPicture.asset("assets/svg/bprofileActive.svg")
                  : SvgPicture.asset("assets/svg/bprofile.svg"),
              onPressed: () {
                setState(() {
                  _currentIndex = 5;
                });
                print(_currentIndex);
              })
        ],
      ),
    );
  }
}

我做错了还是在渲染后颤动无法更改 svg?

尝试使用默认图标在状态更改后也无法再次渲染?

图标:_currentIndex == 1 ?图标(Icons.work):图标(Icons.alarm),

标签: flutterstatefulwidget

解决方案


Flutter 中的 SVG 图像似乎存在问题,也有不同的包可用,但我建议您使用 PNG,而不是 SVG,因为 PNG 的大小小于 SVG,而且它也可以完美有效地工作,两者都在屏幕和编程。或使用已经可用的默认材质图标。 Flutter 材质图标


推荐阅读