stark 4.0.0 copy "stark: ^4.0.0" to clipboard
stark: ^4.0.0 copied to clipboard

Stark - a pragmatic lightweight dependency injection framework for Dart

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:stark/stark.dart';

void main() => runApp(MyApp());

// API: here you could call http requests with Dio as example
class Api {
  Future<String> getText() async {
    await Future<dynamic>.delayed(const Duration(milliseconds: 500));
    return 'example Api async return';
  }
}

// Interface to your repository implementations
abstract class Repository {
  Future<String> getText();
}

// Implementation of Repository with Api as injected parameter
class MyRepository implements Repository {
  MyRepository(this._api);
  final Api _api;

  @override
  Future<String> getText() async {
    final apiResult = await _api.getText();
    return apiResult;
  }
}

// Implementation of presenter with injected repository
class Presenter  {
  Presenter(this._repository);

  final Repository _repository;

  Future<String> getText() async {
    final repositoryResult = await _repository.getText();
    return repositoryResult;
  }
}

class MyApp extends StatelessWidget {
  //Example of a StarkModule
  final module = {
    single((i) => Api()),
    single<Repository>((i) => MyRepository(i.get())),
    singleWithParams((i, p) => Presenter(i.get())),
  };

  @override
  Widget build(BuildContext context) {
    //Initializing Start
    Stark.init([module], logger: Logger(level: Level.DEBUG));

    //Normal material App
    return MaterialApp(
      title: 'Stark Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Stark Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<StatefulWidget> createState()  => _MyHomePageState();
}

class _MyHomePageState extends InjectableState<MyHomePage> {

  final presenter = Stark.get<Presenter>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: FutureBuilder<String>(
          // you could call presenter directly
          future: presenter.getText(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return Text(snapshot.data ?? '');
            }
            return const CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}
9
likes
130
pub points
65%
popularity

Publisher

verified publishersoftarch.dev

Stark - a pragmatic lightweight dependency injection framework for Dart

Repository (GitHub)
View/report issues

Documentation

API reference

License

Apache-2.0 (LICENSE)

Dependencies

flutter

More

Packages that depend on stark