搜索插件、代码仓与 APP 分类

插件详情v0.14.2

koin

一个实用的轻量级依赖注入框架,适用于 Dart 项目。

近 30 天下载
52
喜欢数
59
Pub 分数
40

安装插件

flutter pub add koin

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Koin 是一个轻量级、实用的 Dart 项目依赖注入(DI)框架,旨在简化应用程序中依赖项的管理。它提供了一种简洁明了的语法来定义和注入依赖项,促进模块化和可测试性。Koin 支持函数式和基于类的组件,使开发者能够轻松管理单例、工厂和作用域实例。通过极少的样板代码,它能无缝集成到 Flutter 和其他 Dart 应用程序中,非常适合构建可扩展且易于维护的代码库。

适合场景

  • 管理应用范围内的依赖项
  • 使用模拟依赖项进行测试
  • 模块化大型应用程序
  • 简化服务实例化
  • 支持不同的环境(开发、生产)
  • 实现关注点的清晰分离

主要特点

  • 最小化样板代码
  • 功能型和类定义
  • 单例、工厂和作用域绑定
  • 通过依赖替换实现轻松测试
  • 内置的惰性初始化支持
  • 轻量且快速的运行时

适合对象

  • 寻求简单依赖注入的Flutter开发者
  • 需要模块化架构的项目
  • 注重可测试性的团队
  • 具有复杂依赖关系图的应用程序
  • 希望使用轻量级替代方案来取代大型依赖注入框架的开发者

使用建议

  • 与其他成熟框架相比,文档有限
  • 较小的社区规模
  • 无内置状态管理
  • 未经定制,不适用于非常大型的企业级应用
  • 要充分发挥其功能,需要理解依赖注入(DI)的概念

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Koin.dart

Koin.dart

build codecov Star on Github style: effective dart


An pragmatic and flexible lightweight dependency injection library. This is a port of Koin for Dart projects.

Written in pure Dart, using functional resolution only: no code generation, no reflection.

Package Pub
koin pub package
koin_test pub package
koin_flutter pub package
koin_bloc pub package
koin_devtools pub package

Why should I use Koin?

  • Allows to dispose your objects at the moment that you are no longer using them.

  • It does not depend on the Flutter.

    • The core does not depend on Flutter, so it is possible to use it with any Dart application.
  • Define in which scope a variable can be accessed.

    • The koin scope allows you to define in which part of the widget tree a variable will be accessible
  • Integration by default for Bloc library, but it can be easily used with any state management.

  • Koin DevTools to inspect the state of your objects.

    • Inspect the internal state of each object at any time on a Flutter page.
  • Dependencies are instances only when needed.

    • Its class is instant when used for the first time.
    • Koin has a implementation of Lazy by Kotlin to enhance this functionality.
  • It is not invasive.

    • Insert Koin in your project without changing the structure of your widgets.
  • Facilitates dependency injection by constructor

    • Using dependency injection by constructor you decrease the coupling and make the test easier.
    • Makes it easy to know the dependencies of your components. Just look at your class's constructor to identify how dependencies it uses.

Features

  • Modules
  • Scopes
  • Singleton provider(definition)
  • Factory provider(definition)
  • Scoped provider(definition)
  • Support to multiple bindings
  • Support to named provider(definition)
  • Easy testing
  • Lazy inject
  • Logging
  • Support to parameter injection
  • Integration by default for Bloc library
  • DevTools for state inspection

What Koin.dart is not?

It is not a state manager. Koin does not have any type of state management, use koin with any state manager.

Table Of Contents

Roadmap

  • Improve documentation
  • Add more examples
    • Example of use with Redux, Mobx and RxDart.
    • Example with HTTP server frameworks.
  • Create an external DevTools
  • Add logger plugin for logger

Quick Start

Basic Setup
Dart
dependencies:
  koin: ^[version]
Flutter
dependencies:
  koin: ^[version]
  koin_flutter: ^[version]
Declare a Koin module
// Given some classes 
class Bloc {
  final Repository service;

  Bloc(this.service);

  get state => "Hello";
}

class Repository {}

// just declare your providers(definitions)
final myModule = Module()
  // Declare a single provider(definition) for Bloc class
  ..single((s) => Bloc(s.get()))
  // Declare a single provider(definition) for Repository class
  ..single((s) => Repository());
Starting Koin

Use the startKoin() function to start Koin in your application.

In a Dart app:

void main(List<String> args) {
    startKoin((app){
      app.module(myModule);
    });
  }

In an Flutter app:

void main() {
  startKoin((app) {
    app.module(homeModule);
  });
  runApp(MyApp());
}
Injecting dependencies
class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    // Get a dependency
    final bloc = get<Bloc>();
    return Container(
      child: Text("${bloc.state()}"),
    );
  }
}

Setup

Dart
dependencies:
koin: ^[version]
# Koin for Unit tests
dev_dependencies:
koin_test: ^[version]
Flutter
dependencies:
  koin: ^[version]
  koin_flutter: ^[version]

# Koin for Unit tests
dev_dependencies:
  koin_test: ^[version]
Flutter + Bloc
dependencies:
  koin: ^[version]
  koin_flutter: ^[version]
  koin_bloc: ^[version]

# Koin for Unit tests
dev_dependencies:
  koin_test: ^[version]

Examples

Basic

An simple example in Flutter. Code: Repository

Counter

A more elaborate example using Bloc library as a state management. Code: Repository

Real World

A application to demonstrate the Koin in a real world application.

Features
  • Log in
  • Sign up
  • Loggout
  • Password reset

Code: Repository

DevTools

Koin DevTools allows you to inspect the internal state of the objects created by the providers(definitions).

Usage

Just insert the KoinDevTools Widget somewhere in your application or use showDevTools.

class Page extends StatefulWidget {
  @override
  _PageState createState() => _PageState();
}

class _PageState extends State<Page> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
     /// Just insert the KoinDevTools
      endDrawer: KoinDevTools(),
      body: IconButton(icon: Text('Shod DevTools'), onPressed: () {
        // Or use this
        showDevTools(context);
      },),
    );
  }
}

Ask a Question?

Reporting issues

Found a bug on a specific feature? Open an issue on Github issues

Contribute

Want to help or share a proposal about Koin? problem on a specific feature?

  • Open an issue to explain the issue you want to solve Open an issue
  • After discussion to validate your ideas, you can open a PR or even a draft PR if the contribution is a big one Current PRs

Maintainers

Credits

Dependencies

所属分类

依赖

依赖清单 2 项

源码仓库

使用此插件的项目

暂无相关数据。