繁体   English   中英

Flutter 如何在 ListView 中加载 Future 列表?

[英]Flutter how to load Future list in a ListView?

嗨,我如何在 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 如何加载所有保存的?

编辑:我最喜欢的.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
    );
  }
}

您必须使用流构建器。 它观察流。 (最好的实现方式是使用 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';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM