Flutter Provider

一、引入

provider: 6.0.0

二、创建

import 'package:flutter/cupertino.dart';

class MyProvider with ChangeNotifier {
  int _count = 0;

  void add() {
    _count++;
    notifyListeners();
  }

  get count => _count;

  void reduce() {
    _count--;
    notifyListeners();
  }
}
import 'package:provider/provider.dart';
void main() {
  runApp(ChangeNotifierProvider(
    create: (context) => MyProvider(),
    child: MyApp(),
  ));
}

三、读取

// 方式1
Provider.of<MyProvider>(context).count}
// 方式2
context.watch<MyProvider>().count
//方式3
context.read<MyProvider>().count
实际上都是调用的Provider.of方法;

四、改变

// 方式一、 如果遇到需要传值使用方式一。
ElevatedButton(
    onPressed: () {
          _reduceCount();
        },
    child: Text("减少")),

void _reduceCount() {
  // 改变
  context.read<MyProvider>().reduce();
}
// 方式二、
ElevatedButton(
    onPressed: Provider.of<MyProvider>(context).add,
    child: Text("增加")),

五、MultiProvider

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

六、注意事项

  一、在数据放生改变之后一定要调用**notifyListeners();**
二、不要在initState方法中监听,因为initState只调用一次。
  @override
  void initState() {
    super.initState();
    // Provider.of<MyProvider>(context).count;  不能这么使用
    print(Provider.of<MyProvider>(context, listen: false).count); // 只初始化打印一次
  }
三、在你使用的页面中一定要在某处监听,否则页面更新不及时
  // 最好在 didChangeDependencies中加入监听,因为didChangeDependencies可以调用多次;
  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    Provider.of<MyProvider>(context);
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容