扩展flutter应用程序的基类

时间:2018-05-12 01:00:46

标签: dart flutter

作为Dart的新手,我不知道如何扩展我的有状态小部件的类。这是我班上的一个样子

class HomeState extends State<Home>
{
} 

我想做的是让HomeState类从我的自定义类继承一些方法。这将是这样的

class CustomClass
{
   void DisplayBusyDialog()
   {
         ......
   }
}

我知道像Dart这样的Java你不能从多个类继承(不像C ++)。 我的问题是,HomeState继承CustomClass需要做些什么?我的自定义类是否需要从StatefulWidget继承,然后HomeState类扩展CustomClass?那么模板状态如何在我的自定义类中处理它?任何建议将不胜感激..

2 个答案:

答案 0 :(得分:6)

你想要的是mixin,它允许多个&#34;扩展&#34;。

class Bar {
  bar() {}
}

mixin Mixin {
  foo() {}
}

class Foo extends Bar with Mixin {
  hello() {
    foo();
    bar();
  }
}

如果你需要mixin来自基类的访问字段:

mixin Mixin on Bar {
  foo() {
    bar();
  }
}

答案 1 :(得分:0)

根据Dart编程语言,mixins具有扩展多个父类的解决方案。无论如何,如果您想遵循传统的面向对象的概念,则可以创建具有泛型类型的抽象类。

abstract class _BaseStatefulState<T extends StatefulWidget> extends State<T> {

  _BaseStatefulState() {
    // Parent constructor
  }

  void baseMethod() {
    // Parent method
  }
}

您的StatefulWidget应该从下面扩展,如下所示:

class _MainScreenState extends _BaseStatefulState<MainScreen> {}

StatefulWidget示例:

import 'package:flutter/material.dart';

class MainScreen extends StatefulWidget {
  @override
  _MainScreenState createState() => _MainScreenState();
}

class _MainScreenState extends _BaseStatefulState<MainScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(child: Text("Test")),
    );
  }
}

abstract class _BaseStatefulState<T extends StatefulWidget> extends State<T> {

  _BaseStatefulState() {
    // Parent constructor
  }

  void baseMethod() {
    // Parent method
  }
}

来源参考:
https://gist.github.com/aslamanver/e1360071f9caff009101eb190a38d4cb

Flutter mixin文档:
https://dart.dev/guides/language/language-tour#adding-features-to-a-class-mixins