簡體   English   中英

只有在重新啟動應用程序后才會加載未來構建器中的數據

[英]Data in future builder is loaded only after restart of app

我從提供程序的列表中獲取數據。 當應用程序打開從 SharedPreferences 添加到那里的數據時,或者如果它是第一次打開,第一個數據來自服務器,然后保存到共享首選項,無論如何它都會從那里添加到此列表中。 問題是只有在重新啟動應用程序后才會在屏幕上顯示數據,而不會在第一次啟動時出現。

Future<void> fetchAndSet() async {
    pref = await SharedPreferences.getInstance();
    pref.containsKey('users') == true ? getPreferences() : setPreferences();
    return _users;
  }

  setPreferences() async {
    ApiManager()
        .fetch()
        .then((value) => pref.setString('users', value))
        .then((value) => getPreferences());
  }

  Future getPreferences() async {
    var jsonMap = json.decode(pref.getString('users'));
    var isThere = false;
    for (var el in jsonMap) {
      var newEl = User.fromJson(el);
      for (var user in _users) {
        if (user.id == newEl.id) {
          isThere = true;
        }
      }
      if (!isThere) {
        _users.add(newEl);
      }
    }
  }
     body: FutureBuilder(
        future:
            Provider.of<UsersData>(this.context, listen: true).fetchAndSet(),
        builder: (context, snapshot) => snapshot.connectionState !=
                ConnectionState.done
            ? Center(child: CircularProgressIndicator())
            : ListView.builder(
                itemCount: Provider.of<UsersData>(this.context, listen: true)
                    .users
                    .length,
                itemBuilder: (context, index) {
                  return GestureDetector(
                    onTap: () => Navigator.of(context).push(MaterialPageRoute(
                        builder: (context) => DetailsScreen(
                            Provider.of<UsersData>(this.context, listen: true)
                                .users[index]
                                .id))),
                    child: Container(

您是否在這段代碼中測試過將listen更改為false 我認為它應該是false而不是true ,然后更改這一行:

Provider.of<UsersData>(this.context, listen: true).fetchAndSet(),

Provider.of<UsersData>(this.context, listen: false).fetchAndSet(),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM