Flutter状态管理插件am_state的使用

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

Flutter状态管理插件am_state的使用

示例代码

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

final intProvider = AmDataProvider<int>(
  initialData: 1,
  providerId: 'cNum',
);

final colorProvider = AmDataProvider<MaterialColor>(
  initialData: Colors.blue,
  providerId: 'primarySwatchColor',
);

void initializeProviders() {
  intProvider.initialize;
  colorProvider.initialize;
}

void main() {
  initializeProviders();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter State Management with am_state',
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  int number = 0;
  String title = 'Hello, World!';

  void increaseNumber() {
    setState(() {
      number++;
    });
  }

  void decreaseNumber() {
    setState(() {
      number--;
    });
  }

  void changeTitle() {
    setState(() {
      title += ' Hi;\n';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: increaseNumber,
              child: Text('Increase'),
            ),
            ElevatedButton(
              onPressed: decreaseNumber,
              child: Text('Decrease'),
            ),
            ElevatedButton(
              onPressed: changeTitle,
              child: Text('Change Title'),
            ),
            AmRefreshWidget<int>(
              amDataProvider: intProvider,
              builder: (context, value) {
                return Text('$value');
              },
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 初始化数据提供者

    final intProvider = AmDataProvider<int>(
      initialData: 0,
      providerId: 'cNum',
    );
    
    final colorProvider = AmDataProvider<MaterialColor>(
      initialData: Colors.blue,
      providerId: 'primarySwatchColor',
    );
    

    这里创建了两个数据提供者 intProvidercolorProvider,分别用于存储整数和颜色数据。

  2. 初始化数据提供者

    void initializeProviders() {
      intProvider.initialize;
      colorProvider.initialize;
    }
    

    初始化数据 提供者以确保它们在程序启动时被正确初始化。

  3. 主应用逻辑

    void main() {
      initializeProviders();
      runApp(MyApp());
    }
    

    main 函数中初始化数据提供者并运行应用。

  4. 应用页面实现

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'Flutter State Management with am_state',
          home: Home(),
        );
      }
    }
    

    创建一个简单的的应用页面 MyApp,其中包含主页 Home

  5. 主页实现

    class Home extends StatefulWidget {
      const Home({Key? key}) : super(key: key);
    
      @override
      _HomeState createState() => _HomeState();
    }
    
    class _HomeState extends State<Home> {
      int number = 0;
      String title = 'Hello, World!';
    
      void increaseNumber() {
        setState(() {
          number++;
        });
      }
    
      void decreaseNumber() {
        setState(() {
          number--;
        });
      }
    
      void changeTitle() {
        setState(() {
          title += ' Hi;\n';
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                ElevatedButton(
                  onPressed: increaseNumber,
                  child: Text('Increase'),
                ),
                ElevatedButton(
                  onPressed: decreaseNumber,
                  child: Text('Decrease'),
                ),
                ElevatedButton(
                  onPressed: changeTitle,
                  child: Text('Change Title'),
                ),
                AmRefreshWidget<int>(
                  amDataProvider: intProvider,
                  builder: (context, value) {
                    return Text('$value');
                  },
                ),
              ],
            ),
          ),
        );
      }
    }
    

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用am_state状态管理插件的示例代码。am_state是一个轻量级的状态管理库,它允许你在Flutter应用中更轻松地管理应用状态。

首先,确保你的pubspec.yaml文件中已经添加了am_state依赖:

dependencies:
  flutter:
    sdk: flutter
  am_state: ^最新版本号 # 替换为实际发布的最新版本号

然后运行flutter pub get来获取依赖。

接下来,我们创建一个简单的示例,展示如何使用am_state进行状态管理。

1. 创建State Store

首先,我们创建一个状态存储类,用于管理我们的应用状态。

import 'package:am_state/am_state.dart';

class CounterState extends StateNotifier<int> {
  CounterState() : super(0);

  void increment() {
    state++;
  }
}

2. 创建Flutter Widget

然后,我们创建一个Flutter widget来使用这个状态存储。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:am_state/am_state.dart';
import 'counter_state.dart'; // 假设你把上面的CounterState类放在这个文件里

void main() {
  runApp(
    MultiProvider(
      providers: [
        StateNotifierProvider<CounterState>(
          create: (_) => CounterState(),
        ),
      ],
      child: MyApp(),
    ),
  );
}

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final counterState = context.watch<CounterState>();

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${counterState.state}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          context.read<CounterState>().increment();
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

3. 运行应用

确保所有文件保存后,运行你的Flutter应用。你应该会看到一个简单的计数器应用,当你点击浮动按钮时,计数器会增加。

解释

  1. 创建StateStore: 我们创建了一个CounterState类,它继承自StateNotifier<int>。这个类包含一个increment方法,用于增加状态值。

  2. 使用StateNotifierProvider: 在main函数中,我们使用MultiProviderStateNotifierProvider来提供CounterState实例。这使得我们可以在应用的任何地方访问这个状态。

  3. 消费状态: 在MyHomePage中,我们使用context.watch<CounterState>()来监听状态的变化,并使用context.read<CounterState>().increment()来更新状态。

这个示例展示了如何使用am_state进行基本的状态管理。你可以根据需要扩展这个示例,以适应更复杂的状态管理需求。

回到顶部