Flutter地图报No Material Widget Found错,IconButton崩溃问题求解
报错原因
控制台抛出的No material widget found、IconButton widget require a material widget,本质是因为IconButton、TextField、CircularProgressIndicator均为Material Design体系组件,这类组件必须依赖上层节点提供的Material上下文才能正常渲染。你当前的MapTab视图直接返回Stack,未给这些组件提供对应的Material容器,因此触发崩溃。
修复方法
在MapTab的build方法返回的组件最外层,套一层透明类型的Material组件即可,不会遮挡下层地图展示:
@override Widget build(BuildContext context) { _size = MediaQuery.of(context).size; // 新增透明Material包裹,提供Material上下文 return Material( type: MaterialType.transparency, child: Stack( alignment: AlignmentDirectional.center, // 原有Stack内的所有子组件逻辑完全保留,无需修改 children: [ // 原有的位置加载FutureBuilder、定位按钮、顶部操作栏、底部商户卡片 ], ), ); }
注意事项
- 如果
MapTab作为独立页面使用,也可以直接用Scaffold包裹,将Scaffold的backgroundColor设为Colors.transparent,同样能提供符合要求的Material上下文 - 如果后续调用的搜索页、自定义
RestaurantMapCard组件出现同类报错,给这些组件的根节点同样套一层Material即可解决
内容的提问来源于stack exchange,提问作者user15327994
相关产品推荐
相关产品推荐

