Flutter状态管理插件eazy_state的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter状态管理插件eazy_state的使用

简介

Eazy State Management 是一个轻量级且易于使用的状态管理解决方案,适用于 Flutter 应用。它旨在高效地管理和更新用户界面的状态,而无需复杂的状态管理工具带来的额外开销。

特性

  • EazyState: 用于管理单个状态值,并通过流的方式提供更新。
  • EazyBuilder: 当状态发生变化时,自动重建自身,利用了 StreamBuilder 的能力。
  • 极简API: 易于理解和集成到任何 Flutter 项目中。

安装

在你的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  eazy_state: ^0.1.1

然后运行 flutter pub get 来安装该包。

使用

EazyState

EazyState 是一个类,用于存储状态值并提供更新流。它允许你管理状态并在状态变化时通知监听者。

import 'package:eazy_state/eazy_state.dart';

final counterState = EazyState(0);

void incrementCounter() {
  counterState.value += 1;
}
EazyBuilder

EazyBuilder 是一个小部件,当 EazyState 的值发生变化时会重新构建自身。它监听 EazyState 的流,并根据当前状态值重建 UI。

import 'package:flutter/widgets.dart';
import 'package:eazy_state/eazy_state.dart';

class CounterWidget extends StatelessWidget {
  final EazyState<int> counterState;

  const CounterWidget({required this.counterState});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return EazyBuilder<int>(
      state: counterState,
      builder: (context, count) {
        return Text('$count');
      },
    );
  }
}

示例

示例 1: 在多个地方使用相同的状态

在这个例子中,我们将展示如何在不同的页面之间共享同一个状态。

final counterState = EazyState(10.0);

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text("Flutter Demo Home Page"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('You have pushed the button this many times:'),
            EazyBuilder(
              state: counterState,
              builder: (context, count) {
                return Text(
                  '$count',
                  style: Theme.of(context).textTheme.headlineMedium,
                );
              },
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (_) => const MyEazyPageSecond(),
                  ),
                );
              },
              child: const Text("Move"),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => counterState.value += 1,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}
示例 2: 在单个屏幕中使用状态

在这个例子中,我们将展示如何在一个单独的屏幕上使用状态。

class MyEazyPage extends StatefulWidget {
  const MyEazyPage({super.key});

  [@override](/user/override)
  State<MyEazyPage> createState() => _MyEazyPageState();
}

class _MyEazyPageState extends State<MyEazyPage> {
  final counterState = EazyState(10);

  [@override](/user/override)
  void dispose() {
    counterState.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('You have pushed the button this many times:'),
            EazyBuilder(
              state: counterState,
              builder: (context, count) {
                return Text(
                  '$count',
                  style: Theme.of(context).textTheme.headlineMedium,
                );
              },
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (_) => const MyEazyPageSecond(),
                  ),
                );
              },
              child: const Text('Move'),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => counterState.value += 1,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter状态管理插件eazy_state的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter状态管理插件eazy_state的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用eazy_state插件进行状态管理的代码案例。eazy_state是一个轻量级的状态管理库,它使得在Flutter应用中管理全局状态变得更加简单。

首先,你需要在你的pubspec.yaml文件中添加eazy_state依赖:

dependencies:
  flutter:
    sdk: flutter
  eazy_state: ^latest_version  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

1. 创建全局状态类

首先,我们需要创建一个全局状态类。这个类可以包含任何你需要在应用中共享的状态变量。

// global_state.dart
import 'package:eazy_state/eazy_state.dart';

class GlobalState extends EazyState {
  String message = "Hello, Eazy State!";

  void updateMessage(String newMessage) {
    message = newMessage;
    notifyListeners();  // 通知监听器状态已更改
  }
}

2. 初始化全局状态

接下来,我们需要在应用的入口文件(通常是main.dart)中初始化这个全局状态。

// main.dart
import 'package:flutter/material.dart';
import 'package:eazy_state/eazy_state.dart';
import 'global_state.dart';

void main() {
  // 初始化全局状态
  final globalState = GlobalState();
  
  // 使用EazyStateProvider包裹应用
  runApp(EazyStateProvider<GlobalState>(
    state: globalState,
    child: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Eazy State Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 在组件中使用全局状态

现在,我们可以在应用的任何组件中使用useEazyState钩子来访问和更新全局状态。

// my_home_page.dart
import 'package:flutter/material.dart';
import 'package:eazy_state/eazy_state.dart';
import 'global_state.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 使用useEazyState钩子获取全局状态
    final state = useEazyState<GlobalState>();

    return Scaffold(
      appBar: AppBar(
        title: Text('Eazy State Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              state.message,
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 更新全局状态
                state.updateMessage("Hello, Flutter!");
              },
              child: Text('Update Message'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

现在,你可以运行你的Flutter应用,你应该会看到一个按钮和一个文本。点击按钮时,文本会更新为新的消息。

以上就是一个完整的示例,展示了如何使用eazy_state插件在Flutter中进行状态管理。这个库使得状态管理变得简单且高效,非常适合中小规模的应用。

回到顶部