搜尋套件、儲存庫與 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 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。