list - Flutter 如何在 ListView 中加载 Future 列表?
问题描述
嗨,我如何在 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';
推荐阅读
- jquery - 未捕获的 ReferenceError:在 mvc 中使用 bundleconfig 时未定义 jQuery
- python - 比较身份时,控制台会给出其他结果
- lambda - 与流一起使用的功能接口实现之间的区别
- javascript - 替换功能不会替换单词
- dita - 我可以将 Dita-OT 2.1 配置为仅输出 topic.fo 文件而不输出 pdf
- c++ - How can I put more than one character from an element of string array inside TEXT as it must ba a pointer to a character [ outtextxy(X , Y, TEXT) ]?
- c++ - How to calculate public key for TLS key exchange using OpenSSL functions?
- math - Order functions by growth
- swift - 切换 CIFilter 后停止调用 captureOutput
- php - Laravel relationships empty, wrong defined?