flutter riverpod 状态管理 计数案例

运行效果
官网
官网首页的用例代码
包引用
在这里插入图片描述

1 创建监听对象,继承自 StateNotifier,初始状态为0,提供加一 减一方法

class CounterNotifier extends StateNotifier<int> {
  CounterNotifier() : super(0);
  void increment() => state = state + 1;
  void decrement() => state = state - 1;
}

2 创建生产者常量对象,跟着官网写

final counterProvider = StateNotifierProvider.autoDispose<CounterNotifier, int>(
      (ref) => CounterNotifier(),
);

3 创建消费者组件,继承自ConsumerWidget组件,通过ConsumerWidget组件的watch和read方法获取或者更新状态
消费者组件代码
4 完整代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

void main() {
  runApp(
    const ProviderScope(
      child: MyApp(),
    ),
  );
}

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

class CounterNotifier extends StateNotifier<int> {
  CounterNotifier() : super(0);
  void increment() => state = state + 1;
  void decrement() => state = state - 1;
}

final counterProvider = StateNotifierProvider.autoDispose<CounterNotifier, int>(
      (ref) => CounterNotifier(),
);

class CounterPage extends ConsumerWidget {
  const CounterPage({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context,WidgetRef ref) {
    final counter = ref.watch(counterProvider);
    return Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text("$counter",style: Theme.of(context).textTheme.headline4)
            ],
          ),
        ),
        persistentFooterButtons:[
          FloatingActionButton(
            onPressed: () {
              ref.read(counterProvider.notifier).increment();
            },
            tooltip: 'Increment',
            child: const Icon(Icons.add),
          ),
          FloatingActionButton(
            onPressed: () {
              ref.read(counterProvider.notifier).decrement();
            },
            tooltip: 'decrement',
            child: const Icon(Icons.minimize),
          )
        ]
    );
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter状态管理是一个非常重要的主题,因为在移动应用程序中,管理状态是必不可少的。Flutter提供了多种状态管理库和方案,这里我们介绍三种常见的状态管理方案。 1. StatefulWidget StatefulWidget是Flutter最基本的状态管理方式之一,它通常用于管理小型或少量的状态。我们可以在StatefulWidget中定义自己的状态,然后在需要时使用setState()方法来更新状态。setState()方法会通知Flutter框架重新绘制UI,以反映新的状态。 优点:实现简单,适用于小型或少量的状态管理。 缺点:当状态较多时,代码复杂度会增加。 2. BLoC(Business Logic Component) BLoC是一种更高级的状态管理方式,它将UI组件、业务逻辑和状态分离开来。BLoC通过Stream和Sink来管理状态,通过StreamBuilder来监听状态变化并更新UI。BLoC的核心思想是单向数据流,即数据只能从Sink流入,通过Stream流出。 优点:代码结构清晰,易于维护和扩展。通过单向数据流,可以避免状态混乱和不一致性。 缺点:实现较为复杂,需要掌握Stream和Sink的使用。 3. Provider Provider是Flutter官方推荐的状态管理库,它是基于InheritedWidget和ChangeNotifier实现的。Provider提供了一种简单且灵活的方法来管理应用程序状态。它通过Provider.of()来访问状态,并通过ChangeNotifierProvider来监听状态变化并更新UI。 优点:实现简单,易于维护和扩展。通过Provider.of()可以轻松访问状态,而不必显式传递状态。 缺点:Provider在处理较复杂的状态管理时可能会出现性能问题。 总结: 以上是Flutter中三种常见的状态管理方式,每种方式都有其优缺点,根据实际情况选择合适的方式来管理状态。对于小型或少量的状态管理,可以使用StatefulWidget;对于复杂的状态管理,可以使用BLoC或Provider。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值