扩展flutter应用程序的基类

Mis*_*tyD 2 dart flutter

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

class HomeState extends State<Home>
{
} 
Run Code Online (Sandbox Code Playgroud)

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

class CustomClass
{
   void DisplayBusyDialog()
   {
         ......
   }
}
Run Code Online (Sandbox Code Playgroud)

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

Goo*_*ian 8

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

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

  _BaseStatefulState() {
    // Parent constructor
  }

  void baseMethod() {
    // Parent method
  }
}
Run Code Online (Sandbox Code Playgroud)

StatefulWidget应该从基础扩展,如下所示:

class _MainScreenState extends _BaseStatefulState<MainScreen> {}
Run Code Online (Sandbox Code Playgroud)

示例 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
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Rém*_*let 6

你想要的是mixin,它允许多个"扩展".

class Bar {
  bar() {}
}

mixin Mixin {
  foo() {}
}

class Foo extends Bar with Mixin {
  hello() {
    foo();
    bar();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

mixin Mixin on Bar {
  foo() {
    bar();
  }
}
Run Code Online (Sandbox Code Playgroud)