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

Flutter widgets for yx_state.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:yx_state/yx_state.dart';
import 'package:yx_state_flutter/yx_state_flutter.dart';

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

class CounterStateManager extends StateManager<int> {
  CounterStateManager(super.state);

  void increment() => handle((emit) async {
        emit(state + 1);
      });
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(colorSchemeSeed: Colors.blue),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;

  const MyHomePage({super.key, required this.title});

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

class _MyHomePageState extends State<MyHomePage> {
  late final CounterStateManager _stateManager;

  @override
  void initState() {
    super.initState();
    _stateManager = CounterStateManager(0);
  }

  @override
  void dispose() {
    _stateManager.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text('You have pushed the button this many times:'),
            StateBuilder<int>(
              stateReadable: _stateManager,
              builder: (context, state, _) => Text(
                '$state',
                style: Theme.of(context).textTheme.headlineMedium,
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _stateManager.increment,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}