美文网首页
Flutter 状态管理Provider(理解成全局变量)

Flutter 状态管理Provider(理解成全局变量)

作者: 禄子_c79b | 来源:发表于2022-04-28 11:14 被阅读0次

    前言.相当于全局变量,只要一改数据,引用到的地方就会自动刷新UI改变其值

    1.引入 provider: ^6.0.2
    2.写model类 UserProvider

    import 'package:flutter/cupertino.dart';
    
    class UserProvider extends ChangeNotifier {
      String _name;
      String _gender;
    
      UserProvider(this._name, this._gender);
    
      set setName(String value) {
        _name = value;
        notifyListeners();
      }
    
      String get gender => _gender;
    
      String get name => _name;
    
      // Provider.of<UserProvider>(context,listen: false).setGender="famale";
      set setGender(String value) {
        _gender = value;
        notifyListeners();
      }
    
      // Provider.of<UserProvider>(context,listen: false).setName2("famale");
      void setName2(String value) {
        _name = value;
        notifyListeners();
        print('setName2 call');
      }
    }
    
    

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

    class routeIntent extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          routes: <String, WidgetBuilder>{//所有的入口
            // "login": (context) => FromPage(),
            "login": (context) => MyApp1(),
          },
          // home: MyHomePage(title: "routeIntent"),
        );
      }
    }
    
    void main() {
      runApp(ChangeNotifierProvider<UserProvider>.value(
        child: routeIntent(),
        value: UserProvider('yuren', 'fame'),
      ));
    }
    

    (2)多个对象MultiProvider

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

    4.调用

    Text("name:${Provider.of<UserProvider>(context).name}}")
    

    5.修改,结果就是所有引用的地方都刷新了
    注意:这里的listen: false一定要带上,以前的不要,现在新的要,不然报错

            floatingActionButton: FloatingActionButton(
              onPressed: () {
                Provider.of<UserProvider>(context,listen: false).setName2("gunsitan");
              },
              child: Icon(Icons.add),
            ),
    

    相关文章

      网友评论

          本文标题:Flutter 状态管理Provider(理解成全局变量)

          本文链接:https://www.haomeiwen.com/subject/honryrtx.html