Flutter中使用Provider

这篇博客详细介绍了在Flutter应用中如何使用Provider库进行状态管理。通过创建ChangeNotifier类的子类User和Order,设置和获取数据,以及在Widget中监听数据变化并实时更新UI。博主还提醒在调用Provider.of时需要注意listen参数的设置,以避免运行时错误。

前言.相当于全局变量,只要一改数据,引用到的地方就会自动刷新UI。
1.导入provider: 5.0.0
2.写model类

class User extends ChangeNotifier{
  String _name;
  String _gender;
  User(this._name, this._gender);

  set setName(String value) {
    _name = value;
    notifyListeners();
  }

  String get gender => _gender;

  String get name => _name;

  // Provider.of<User>(context,listen: false).setGender="famale";
  set setGender(String value) {
    _gender = value;
    notifyListeners();
  }
  // Provider.of<User>(context,listen: false).setName2("famale");
  void setName2(String value){
    _name = value;
    notifyListeners();
    print('setName2 call');
  }

}
class Order extends ChangeNotifier{
  int _id;
  String _name;

  Order(this._id, this._name);

  String get name => _name;

  int get id => _id;

  set name(String value) {
    _name = value;
    NotificationListener();
  }

  set id(int value) {
    _id = value;
    NotificationListener();
  }
}

3.类似注册:
(1)单个对象

runApp(
    ChangeNotifierProvider<User>.value(
    child: MaterialApp(
      home: MyApp(),
    ),
      value: User('yuren','fame'),
    )
    );

(2)多个对象MultiProvider

  runApp(
      MultiProvider(
      providers: [
      //以下两种创建都可以,如果是同一个model类,则使用最近的,即使用 User('yagao','lala')
        //ChangeNotifierProvider(create: (_)=>User('SSG', '男')),
        ChangeNotifierProvider<User>.value(value: User('T1','男男')),
        ChangeNotifierProvider<User>.value(value: User('yagao','lala')),
        ChangeNotifierProvider(create: (_)=>Order(1,'alibaba'))
      ],
      child: MaterialApp(
        home: MyApp(),
      )
  )
  );

4.引用

Text("name:${Provider.of<User>(context).name},gender:${Provider.of<Order>(context).name}")

5.修改,结果就是引用的地方都刷新了。

        floatingActionButton: FloatingActionButton(
          onPressed: () {
            Provider.of<User>(context,listen: false).setName2("gunsitan");
            Provider.of<User>(context,listen: false).setGender="famale";
            Provider.of<Order>(context,listen: false).name ='order tencent';
          },
          child: Icon(Icons.add),
        ),

注意:这里的listen: false一定要带上,以前的不要,现在新的要,不然报错。

参考资源链接:[Flutter开发全面指南:从入门到精通](https://wenku.youkuaiyun.com/doc/3xg9ohw5c4?utm_source=wenku_answer2doc_content) 在Flutter开发中,状态管理是构建动态和交互式用户界面的核心部分。Provider作为一个广泛使用的状态管理解决方案,提供了简洁和高效的方式来管理应用状态。结合命名路由的导航则是实现应用内部页面跳转的有效方式。下面是具体的设计和实现步骤: 步骤一:安装Provider包 首先,需要在你的Flutter项目的pubspec.yaml文件中添加provider包的依赖: ```yaml dependencies: flutter: sdk: flutter provider: ^4.3.1+1 ``` 然后运行`flutter pub get`来安装依赖。 步骤二:创建数据模型 使用ChangeNotifier类来创建你想要管理的状态对象。例如,如果你要管理一个用户列表,可以创建一个UserListProvider类: ```dart import 'package:flutter/foundation.dart'; class UserListProvider extends ChangeNotifier { List<User> _userList = []; List<User> get userList => _userList; void addUser(User user) { _userList.add(user); notifyListeners(); } void deleteUser(User user) { _userList.remove(user); notifyListeners(); } } ``` 步骤三:在应用中提供Provider 在MaterialApp的builder属性中使用MultiProvider来提供UserListProvider: ```dart MaterialApp( home: MyHomePage(), builder: (context, child) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => UserListProvider()), ], child: child, ); }, ); ``` 步骤四:在UI中消费状态 通过Consumer或Provider.of()来获取和监听状态变化。例如,在一个ListView中显示用户列表: ```dart Consumer<UserListProvider>( builder: (context, provider, child) { return ListView.builder( itemCount: provider.userList.length, itemBuilder: (context, index) { return ListTile( title: Text(provider.userList[index].name), onTap: () {}, ); }, ); }, ); ``` 步骤五:使用命名路由进行导航 在MaterialApp的onGenerateRoute属性中定义命名路由,并创建对应的路由页面: ```dart MaterialApp( onGenerateRoute: (settings) { switch (settings.name) { case '/secondPage': return MaterialPageRoute(builder: (context) => SecondPage()); default: return MaterialPageRoute(builder: (context) => MyHomePage()); } }, ); ``` 步骤六:从一个页面导航到另一个页面 使用Navigator类来实现页面跳转。例如,从一个按钮点击事件中导航到新的页面: ```dart Navigator.pushNamed(context, '/secondPage'); ``` 通过以上步骤,你可以高效地管理Flutter应用中的状态,并通过命名路由实现页面之间的平滑导航。为了深入理解和应用这些概念,建议查看《Flutter开发全面指南:从入门到精通》。这份资源全面覆盖了Flutter开发的各个方面,不仅包括状态管理和导航路由的详细指南,还包括UI开发、数据存储、网络请求等其他重要的开发主题,是Flutter开发者不可或缺的学习资源。 参考资源链接:[Flutter开发全面指南:从入门到精通](https://wenku.youkuaiyun.com/doc/3xg9ohw5c4?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值