Flutter 在bottomNavigationBar颤振中为文本添加渐变

Flutter 在bottomNavigationBar颤振中为文本添加渐变,flutter,Flutter,我需要在底部导航栏上颤振图标下的文本上创建渐变 这就是我所拥有的: 这就是我想说的: 我试过这个:,但我没能完全让它工作。我的问题是我只能找到编辑selectedItem的textStyle的方法,而不是文本小部件本身。如果我知道如何将标题更改为一个单独的小部件,我可以遵循堆栈溢出问题 我目前可以将所有标题设置为渐变,也可以不设置任何标题,但还没有找到一种方法使标题渐变或不渐变,这取决于切换。我找到了一种方法,可以根据是否使用此代码选择图标来设置渐变或非渐变: BottomNavigatio

我需要在底部导航栏上颤振图标下的文本上创建渐变

这就是我所拥有的:

这就是我想说的:

我试过这个:,但我没能完全让它工作。我的问题是我只能找到编辑selectedItem的textStyle的方法,而不是文本小部件本身。如果我知道如何将标题更改为一个单独的小部件,我可以遵循堆栈溢出问题

我目前可以将所有标题设置为渐变,也可以不设置任何标题,但还没有找到一种方法使标题渐变或不渐变,这取决于切换。我找到了一种方法,可以根据是否使用此代码选择图标来设置渐变或非渐变:

BottomNavigationBarItem _createBarItem(inputTitle, inputIcon) {
return  BottomNavigationBarItem(
  activeIcon: ShaderMask(
    shaderCallback: (Rect bounds) {
      return RadialGradient(
        center: Alignment.centerLeft,
        radius: 0.5,
        colors: <Color>[
          Colors.redAccent[200],
          Colors.orangeAccent[200],
          Colors.red.shade200
        ],
        tileMode: TileMode.repeated,
      ).createShader(bounds);
    },
    child: inputIcon,
  ),
  icon: inputIcon,
  title: Text(inputTitle),
);
}

为此,您的
\u createBarItem
方法必须再获取一个参数,即项目的位置。然后将其与所选索引进行比较,如果它们匹配,您就知道该项已被选中,您可以对文本或任何您喜欢的内容应用渐变

  BottomNavigationBarItem _createBarItem(
      String inputTitle, Icon inputIcon, int position) {
    return BottomNavigationBarItem(
      activeIcon: ShaderMask(
        shaderCallback: (Rect bounds) {
          return RadialGradient(
            center: Alignment.centerLeft,
            radius: 0.5,
            colors: <Color>[
              Colors.redAccent[200],
              Colors.orangeAccent[200],
              Colors.red.shade200
            ],
            tileMode: TileMode.repeated,
          ).createShader(bounds);
        },
        child: inputIcon,
      ),
      icon: inputIcon,
      title: position == index
          ? ShaderMask(
              shaderCallback: (Rect bounds) {
                return RadialGradient(
                  center: Alignment.centerLeft,
                  radius: 0.5,
                  colors: <Color>[
                    Colors.redAccent[200],
                    Colors.orangeAccent[200],
                    Colors.red.shade200
                  ],
                  tileMode: TileMode.repeated,
                ).createShader(bounds);
              },
              child: Text(
                inputTitle,
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
              ),
            )
          : Text(inputTitle),
    );
  }
BottomNavigationBarItem\u createBarItem(
字符串输入、图标输入、整数位置){
返回底部导航BarItem(
活动图标:ShaderMask(
着色器回调:(矩形边界){
返回径向梯度(
居中:对齐。居中左,
半径:0.5,
颜色:[
颜色。红色口音[200],
颜色。橙色每分[200],
Colors.red.shade200
],
tileMode:tileMode.重复,
).createShader(边界);
},
孩子:因普蒂顿,
),
图标:inputIcon,
标题:位置==索引
?沙德尔马斯克(
着色器回调:(矩形边界){
返回径向梯度(
居中:对齐。居中左,
半径:0.5,
颜色:[
颜色。红色口音[200],
颜色。橙色每分[200],
Colors.red.shade200
],
tileMode:tileMode.重复,
).createShader(边界);
},
子:文本(
输入标题,
样式:TextStyle(fontSize:20,fontWeight:fontWeight.bold),
),
)
:文本(输入标题),
);
}
输出

  BottomNavigationBarItem _createBarItem(
      String inputTitle, Icon inputIcon, int position) {
    return BottomNavigationBarItem(
      activeIcon: ShaderMask(
        shaderCallback: (Rect bounds) {
          return RadialGradient(
            center: Alignment.centerLeft,
            radius: 0.5,
            colors: <Color>[
              Colors.redAccent[200],
              Colors.orangeAccent[200],
              Colors.red.shade200
            ],
            tileMode: TileMode.repeated,
          ).createShader(bounds);
        },
        child: inputIcon,
      ),
      icon: inputIcon,
      title: position == index
          ? ShaderMask(
              shaderCallback: (Rect bounds) {
                return RadialGradient(
                  center: Alignment.centerLeft,
                  radius: 0.5,
                  colors: <Color>[
                    Colors.redAccent[200],
                    Colors.orangeAccent[200],
                    Colors.red.shade200
                  ],
                  tileMode: TileMode.repeated,
                ).createShader(bounds);
              },
              child: Text(
                inputTitle,
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
              ),
            )
          : Text(inputTitle),
    );
  }