没有为类型 'Widget' 定义 getter 'preferredSize'

Posted

技术标签:

【中文标题】没有为类型 \'Widget\' 定义 getter \'preferredSize\'【英文标题】:The getter 'preferredSize' isn't defined for the type 'Widget'没有为类型 'Widget' 定义 getter 'preferredSize' 【发布时间】:2021-07-27 10:12:44 【问题描述】:

@override
  Widget build(BuildContext context) 
    final mediaQuery = MediaQuery.of(context);
    final isLandscape = mediaQuery.orientation == Orientation.landscape;
    final appBar = Platform.isios
        ? CupertinoNavigationBar(
            middle: Text(
              'Personal Expenses',
            ),
            trailing: Row(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                GestureDetector(
                  child: Icon(CupertinoIcons.add),
                  onTap: () => _startAddNewTransaction(context),
                ),
              ],
            ),
          )
        : AppBar(
            title: Text(
              'Personal Expenses',
            ),
            actions: <Widget>[
              IconButton(
                icon: Icon(Icons.add),
                onPressed: () => _startAddNewTransaction(context),
              ),
            ],
          );

没有为类型 'Widget' 定义 getter 'preferredSize'。

    final txListWidget = Container(
      height: (mediaQuery.size.height -
              appBar.preferredSize.height -
              mediaQuery.padding.top) *
          0.7,

参数类型“Widget”不能赋值给参数类型“ObstructingPreferredSizeWidget?”

 return Platform.isIOS
    ? CupertinoPageScaffold(
        child: pageBody,
        navigationBar: appBar,
      )

参数类型“Widget”不能分配给参数类型“PreferredSizeWidget?”

: Scaffold(
        appBar: appBar,
        body: pageBody,

【问题讨论】:

【参考方案1】:

变量appBar请使用数据类型

final PreferredSizeWidge appBar = Platform.isIOS ? ......

【讨论】:

,如果它使用该数据类型“PreferredSizeWidget”,我会遇到另一个错误“Widget”类型的值无法分配给“PreferredSizeWidget”类型的变量。 CupertinoNavigationBar 不是PreferredSizeWidget。您可以更改 AppBar 属性以获得 IOS 原生的感觉,否则您将不得不使用 CupertinoPageScaffold 来代替 CupertinoNavigationBar【参考方案2】:

appbar 类型从PreferredSizeWidgetWidget 更改为dynamic

【讨论】:

【参考方案3】:

将代码改成如下格式。

final PreferredSizeWidget appBar = (Platform.isIOS ? CupertinoNavigationBar(...) : AppBar(...)) as PreferredSizeWidget;

【讨论】:

以上是关于没有为类型 'Widget' 定义 getter 'preferredSize'的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Hive getter 没有为“hiveobjectmixin”类型定义

没有为类型 'QuerySnapshot<Map<String, dynamic>>' 定义 getter 'documents'

没有为类 'Map<>' 定义 getter 为 Map 列出 getter

Java - 为来自外部库的类定义一个通用接口

没有为类定义 getter 'Timer'

没有为该类定义 Getter。我在这里做错了啥?