【问题标题】:Flutter how to load Future list in a ListView?Flutter 如何在 ListView 中加载 Future 列表?
【发布时间】:2020-10-27 21:54:09
【问题描述】:

您好,我如何在 ListView 或 ListViebuilder 中加载此列表?

 Future<List<bool>> getBoolList() async{
  List<bool> prefList = [];
  var sharedPreferences = await SharedPreferences.getInstance();
  Set<String> keys = sharedPreferences.getKeys();

  for(int i=0; i<keys.length ; i++){
    bool value = sharedPreferences.getBool(keys.elementAt(i));
    prefList.add(value);
  }
  
  return prefList;
}

List<bool> list = await getBoolList();

我是如何到达那里的 Flutter SharedPreferences how to load all saved?

编辑:我最喜欢的.dart

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

// ignore: must_be_immutable
class Favoriten extends StatefulWidget {
  @override
  _FavoritenState createState() => _FavoritenState();
}

class _FavoritenState extends State<Favoriten> {



  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text('Favorites'),
      ),
      body: // MyList
    );
  }
}

【问题讨论】:

标签: list flutter


【解决方案1】:

您必须使用流生成器。它观察流。 (最好的实现方式是使用 bloc 模式)

class Favoriten extends StatefulWidget {
  @override
  _FavoritenState createState() => _FavoritenState();
}

class _FavoritenState extends State<Favoriten> {

  final _boolList = PublishSubject<List<bool>>();
  Observable<List<bool>> get boolList => _boolList.stream;

  loadList() async{
    List<bool> prefList = [];
    var sharedPreferences = await SharedPreferences.getInstance();
    Set<String> keys = sharedPreferences.getKeys();

    for(int i=0; i<keys.length ; i++){
      bool value = sharedPreferences.getBool(keys.elementAt(i));
      prefList.add(value);
    }

    _boolList.sink.add(prefList);
  }

  @override
  Widget build(BuildContext context) {
    loadList();
    return StreamBuilder(
          stream: boolList,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return root(snapshot.data);
            } else {
              return Container(
                child: YourLoader(),// display loader
              );
            }
          }
      );
  }

  Widget root(List<bool> list){
    return ListView.builder(
      itemBuilder: (context, index) {
         return Container(); // your design here
      }
      itemCount: list.length,
    );
  }
}

注意 :- 您必须在 pubspec.yaml 中添加 rxdart: ^0.22.0 插件 然后导入'package:rxdart/rxdart.dart';

【讨论】:

  • 我插入这个时有很多错误:(我如何将这个添加到我的页面?我将我的页面添加到我的问题中
  • 你还能帮我吗?
  • @Marcel 在你进入这一切之前,你需要了解一些基础知识。我会建议你阅读一些教程。
  • 谢谢,我现在正在学习,但是你还能帮我解决这个问题吗?
  • 在你的 _FavoritenState 类中添加上面的代码。将 StreamBuilder 包裹在 Scaffold 中。
猜你喜欢
  • 2018-11-16
  • 2021-02-05
  • 2018-05-26
  • 2018-09-05
  • 2018-01-21
  • 2020-08-01
  • 2021-03-19
  • 2019-08-28
相关资源
最近更新 更多