为什么B类不能访问A类方法?我已经导入了类A并创建了它的一个实例.找不到方法().我还try 创建_astate的实例,但仍然没有成功.

类A扩展StatelessWidget{ @Override State createState()=>_astate(); }

CLASS_STATE扩展状态{

方法();

}

import 'package:myapp/A.dart'; class B{ A a = A(); a.方法(); //The method 'theMethod' isn't defined for the type 'A'. } '''

推荐答案

B不能访问类AtheMethod()方法的原因是因为theMethod()方法是在_AState类中定义的,这是一个私有类.

要解决这个问题,可以将theMethod()方法设置为公共方法,也可以在A类中创建一个getter方法来公开_AState类的theMethod()方法.

使theMethod()方法成为公共方法:

class A extends StatelessWidget{
  @override
  State createState() => _AState();

  void theMethod() {
    // ...
  }
}

A类中创建一个getter方法:

class A extends StatelessWidget{
  @override
  State createState() => _AState();

  _AState get state => _;

  void theMethod() {
    state.theMethod();
  }
}

一旦您使theMethod()方法成为公共方法或在A类中创建了一个getter方法,您将能够从类B访问theMethod()方法.

import 'package:myapp/A.dart';

class B{
  A a = A();

  void doSomething() {
    a.theMethod();
  }
}

现在,当您调用类B上的doSomething()方法时,它将调用类A上的theMethod()方法.

通常认为,从类外部访问类的私有成员是不好的做法.这是因为它可能 destruct 封装并使代码更难维护.如果需要访问类的私有成员,最好通过公共的getter或setter方法来实现.

Flutter相关问答推荐

类型flatter doctor get zsh:未找到命令:macO中flatter

Riverpod生成器和生成util类

文本未设置在集装箱摆动的中心

如何使用新的Riverpod语法将依赖传递给AsyncNotifier?

Flutter 布局-全屏幕容器

Flutter AppBar Animation反向调试

在Flutter 小部件测试中找不到框中的AssetImage装饰

如何将带有参数的函数传递给FIFTH中的自定义小部件

在 Flutter 中使用条件语句设置 ImageProvider Object 类型的背景图像

文本溢出文本框 - Flutter

Flutter url_launcher 插件抛出java.lang.IllegalArgumentException:接收器未注册:io.flutter.plugins.urllauncher.WebViewActivity

在 Flutter 中显示有关提供者通知的对话框

Flutter HLS .m3u8 视频无法实时播放

Flutter:制作自定义小部件的最佳做法是什么?

为什么 orientation == Orientation.portrait 总是正确的,尽管我的设备已经处于横向

Flutter 中的 Firebase 后台消息处理程序产生重复的隔离并运行应用程序两次

如何在 SingleChildScrollView 小部件中管理自定义小部件状态

gridview 的所有按钮都应该在Flutter 中适合其父容器

Flutter Firebase:如何判断返回值是否是特定对象

带图像封面的 ElevatedButton