我有一个开关。默认情况下,开关值为true。当切换值更改时,我需要重新运行我的未来并获取新数据。但现在它没有重新运行。
这是我的方法
Future<List<RequirementModel>> getRequirement(bool check)async{
if(check){
await CacheData().getUID().then((uid) {
db.getServiceSubCategories(uid).listen((serviceSub) {
db.getRequirements().listen((requirement) {
...
setState(() {
model.add(requirement[i]);
});
...
});
});
});
}else{
await CacheData().getUID().then((uid) {
db.getRequirements().listen((requirement) {
...
setState(() {
model.add(requirement[i]);
});
...
});
});
}
return model;
}
我在didChangeDependencies中添加了未来 未来> _未来;
@override
void didChangeDependencies() {
super.didChangeDependencies();
if(check){
_future = getRequirement(check);
}else{
_future = getRequirement(check);
}
}
FutureBuilder窗口小部件
FutureBuilder<List<RequirementModel>>(
future: _future,
builder: (context, snapshot) {
if(snapshot.hasData){
return ListView.builder(...
);
});
}else{
return Center(
child: RefreshProgressIndicator(
backgroundColor: Palette.white,
),
);
}
}
)
切换小部件
Switch(
value: check,
onChanged: (v) {
setState(() {
check = v;
});
}),
当我这样添加时:它在不停止地重新运行。重复的问题。
FutureBuilder<List<RequirementModel>>(
future: getRequirement(check),
解决方案
我在答案部分下方添加了自己的解决方案。请检查并告知我,这是最佳做法吗?
答案 0 :(得分:-1)
我实现了两个FutureBuilder。
Future<List<RequirementModel>> _futureRelevant;
Future<List<RequirementModel>> _futureAll;
还有两种方法。
@override
void initState() {
super.initState();
_futureRelevant = getRelevant();
_futureAll = getAll();
}
构建方法:看起来像这样:
child: check
? FutureBuilder<List<RequirementModel>>(
future: _futureRelevant,
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data.length);
return listViewData(snapshot.data,height,width);
}
})
: FutureBuilder<List<RequirementModel>>(
future: _futureAll,
builder: (context, snapshot) {
if (snapshot.hasData) {
return listViewData(snapshot.data,height,width);
}
})