Flutter自定义AppBar赋值Scaffold时提示Widget无法转为PreferredSizeWidget?错误
问题原因
Scaffold组件的appBar参数要求接收PreferredSizeWidget?类型的组件,你当前在FeedHelpers类中定义的appBar方法声明返回值为Widget,即使方法内部实际返回的AppBar本身已经实现了PreferredSizeWidget接口,静态类型检查也会抛出不匹配的错误。
解决方案
有两种常用的修复方式,优先选择第一种即可:
- 方案1:直接修改FeedHelpers中appBar方法的返回类型
把Widget appBar(BuildContext context)改成PreferredSizeWidget appBar(BuildContext context)即可,你返回的AppBar本身就符合这个类型,不需要修改其他业务逻辑。
修改后的Feed_helpers.dart对应代码:
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:wecare_u/constants/Constantcolors.dart'; class FeedHelpers with ChangeNotifier { ConstantColors constantColors = ConstantColors(); // 仅修改此处返回类型即可 PreferredSizeWidget appBar(BuildContext context) { return AppBar( backgroundColor: constantColors.darkColor, centerTitle: true, actions: [ IconButton( icon: Icon(Icons.camera_enhance_rounded, color: constantColors.greenColor), onPressed: () {}) ], title: RichText( text: TextSpan( text: 'Social ', style: TextStyle( color: constantColors.whiteColor, fontWeight: FontWeight.bold, fontSize: 20.0, ), children: <TextSpan>[ TextSpan( text: 'Feed', style: TextStyle( color: constantColors.blueColor, fontWeight: FontWeight.bold, fontSize: 20.0, )) ]), ), ); } }
feed.dart文件无需任何修改,即可正常运行。
- 方案2:调用处做类型强转
如果不想修改FeedHelpers的代码,也可以在feed.dart赋值时增加类型强转:
import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:wecare_u/Designs/Feed_helpers.dart'; class Feed extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( // 增加as强转声明即可 appBar: Provider.of<FeedHelpers>(context, listen: false).appBar(context) as PreferredSizeWidget, ); } }
内容的提问来源于stack exchange,提问作者Aswin B
相关产品推荐
相关产品推荐

