【问题标题】:Pass SharedPreferences to List widget将 SharedPreferences 传递给 List 小部件
【发布时间】:2019-07-23 13:47:03
【问题描述】:

我正在尝试构建一个带有导航栏的颤振应用程序,我需要将一些变量传递给我的列表小部件。问题是 List 小部件是在我的变量初始化之前构建的,所以我不能使用它。

我已经尝试过使用“super.initState();”和类似的东西,但我得到的唯一东西(最好的结果)是一个空变量。

这是用于底部导航栏的列表小部件:


** Some code**

SharedPreferences prefs;

List<Widget> _widgetOptions = <Widget>[
    TabScreen(currentUserId: prefs.getString("id")),
    Text(
      'Index 1: Business',
    ),
    Text(
      'Index 2: School var',
    ),
    Scaffold(
      body: Center(
        child: Row(

        ),
      ),
    ),
  ];

使用此代码,我在“TabScreen(currentUserId: prefs.getString("id"))”行上有一条消息“只有 satic 成员可以在初始化程序中访问”,这是合乎逻辑的,因为我的列表在我可以访问之前被初始化“prefs”变量,但我无法解决问题。

感谢您的帮助:)

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您是否尝试在 didChangeDependencies 中构建它?大多数时候这对我有用。在那之前,我给小部件一个占位符容器。 (或出于花哨的原因使用 SpinKitDualRing)

    【讨论】:

    • 您的意思是将整个“列表”小部件放入 didChangeDependencies() 中?如果我将“列表”小部件放入 didChangeDependencies() 中,问题是我无法在“小部件构建”中访问“_widgetOptions”变量
    【解决方案2】:
    String id;
    
    Future<Null> getSharedPrefs() async           
    
    {
    
    SharedPreferences prefs = await  
          SharedPreferences. getInstance() ;
    
    id = prefs. getString("id" );
    
    }
    
    initState () {
    super. initState () ;
    id="" ;
    getSharedPrefs() ;
    }
    

    现在你可以在列表中使用这个 id..

    【讨论】:

    • 你的意思是这样吗? pastebin.com/zpj02WnE 如果是,我仍然会在列表中的“id”变量上看到“只有 satic 成员可以在初始化程序中访问”。谢谢
    • 然后尝试初始化Id为null..检查更新的答案
    • 感谢您的宝贵时间,但不幸的是,问题仍然存在
    • 然后,当你调用这个底部导航时,把这个id作为参数传递..
    【解决方案3】:
     String _id;
     SharedPreferences _sharedPreferences;
    
      @override
      void initState() {
        // TODO: implement initState
        super.initState();
        getSharedPrefs();
      }
    
      getSharedPrefs() async{
    
        _sharedPreferences = await SharedPreferences.getInstance();
        _id = _sharedPreferences.getString("id");
        setState(() {
    
        });
      }
    

    这可能对你有帮助

    【讨论】:

    • 你的意思是这样吗? pastebin.com/zpj02WnE 如果是,我仍然会在列表中的“id”变量上看到“只有 satic 成员可以在初始化程序中访问”。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2015-08-07
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多