在小部件类 Flutter 中实现基类

Posted

技术标签:

【中文标题】在小部件类 Flutter 中实现基类【英文标题】:Implement a base class in widget class Flutter 【发布时间】:2021-07-31 15:39:51 【问题描述】:

我希望从基类实现的小部件类强制它们实现特定方法。

基类:

class Test 
  bool check() 
    return false;
   
 

那么其他小部件应该实现Test,无论它们是有状态的还是无状态的。

class TestWidget1 extends StatelessWidget implements Test
  @override
  Widget build(BuildContext context) 
    ...
  

 @override
 bool check(bool checkAnswer) 
    return true;
 

所以我可以使用下面示例中的小部件,并确保它们都实现了check 方法:

Test test1 = TestWidget1();
final bool result = test1.check();

但是有状态的小部件呢?我需要在有状态小部件的小部件类中实现Test 类,以便我可以访问小部件类之外的check 方法。但我无权访问状态变量:

class TestWidget2 extends StatefulWidget implements Test 
  @override
  _TestWidget2State createState() => _TestWidget2State();

  @override
  bool check(bool checkAnswer) 
    // TODO: implement check
  


class _TestWidget2State extends State<TestWidget2> 
  @override
  Widget build(BuildContext context) 
    return Container();
  

如果我在_TestWidget2State 中实现Test,则Test 不再是TestWidget2 小部件的父级。

我该如何解决这个问题?有没有更好的解决方案来通过一个小部件来实现一个类而不考虑它的类型(有状态/无状态)?

【问题讨论】:

【参考方案1】:

创建一个单独的类而不是创建一个小部件。

class SampleClass implements Test 

 @override
 bool check(bool checkAnswer) 
    return true;
 


呼叫...

Test sample = SampleClass();
final bool result = sample.check();

【讨论】:

谢谢。我知道如何在一个简单的类中实现 Test 类,但我需要使用小部件,因为有一个 ui 并且 check 方法检查用户在 textField 中的输入。然后父小部件调用每个子检查方法以了解它们的结果。 @RShpd:您必须将您的逻辑移至示例类,并根据该返回结果,如果需要,创建更多方法。希望对您有所帮助。 对不起,答案并没有帮助我解决问题。

以上是关于在小部件类 Flutter 中实现基类的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:在小部件测试中测试异常

Flutter 状态管理(BloC):无状态与有状态小部件

Flutter - 如何在小部件测试中选择 DropdownButton 项

Flutter:检测任何在屏幕上不可见但在小部件树中的小部件的重建

Flutter BLoC 库:将 TextEditingController 对象保存在哪里:在 State、BLoC / Cubit 类中还是在小部件中?

通过 addPostFrameCallback 访问 Flutter Provider 时说小部件在小部件树之外,但颤振检查器显示其他情况