有什么方法可以使Flutter中的功能无法替代?

斯文

我有一个class InfoScreen扩展了的BaseInfoScreen在其中BaseInfoScreen有一个Widget body();,所有子项都可以覆盖。还有一个Widget banner();实现BaseInfoScreen,并且我继承了小部件以使用它,但不能覆盖它(因为它在所有屏幕上都必须相同)。有什么办法可以告诉我Widget banner();不要被压倒吗?我尝试将final添加const到函数中,但它不允许我这样做。

完整代码示例:

BaseInfoScreen

  abstract class BaseInfoScreen extends StatefulWidget {
    final String title;
  
    BaseInfoScreen({
      Key key,
      this.title,
    }) : super(key: key);
  }
  
  abstract class BaseInfoScreenState<Page extends BaseInfoScreen>
      extends State<BaseInfoScreen> {
  
    bool showFabMenu() => true;
  }
  
  mixin BaseScreen<Page extends BaseInfoScreen> on BaseInfoScreenState<Page> {
  
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: CoolAppBar(
          title: widget.title,              
        ),
        drawer: Container(
          width: 290,
          child: Drawer(
            child: DrawerMenu(),
          ),
        ),
        body: body(),
        floatingActionButton: showFabMenu() ? FabMenu() : null,
      );
    }
    
  //This should be overridable
  Widget body();

  //This should be usable by widgets that inherit from BaseInfoScreen, but not override it.
  Widget banner() {
    return Container(
      color: Colors.black12,
      padding: const EdgeInsets.all(20),
      child: Row(
        mainAxisSize: MainAxisSize.max,
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          widget.bannerIconAsset != null
              ? Container(
                  child: Image.asset(
                    widget.bannerIconAsset,
                    width: 36,
                    height: 36,
                    filterQuality: FilterQuality.high,
                    color: Colors.white,
                  ),
                )
              : Container(
                  child: Icon(
                    widget.bannerIconData,
                    size: 36,
                    color: Colors.white,
                  ),
                ),
          SizedBox(width: 20),
          Container(
            constraints: BoxConstraints(
                maxWidth: MediaQuery.of(context).size.width * 0.7),
            child: FittedBox(
              fit: widget.bannerTitle.length > 10
                  ? BoxFit.fitWidth
                  : BoxFit.none,
              child: Text(
                widget.bannerTitle,
                style: TextStyle(
                  fontSize: 28,
                  fontFamily: 'Raleway',
                  fontWeight: FontWeight.bold,
                  color: Colors.white,
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }    

信息屏幕

class InfoScreen extends BaseInfoScreen {
  final String title;

  InfoScreen({
    this.title,
  }) : super(
          title: title,
        );

  @override
  _InfoScreenState createState() =>
      _InfoScreenState();
}

class _InfoScreenState extends BaseInfoScreenState<InfoScreen> with BaseScreen
{
  _InfoScreenState();

  @override
  Widget body() {
     return Column(
       children: [
         //Here I call banner()
         banner(),
         //Here I declare other widgets that are part of the body
       ],
     );
  }
}

我试图尽可能地简化代码,以使其保持简单。也许答案只是“不,不可能”,但我在网上找不到任何东西。

蒂埃里

您可以nonVirtual通过meta包注释来做到这一点

import 'package:meta/meta.dart';

void main() {
  B().p();
}

class A {
  @nonVirtual
  void p() => print('A');
}

class B extends A {
  void p() => print('B');
}

默认情况下,invalid_override_of_non_virtual_member这只是一个信息。您可能想通过修改analysis_options.yaml项目根目录下文件来强力实施它

analyzer:
  errors:
    invalid_override_of_non_virtual_member: error

点击这里了解有关自定义飞镖静态分析的详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

有什么方法可以使有序列表中的数字加粗吗?

来自分类Dev

有什么方法可以使用import someValue._在Scala中实现重写方法?

来自分类Dev

无法扩展OnClickListener-有什么替代方法?

来自分类Dev

有什么方法可以使此Haskell IO功能的版本更简洁?

来自分类Dev

有什么方法可以在Clojure中具有真正的私有功能?

来自分类Dev

ylim在R的plot()中如何确定?有什么可以替代的?

来自分类Dev

有什么方法可以使用PhantomJSDriver在PhantomJS中设置用户代理?

来自分类Dev

有什么方法可以获取模块中定义的功能列表?

来自分类Dev

在Elixir中,有什么方法可以让模块列出其功能?

来自分类Dev

有什么方法可以使用mongoose从mongodb的批量操作中获取修改的IDS?

来自分类Dev

有什么方法可以使Flutter中的功能无法替代?

来自分类Dev

有什么方法可以使用我自己的验证功能来键入保护块/功能?

来自分类Dev

scp -i my.key“不是目录”错误-我可以使用什么替代方法?

来自分类Dev

有什么方法可以使AMD HD4250显卡在13.10中正常工作?矿山变慢直到无法使用

来自分类Dev

有什么方法可以使用flutter为tizen os创建应用程序吗?

来自分类Dev

有没有什么功能可以使MLR中的复杂学习者

来自分类Dev

有什么方法可以使用firebase的云功能从“ child_added”事件中的节点获取数据?

来自分类Dev

有什么方法可以指定QnA对(QnA Maker)中替代问题的顺序吗?

来自分类Dev

在熊猫中explode()的替代选项中,我们可以使用什么?

来自分类Dev

有什么替代方法可以使用直到redux-observable和RxJS

来自分类Dev

有什么方法可以使Python函数的功能更具可读性吗?

来自分类Dev

有什么方法可以使FullCalendar在事件到期或正在进行时触发功能?

来自分类Dev

scp -i my.key“不是目录”错误-我可以使用什么替代方法?

来自分类Dev

有什么方法可以使AMD HD4250显卡在13.10中正常工作?矿山变慢直到无法使用

来自分类Dev

有什么方法可以使用AVR指令集来完成ARM的“ STMIA”或“ LDMIA”功能吗?

来自分类Dev

有什么方法可以使流星项目的Brackets的Live Preview功能发挥作用?

来自分类Dev

有什么方法可以创建此处文档来替代bash中的某些变量,但不能替代其他变量?

来自分类Dev

有什么方法可以使用“另存为”功能将文件直接保存到ftp服务器?

来自分类Dev

为什么PyCharm无法自动完成turtle.mainloop()函数?如何知道可以使用模块中的哪个功能?

Related 相关文章

  1. 1

    有什么方法可以使有序列表中的数字加粗吗?

  2. 2

    有什么方法可以使用import someValue._在Scala中实现重写方法?

  3. 3

    无法扩展OnClickListener-有什么替代方法?

  4. 4

    有什么方法可以使此Haskell IO功能的版本更简洁?

  5. 5

    有什么方法可以在Clojure中具有真正的私有功能?

  6. 6

    ylim在R的plot()中如何确定?有什么可以替代的?

  7. 7

    有什么方法可以使用PhantomJSDriver在PhantomJS中设置用户代理?

  8. 8

    有什么方法可以获取模块中定义的功能列表?

  9. 9

    在Elixir中,有什么方法可以让模块列出其功能?

  10. 10

    有什么方法可以使用mongoose从mongodb的批量操作中获取修改的IDS?

  11. 11

    有什么方法可以使Flutter中的功能无法替代?

  12. 12

    有什么方法可以使用我自己的验证功能来键入保护块/功能?

  13. 13

    scp -i my.key“不是目录”错误-我可以使用什么替代方法?

  14. 14

    有什么方法可以使AMD HD4250显卡在13.10中正常工作?矿山变慢直到无法使用

  15. 15

    有什么方法可以使用flutter为tizen os创建应用程序吗?

  16. 16

    有没有什么功能可以使MLR中的复杂学习者

  17. 17

    有什么方法可以使用firebase的云功能从“ child_added”事件中的节点获取数据?

  18. 18

    有什么方法可以指定QnA对(QnA Maker)中替代问题的顺序吗?

  19. 19

    在熊猫中explode()的替代选项中,我们可以使用什么?

  20. 20

    有什么替代方法可以使用直到redux-observable和RxJS

  21. 21

    有什么方法可以使Python函数的功能更具可读性吗?

  22. 22

    有什么方法可以使FullCalendar在事件到期或正在进行时触发功能?

  23. 23

    scp -i my.key“不是目录”错误-我可以使用什么替代方法?

  24. 24

    有什么方法可以使AMD HD4250显卡在13.10中正常工作?矿山变慢直到无法使用

  25. 25

    有什么方法可以使用AVR指令集来完成ARM的“ STMIA”或“ LDMIA”功能吗?

  26. 26

    有什么方法可以使流星项目的Brackets的Live Preview功能发挥作用?

  27. 27

    有什么方法可以创建此处文档来替代bash中的某些变量,但不能替代其他变量?

  28. 28

    有什么方法可以使用“另存为”功能将文件直接保存到ftp服务器?

  29. 29

    为什么PyCharm无法自动完成turtle.mainloop()函数?如何知道可以使用模块中的哪个功能?

热门标签

归档