Flutter中NavigationRail的label.toString()返回异常格式,NavigationBar正常?
这不是问题,是两个组件的label属性类型设计不同导致的:
- NavigationRailDestination的label:类型为
Widget,当你传入Text("Text")时,调用toString()会返回该Widget的字符串描述,也就是Text("Text")。 - NavigationBarDestination的label:类型为
String(或你使用时传入的是字符串),所以调用toString()直接返回文本内容"Text"。
解决方法
如果你需要获取NavigationRail目的地的文本用于路由跳转,推荐提前单独存储路由标识和对应文本:
// 提前定义目的地数据 final railDestData = [ {'routeName': 'home', 'labelText': '首页', 'icon': const Icon(Icons.home)}, {'routeName': 'settings', 'labelText': '设置', 'icon': const Icon(Icons.settings)}, ]; // 创建NavigationRailDestination NavigationRailDestination( icon: railDestData[index]['icon'], label: Text(railDestData[index]['labelText']), ) // 跳转时直接取路由名 onDestinationSelected: (value) { context.goNamed(railDestData[value]['routeName']); }
如果非要从已有的Text组件中提取文本,可以做类型转换(不推荐,若label不是Text会报错):
onDestinationSelected: (value) { final textComp = destinations[value].label as Text; context.goNamed(textComp.data ?? 'defaultRoute'); }
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

