redus_flutter 0.3.0 copy "redus_flutter: ^0.3.0" to clipboard
redus_flutter: ^0.3.0 copied to clipboard

Vue-like Component system for Flutter with reactive state, lifecycle hooks, and dependency injection.

Redus Flutter #

Vue-like Component system for Flutter with reactive state and lifecycle hooks.

Flutter

Features #

  • 🎯 Vue-like Components - Familiar setup/render pattern
  • πŸ”„ Lifecycle Hooks - onMounted, onUpdated, onUnmounted, etc.
  • ⚑ Reactive State - Built on redus reactivity system
  • πŸ’‰ Dependency Injection - Simple global service locator
  • 🧹 Auto Cleanup - Effect scopes tied to widget lifecycle

Installation #

dependencies:
  redus_flutter:
    path: ../redus_flutter  # or pub.flutter-io.cn when published

Quick Start #

import 'package:redus_flutter/redus_flutter.dart';

class CounterComponent extends Component {
  late final Ref<int> count;

  @override
  void setup() {
    count = ref(0);

    onMounted(() => print('Mounted!'));
    onUnmounted(() => print('Unmounted!'));

    // Set up reactive rebuilding
    watchEffect((_) {
      count.value;
      rebuild();
    });
  }

  @override
  Widget render(BuildContext context) {
    return ElevatedButton(
      onPressed: () => count.value++,
      child: Text('Count: ${count.value}'),
    );
  }
}

// Usage
CounterComponent()

Lifecycle Hooks #

Hook Flutter Equivalent Description
onBeforeMount Before first build Setup complete, before render
onMounted After first build Widget fully rendered
onBeforeUpdate didUpdateWidget Before rebuild
onUpdated After rebuild Rebuild complete
onBeforeUnmount dispose start Cleanup starting
onUnmounted After dispose Widget removed
onErrorCaptured Error boundary Catch render errors
onActivated Route visible Widget activated
onDeactivated Route hidden Widget deactivated

Dependency Injection #

// Register singleton
register<ApiService>(ApiService());

// Register factory (new instance each time)
registerFactory<Logger>(() => Logger());

// Get instance
final api = get<ApiService>();

// Check registration
if (isRegistered<ApiService>()) { ... }

// Remove registration
unregister<ApiService>();

Full Example #

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

void main() {
  // Setup DI
  register<ApiService>(ApiService());

  runApp(MaterialApp(home: TodoComponent()));
}

class TodoComponent extends Component {
  late final Ref<List<String>> todos;
  late final ApiService api;

  @override
  void setup() {
    todos = ref<List<String>>([]);
    api = get<ApiService>();

    onMounted(() async {
      todos.value = await api.fetchTodos();
    });

    // Rebuild when todos change
    watchEffect((_) {
      todos.value;
      rebuild();
    });
  }

  @override
  Widget render(BuildContext context) {
    return ListView(
      children: todos.value.map((t) => ListTile(title: Text(t))).toList(),
    );
  }
}

License #

MIT License

0
likes
0
points
474
downloads

Publisher

unverified uploader

Weekly Downloads

Vue-like Component system for Flutter with reactive state, lifecycle hooks, and dependency injection.

Homepage
Repository (GitHub)
View/report issues

Topics

#flutter #state-management #component #lifecycle #dependency-injection

License

unknown (license)

Dependencies

flutter, meta, redus

More

Packages that depend on redus_flutter