在 Flutter 中使用 getX 和单例服务

问题描述 投票:0回答:2

在 Flutter 中使用 getX,假设我需要为不同的控制器使用相同的服务。

例如,UsersController 和 ProductsController 使用相同的数据库服务。

这样做的最佳实践是什么?

  • 创建单例数据库服务?
  • 将 getIt 与数据库服务一起使用?
  • 还有其他 getX 技巧吗?
  • GetxService?
flutter flutter-getx
2个回答
6
投票

用下面的方法创建和使用单例对象会更准确。

Get.put<LoginService>(LoginService(), permanent: true);

Get.find<LoginService>();

GetX 有关

Get.put

的文档

您想要保存的类,例如控制器或其他东西

//注:“S”表示可以是任何类型的类


0
投票

创建两个服务,使它们成为单例,并将它们注入到尊重控制器的构造函数中。

class UserService {

  static UserService? _instance; //singleton
  UserService._();
  factory UserService()  => _instance ??= UserService._();

  //methods 
}

定义控制器:

class UserController extends GetxController {

  final UserService userService;

  UserController({required this.userService});

  //methods

}

注入控制器:

Get.put(UserController(UserService()), permanent: true);

对所有其他服务和控制器重复此操作。

为什么?

  • 因为 SOLID 中的 S - 单一职责原则:您不应该有一个同时服务于用户和产品域的类。
  • 因为 SOLID 中的 D - 依赖注入原则:你的控制器和服务应该相互解耦。这意味着您应该能够在不触摸控制器的情况下用另一个服务替换您的服务。
© www.soinside.com 2019 - 2024. All rights reserved.