Flutter ChangeNotifier 的简介和代码演示

29 min read

Flutter中的ChangeNotifier是一个通用的状态管理工具,用于在Widget之间共享数据并触发UI更新。它是一个可观察的对象,当对象的状态发生变化时,会触发通知,使依赖该对象的Widget得知状态的变化并进行相应的更新。

以下是一个简单的代码演示,其中使用ChangeNotifier来管理计数器的状态并在UI中显示:

import 'package:flutter/material.dart';

class Counter with ChangeNotifier {
  int _count = 0;

  int get count => _count;

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

class HomePage extends StatelessWidget {
 
  @override
  Widget build(BuildContext context) {
    final counter = Provider.of<Counter>(context);
    return Scaffold(
      appBar: AppBar(
        title: Text('ChangeNotifier Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'Counter Value:',
            ),
            Text(
              '${counter.count}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => counter.increment(),
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => Counter(),
      child: MaterialApp(
        home: HomePage(),
      ),
    ),
  );
}

在这个示例中,我们创建了一个Counter类,该类扩展自ChangeNotifier,它有一个_calc属性来存储计数器的值,还有一个increment方法,可以增加计数器的值。每次计数器的值更新时,我们调用notifyListeners()方法来通知所有listeners。

在Flutter中,ChangeNotifier通常与Provider一起使用,可以通过Provider将ChangeNotifier注入整个应用程序,并在需要使用它的时候从多个Widget中进行访问。在上面的示例中,我们使用了provider包,并将Counter实例传递给ChangeNotifierProvider,在需要访问它的地方调用Provider.of(context)方法即可。

通过使用ChangeNotifier和Provider,您可以轻松地管理应用程序中的状态,并在需要更新UI的时候触发相应的操作。