如何在大型项目中使用 main.dart 来组织架构?

How to organise architecture using main.dart in huge projects?

我正准备在 Dart 中创建合适的架构。我在 flutter 中制作了关于 bloc、cubit、providers 等的教程。

如何组织好main.dart才能写得好?

即 我使用模型、存储库、服务、cubit、screens itd.,但是......一切都去 main.dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:pagination_app/data/repositories/post_repository.dart';
import 'package:pagination_app/presentation/post_screen.dart';

import 'bloc/posts/posts_cubit.dart';
import 'data/services/post_service.dart';

void main() {
  runApp(PaginationApp(repository: PostsRepository(PostsService()),));
}

class PaginationApp extends StatelessWidget {
  const PaginationApp({Key? key, required this.repository}) : super(key: key);

  final PostsRepository repository;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BlocProvider(
        create: (context) => PostsCubit(repository),
        child: PostsView(),
      ),
    );
  }
}

小项目我这样用就好了。你如何实现干净的代码,也许是某种全球供应商,我处理所有存储库然后启动到 main.dart? 你的主张是什么?

您可以通过多种方式实现它。其中之一就是您刚才提到的那个——在 main.dart 中注入 repositories/services。更好的是 - 为了不弄乱这个文件,你可以在一个单独的文件中创建某种 bootstrap 函数来包装你的应用程序并注入依赖项。这样,您还可以通过在一个地方保存和管理依赖项来保持 main.dart 干净。 Here 您可以找到此类 bootstrap 函数的示例。

另一种方法是使用依赖注入 (DI) 包或服务定位器,您可以在其中定义所有依赖项,以后可以通过应用程序访问这些依赖项。例如,当使用 get_it 时,您可以创建一个专用文件,通过在单个文件中注册所有应用依赖项来启动服务定位器。这样,您不需要以任何方式包装您的应用程序,因为服务定位器基本上是一个全局可访问的单例对象,允许您解决依赖关系。