繁体   English   中英

可注入的性能,get_it Flutter

[英]Performance with injectable, get_it Flutter

我有个问题。 在我的项目中,我有一些单例类。

  • DioMethod (一些 api 配置),
  • 存储库(连接ApiProvider和 Bloc 类),
  • ApiProvider (调用 api => 获取数据 => 传递给Repository ),
  • 一些 BloC 类,例如MoviesBlocMovieDetailBloc ……我为每个 Screen 创建了一个 BLoC 类

并在$initGetIt初始化所有内容相同。

_i1.GetIt $initGetIt(_i1.GetIt get,
    {String? environment, _i2.EnvironmentFilter? environmentFilter}) {
  final gh = _i2.GetItHelper(get, environment, environmentFilter);
  gh.singleton<_i3.DioConfig>(_i3.DioConfig());
  gh.singleton<_i4.DioMethod>(_i4.DioMethod(get<_i3.DioConfig>()));
  gh.singleton<_i5.MovieApiProvider>(
      _i5.MovieApiProvider(get<_i4.DioMethod>()));
  gh.singleton<_i6.Repository>(_i6.Repository());
  gh.lazySingleton<_i7.MovieDetailBloc>(
      () => _i7.MovieDetailBloc(get<_i6.Repository>()),
      dispose: (i) => i.dispose());
  gh.lazySingleton<_i8.MoviesBloc>(() => _i8.MoviesBloc(get<_i6.Repository>()),
      dispose: (i) => i.dispose());
  return get;
}

我想如果我扩展我的项目,我会遇到一些问题。

  1. 这个函数会太大,我们有太多的单例仍然存在于应用程序中。
  2. 我们在打开应用程序时需要初始化很多对象 => 可以延迟应用程序吗?
  3. 如何创建仅在访问屏幕时活着并在弹出此屏幕后销毁的单身人士。

谢谢你的回答!

这个函数会太大,我们有太多的单例仍然存在于应用程序中。

我有数百个GetIt单身人士,我没有看到任何问题。

我们在打开应用程序时需要初始化很多对象 => 可以延迟应用程序吗?

如果您担心Object的数量 - 不必担心。 当 Flutter 构建一帧(你知道,它每秒构建 60 帧)时,它会创建一个巨大的小部件树,其中包含数千个小部件,每个小部件包含数十个对象。 所以几百个对象真的是一个很小的数目 Dart 的垃圾收集器专为多对象情况而设计。

如何创建仅在访问屏幕时活着并在弹出此屏幕后销毁的单身人士。

class MyPageOne extends StatefulWidget {
  const MyPageOne({Key? key}) : super(key: key);

  @override
  _MyPageOneState createState() => _MyPageOneState();
}

class _MyPageOneState extends State<MyPageOne> {
  @override
  void initState() {
    super.initState();
    GetIt.I.registerSingleton<MyClass>(MyClass());
  }
  
  @override
  void dispose() {
    GetIt.I.unregister<MyClass>();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return ...your page...;
  }
}

这只是一个示例,例如,您可以将其封装到一个小部件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM