Flutter docs中的示例将它们正在使用的MethodChannel(与本机主机通信)声明为static const,直接在使用它的Widget中。为了实现一些分离,我正在尝试布局我的应用程序,以便MethodChannel

  • 驻留在BLoC甚至底层服务层中,而不是直接在Widget中,而
  • 相反,注入(inject)
  • 可以使所有内容易于进行单元测试。

  • 如果MethodChannel不是staticconst,是否会出现问题(与性能相关,引起错误等)?

    最佳答案

    按照惯例,定义它的MethodChannel实例是const,说实话,没有理由没有它。但是,尽管典型的实现在服务类中定义了通道,但不一定必须如此。您还可以在其他地方轻松定义它,然后通过依赖注入(inject)将其传递给您的服务类。

    DI初始化文件

    const platform = MethodChannel(...);
    
    void initDI() {
      GetIt.I.registerSingleton(platform, "MyMethodChannel");
    }
    

    服务文件

    class PlatformService {
      final MethodChannel platform;
    
      PlatformService()
        : platform = GetIt().I.get("MyMethodChannel");
    
      ...
    }
    

    08-07 13:46