Flutter个人中心滑动面板报错:JsObject无法赋值给BuildContext
解决Flutter中"The argument type 'JsObject' can't be assigned to the parameter type 'BuildContext'"错误
问题根源
你遇到的错误是因为_panelBody方法里的context不是Flutter的BuildContext类型——而是来自dart:js库的全局JsObject类型对象,导致类型不匹配。导入dart:js不仅没用,反而加剧了命名冲突。另外,这个方法本身没有接收Widget树的上下文参数,无法获取正确的BuildContext。
解决办法
1. 给方法添加BuildContext参数
修改_panelBody方法,让它接收BuildContext作为参数,调用时传入当前Widget的上下文:
// Panel Body SingleChildScrollView _panelBody(BuildContext context, ScrollController controller) { double hPadding = 40; return SingleChildScrollView( controller: controller, physics: const ClampingScrollPhysics(), child: Column( children: <Widget>[ Container( padding: EdgeInsets.symmetric(horizontal: hPadding), height: MediaQuery.of(context).size.height * 0.35, ) ], ), ); }
在build方法中调用时传入上下文:
@override Widget build(BuildContext context) { return Scaffold( body: _panelBody(context, _yourScrollController), ); }
2. 处理dart:js的命名冲突(如果必须保留该库)
如果项目确实需要用到dart:js,用别名导入避免全局context变量和Flutter上下文冲突:
import 'dart:js' as js;
之后访问dart:js的上下文时要写js.context,不会再和Flutter的BuildContext混淆。
3. 移除不必要的dart:js导入
如果你的项目不是Flutter Web项目,或者根本不需要dart:js的功能,直接删除该库的导入语句,这样context就会默认指向Flutter的BuildContext(前提是已按方法1添加参数)。
内容的提问来源于stack exchange,提问作者user19101467
相关产品推荐
相关产品推荐

