Flutter中IconButton点击Splash动画始终显示在Stack层级下方
问题根因
IconButton的水波纹点击效果底层由InkWell实现,所有这类墨水扩散效果都必须渲染在对应的Material组件画布上。
你当前的写法里,BottomNavigationBar本身自带Material组件,渲染时会盖住Stack里普通子组件的墨水效果;而你放在Positioned里的IconButton没有独立的、层级更高的Material画布承载水波纹,点击时波纹就会渲染到下层,被底部导航栏完全挡住。
修复方案
给悬浮的IconButton外层套一层透明类型的Material组件即可。这个Material组件在Stack的子项顺序里排在BottomNavigationBar之后,渲染层级更高,水波纹画在这层上就会正常浮在按钮上方,不会被遮挡。
修改后的代码片段:
bottomNavigationBar: Stack( children: <Widget>[ BottomNavigationBar( type: BottomNavigationBarType.fixed, items: [ BottomNavigationBarItem(...), BottomNavigationBarItem(...), BottomNavigationBarItem(...), // 隐形占位导航项 BottomNavigationBarItem( icon: const Icon(Icons.add_circle, size: 0), label: const Text(''), ), ], currentIndex: _selectedIndex, fixedColor: Colors.indigo, onTap: _onItemTapped, iconSize: 24, ), Positioned( right: 32.0, top: 8.5, // 新增透明Material层专门承载水波纹效果 child: Material( type: MaterialType.transparency, child: CircleAvatar( child: IconButton( splashColor: Colors.green, icon: const Icon(Icons.add), onPressed: () {}, ), ), ), ) ], ),
小提示:Flutter 2.0及以上版本中
BottomNavigationBarItem的title参数已被废弃,替换为label参数即可,不影响本次水波纹异常的修复。
内容的提问来源于stack exchange,提问作者Md. Mamun Hossain 1430590042
相关产品推荐
相关产品推荐

