带参数的 Dart Singleton(全局应用记录器)

Posted

技术标签:

【中文标题】带参数的 Dart Singleton(全局应用记录器)【英文标题】:Dart Singleton with parameters (global app logger) 【发布时间】:2022-01-05 18:12:36 【问题描述】:

我想在我的应用程序中使用 Logger 库。我只想将它实例化一次,以便在我的应用程序中具有一致的格式,而不是在我使用它的每个文件中传递 PrettyPrinter。这样做的正确方法是什么?我应该只使用全局常量吗?有没有办法使用单例来做到这一点?

【问题讨论】:

【参考方案1】:

我定义了一个辅助函数来获取 Logger:

import 'package:logger/logger.dart';
import 'log_printer.dart';

Logger getLogger(String className) 
  return Logger(printer: SimpleLogPrinter(className));

然后在我想要记录 eaxmple 的每个类中:

class ProfileService with ChangeNotifier 
  static final _log = getLogger('ProfileService');

  Future<Profile> updateProfile(Profile profile) async 
    _log.v('updateProfile');
    ...
  
  ...

另一个例子:

class AuthScreen extends StatelessWidget 
  final log = getLogger('AuthScreen');

  @override
  Widget build(BuildContext context) 
    log.v('build called');
    ...
  
  ...

【讨论】:

以上是关于带参数的 Dart Singleton(全局应用记录器)的主要内容,如果未能解决你的问题,请参考以下文章

C#TS和Dart对比3:编译时常量和运行时常量

Java设计模式:Singleton(单例)模式

全局结果集,带参数的结果集和动态结果集(struts2)

微信小程序实现wxml视图向js传递参数的方法(点击view带参数进入js)

[翻译] 单例(Singleton)

Singleton单例模式