深入探索Flutter中的状态管理:使用Provider库
    		       		warning:
    		            这篇文章距离上次修改已过444天,其中的内容可能已经有所变动。
    		        
        		                
                
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
 
void main() {
  runApp(MyApp());
}
 
class MyApp extends StatelessWidget {
  // 此处省略其他代码...
 
  // 创建和使用Provider
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (_) => Counter()),
      ],
      child: MaterialApp(
        home: MyHomePage(),
      ),
    );
  }
}
 
// 定义一个简单的Model类,包含一个计数器
class Counter with ChangeNotifier {
  int _count = 0;
  int get count => _count;
 
  void increment() {
    _count++;
    notifyListeners(); // 通知监听者状态已更新
  }
}
 
class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Flutter Demo')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            // 使用Selector来避免不必要的重建
            Selector<Counter, int>(
              selector: (context, counter) => counter.count,
              builder: (context, count, child) {
                return Text(
                  '$count',
                  style: Theme.of(context).textTheme.headline4,
                );
              },
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => Provider.of<Counter>(context, listen: false).increment(),
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}这个代码示例展示了如何在Flutter应用中使用Provider库来管理状态。我们创建了一个简单的Counter类,并在应用的根Widget中使用ChangeNotifierProvider来提供这个类的实例。在MyHomePage中,我们使用Selector来避免不必要的重建,并且在floatingActionButton的onPressed回调中,我们通过Provider.of获取Counter实例并调用increment方法,从而触发状态更新。
评论已关闭