如何在全球范围内使用 SharedPreference?

比比

我将 userProfileID 和 ,userstype 的值传递给 Profilepage() 如下所示,但是当我转到个人资料页面并尝试打印这两个变量的值时,我将获得 Null 值,我认为它们实际上不是从这个 _HomePageState 传递的,有人帮忙吗?

     Here is Where I pass the Value of both 
    userProfileID as a UserID and userstype as UserTypes inside initState() below, 
    and both  UserID and UserTypes are Obtained from SharedPrefrence
 (I call GetData to obtain the value of  UserID and UserTypes from SharedPreference )
        
          class _HomePageState extends State<HomePage> {
         
              String UserID;
              String UserTypes;
              List<Widget>_children;
              bool isSignedIn= false;
              int _CurrentIndex=0;
            
              void initState(){
            
                    super.initState();
                       GetData();
            
                _children=[
                  TimeLinePage(UsersIdTimeline:UserID,UsersTypeTimeline:UserTypes),
                  SearchPage(searchUserSID: UserID,searchUsertype:UserTypes), //search(),
                  UploadPage(uploadUserSID:UserID,uploadUsertype:   UserTypes),
                  NotificationsPage(NotifyUserSID: UserID,NotifyUsertype:UserTypes),
                  ProfilePage(userProfileID:UserID,userstype:UserTypes),
                ];
               
                  if(FirebaseAuth.instance.currentUser!=null){
                    setState(() {
                      isSignedIn= true;
                    });
                  }else{
                    setState(() {
                      isSignedIn= false;
                       });
                  }
              }
              @override
              Widget build(BuildContext context) {
              if(isSignedIn){
               return buildHomeScreen();
            
             } else{
               return buildSignedInScreen();
             }
              }
             void GetData()async {
                SharedPreferences preferences= await SharedPreferences.getInstance();
                setState(() {
                   UserID=preferences.get('UserId');
                 UserTypes=preferences.get('UserType');
            
                });
              }
        
        }

    here is buildHomeScreen
    
   class _HomePageState extends State<HomePage> {
  // ignore: non_constant_identifier_names
  String UserID;
  String UserTypes;
  List<Widget>_children;
  List<Widget>_agentchildren;
  bool isSignedIn= false;
  // ignore: non_constant_identifier_names
  int _CurrentIndex=0;
  int _agentCurrentIndex=0;

  void initState(){
  
        super.initState();
           GetData();

    _children=[
      TimeLinePage(UsersIdTimeline:UserID,UsersTypeTimeline:UserTypes),
      SearchPage(searchUserSID: UserID,searchUsertype:UserTypes), 
      UploadPage(uploadUserSID:UserID,uploadUsertype:UserTypes),
      NotificationsPage(NotifyUserSID: UserID,NotifyUsertype:UserTypes),
      ProfilePage(userProfileID:UserID,userstype:UserTypes),
    ];
  
      if(FirebaseAuth.instance.currentUser!=null){
        setState(() {
          isSignedIn= true;
        });
      }else{
        setState(() {
          isSignedIn= false;
           });
      }
  }
  @override
  Widget build(BuildContext context) {
  if(isSignedIn){
 if(UserTypes=='agent'){
   return buildagentScreen();

 } else if(UserTypes== 'Signupuser'||
     UserTypes==  'owner'||
     UserTypes==  'seller'
    ){
   return buildHomeScreen();
     }else{
   return buildSignedInScreen();
 }

  }
  }

这是我的 ProfilePage(),如果我尝试在此页面中获取两者的值 (String userstype; String userProfileID;),我将获得 Null 值,但我已经从上面的 _HomePageState() 中传递了它们的值

 class ProfilePage extends StatefulWidget {
            String userstype;
            String userProfileID;
           ProfilePage({this.userProfileID, this.userstype});
          @override
          _ProfilePageState createState() => _ProfilePageState();
        }
        class _ProfilePageState extends State<ProfilePage> {
          final String CurrentOnlineUserID=curentuser?.uid;
          bool loading =false;
          int countPost=0;
          String postOrientation="grid";
          List<Post> PostList=[];
          void initState(){
            getAllProfilePost();
          }
        
          @override
          Widget build(BuildContext context) {
        
            return Scaffold(
              backgroundColor: Colors.black,
                appBar:header(context,strTitle:"profile"),
                body:ListView(
                    children:<Widget>[
              TopView(),
                    ]
                ),
            );
          }
安库什·莫迪

为您的应用程序全局使用共享首选项。

导入“飞镖:异步”显示未来;导入 'package:shared_preferences/shared_preferences.dart';

class PreferenceUtils {
  static Future<SharedPreferences> get _instance async => _prefsInstance ??= await SharedPreferences.getInstance();
  static SharedPreferences _prefsInstance;

  // call this method from iniState() function of mainApp().
  static Future<SharedPreferences> init() async {
    _prefsInstance = await _instance;
    return _prefsInstance;
  }

  static String getString(String key, [String defValue]) {
    return _prefsInstance.getString(key) ?? defValue ?? "";
  }

  static Future<bool> setString(String key, String value) async {
    var prefs = await _instance;
    return prefs?.setString(key, value) ?? Future.value(false);
  }
}

请点击此链接https://stackoverflow.com/a/61046061/8218866

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法使用SharedPreference变量

$(this)如何在全球范围内可用

如何从SharedPreference文件android读取

如何在ondatachanged之外保存sharedpreference变量?

android如何使用SharedPreference编写秒表

如何使用 SharedPreference 为视图设置颜色?

在sharedpreference中同时使用apply()和commit()

如何在 SharedPreference 中使用 Chat 保存 ListView

如何在全球范围内正确拍摄屏幕截图?

如何在全球范围内通过npm安装?

Clojure:如何在全球范围内启用规范断言?

phaser.io如何在全球范围内使用国家独立资产

如何在颤振中加载存储在 SharedPreference 中的数据

如何使用kotlin将imageview保存到sharedpreference?

如何使用SharedPreference在Canvas上绘制字符串?

Android如何从SharedPreference设置EditTextPreference的默认值?

如何从SharedPreference读取ArrayList键和ArrayList值?

使用dart在SharedPreference中存储对象或地图列表

使用sharedPreference从多个活动传递和检索布尔值

使用 sharedPreference 通过两个活动传递数据

如何在范围内使用合并?

如何在Android中使用sharedpreference向ListView活动添加favourite_List活动

如何在全球范围内隐藏Quassel IRC中的联接/零件/退出?

如何在全球范围内安装Node软件包-正确的方法?

Angular2如何在全球范围内观看服务属性?

我如何在全球范围内构建微服务和 API?

如何在全球范围内添加“ @ testing-library / jest-dom”?

Python API速率限制-如何在全球范围内限制API调用

如何在全球范围内更改* nix邮件中的发件人地址?