injector_x 1.0.0 copy "injector_x: ^1.0.0" to clipboard
injector_x: ^1.0.0 copied to clipboard

outdated

Dependence managment from Flutter.

InjectorX #

Dependence managment from Flutter

How to use #


abstract class IRepo {
  bool save(String param);
}

class Repo implements IRepo {
  @override
  bool save(String name) {
    print("Save a: $name");
    return true;
  }
}

abstract class IUsecase<Input, Output> {
  Output call(Input param);
}

class Usecase extends Inject<Usecase> implements IUsecase<String, bool> {
  Usecase() : super(needles: [Needle<IRepo>()]);
  late IRepo repo;

  @override
  bool call(String param) {
    if (param == "Michael") {
      return repo.save(param);
    } else {
      return false;
    }
  }

  @override
  void injector(InjectorX handler) {
    repo = handler.get();
  }
}

abstract class IViewModel {
  bool saveUserName(String name);
}

class ViewModel extends Inject<ViewModel> implements IViewModel {
  ViewModel() : super(needles: [Needle<IUsecase<String, bool>>()]);

  late IUsecase<String, bool> usecase;

  @override
  void injector(InjectorX handler) {
    usecase = handler.get();
  }

  @override
  bool saveUserName(String name) {
    return usecase(name);
  }
}

/*MOCKS*/
class UsecaseMock implements IUsecase<String, bool> {
  @override
  bool call(String param) {
    return true;
  }
}

void _registerDependencies() {
  InjectorXBind.add<IRepo>(() => Repo());
  InjectorXBind.add<IUsecase<String, bool>>(() => Usecase(), singleton: true);
  InjectorXBind.add<IViewModel>(() => ViewModel());
}

void main() {
  _registerDependencies();
   var repo = InjectorXBind.get<IRepo>();
   var usecase = InjectorXBind.get<IUsecase<String, bool>>();
   var viewModel = InjectorXBind.get<IViewModel>();
   
   //Example to inject mock
   var viewModel = ViewModel()
        .injectMocks([NeedleMock<IUsecase<String, bool>>(mock: UsecaseMock())]);
}

How to use with a flutter_triple #

abstract class IPresenterViewModel extends InjetorXTripleStore<Exception, int> {
  bool increment();
}

class PresenterViewModel
    extends InjectorViewModelTriple<PresenterViewModel, Exception, int>
    implements IPresenterViewModel {
  PresenterViewModel() : super(0);

  @override
  void injector(InjectorX handler) {}

  @override
  bool increment() {
    store.value = store.value + 1;
    return true;
  }

  @override
  NotifierStore<Exception, int> getStore() {
    return store;
  }
}

class PresenterViewModelMock
    extends InjectorViewModelTriple<PresenterViewModelMock, Exception, int>
    implements IPresenterViewModel {
  PresenterViewModelMock() : super(0);

  @override
  void injector(InjectorX handler) {}

  @override
  bool increment() {
    store.value = store.value + 2;
    return true;
  }

  @override
  NotifierStore<Exception, int> getStore() {
    return store;
  }
}

//_StatePresenterState() : super(needles: [Needle<IPresenterViewModel>()]);
class StatePresenter extends StatefulWidgetInject<StatePresenter> {
  StatePresenter() : super(needles: [Needle<IPresenterViewModel>()]);
  @override
  _StatePresenterState createState() => _StatePresenterState();
}

class _StatePresenterState extends State<StatePresenter> {
  late IPresenterViewModel viewModel;

  @override
  void initState() {
    super.initState();
    viewModel = widget.get();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        TripleBuilder(
          store: viewModel.getStore(),
          builder: (_, triple) {
            print("Counter: ${triple.state}");
            return Text("Counter: ${triple.state}");
          },
        ),
        ElevatedButton(onPressed: viewModel.increment, child: Text("Increment"))
      ],
    );
  }
}

void _registerDependencies() {
  InjectorXBind.add<IPresenterViewModel>(() => PresenterViewModel());
}
void main() {
  _registerDependencies();
   //Use this
   runApp(MaterialApp(home: StatePresenter()));
   
   //Or that
   //Example to inject mock
    var widget = StatePresenter().injectMocks(
        [NeedleMock<IPresenterViewModel>(mock: PresenterViewModelMock())]);
    runApp(MaterialApp(home: widget));
}
3
likes
0
pub points
53%
popularity

Publisher

unverified uploader

Dependence managment from Flutter.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter, flutter_triple

More

Packages that depend on injector_x