颤振列表视图生成器是空白的,直到热重新加载



我正在使用mobx,并将代码分为2个个人数据和个人数据提供程序,并且有一个自动生成的代码与mobx。Listview。构建器不加载数据,直到我热加载代码(VSCode)。

class IndividualDataState extends State<IndividualData> {
@override
void initState() {
super.initState();
setup();
sl<IIndividualDataProvider>()?.initReporting(context);
}
@override
Widget build(BuildContext context) {
return Observer(
builder: (_) => Scaffold(
backgroundColor: Colors.grey[100],
appBar: AppBar(
elevation: 0,
centerTitle: true,
title: Text("All Data"),
backgroundColor: PRIMARY,
),
body: Stack(
children: <Widget>[
ListView.builder(
itemCount: sl<IIndividualDataProvider>().entries.length == null
? 0
: sl<IIndividualDataProvider>().entries.length,
itemBuilder: (BuildContext context, int index) {
return new ListTile(
title: new Text(sl<IIndividualDataProvider>()
.entries[index]
.entry
.toString()),
subtitle: new Text(sl<IIndividualDataProvider>()
.entries[index]
.createdAt
.toString()),
);
},
),
],
),
),
);
}
} 

提供者

class IndividualDataProvider = IIndividualDataProvider
with _$IndividualDataProvider;
abstract class IIndividualDataProvider with Store {
@observable
bool isLoading = false;
@observable
List tags = [];
@observable
List<IndvidualReadings> entries = [];
@action
Future initReporting(context) async {
try {
isLoading = true;
Response _readings = await sl<IIndividualDataService>().getAllRmssd();
Map<String, dynamic> map = _readings.data;
List<dynamic> data = map["readings"];
if (data != null) {
data.forEach((v) {
IndvidualReadings tempRead = IndvidualReadings.fromJson(v);
entries.add(tempRead);
});
}
isLoading = false;
} catch (err) {
isLoading = false;
print(err.toString());
}
}
}
class IndvidualReadings {
double entry;
String createdAt;
List<ReadingTags> tags = [];
IndvidualReadings({this.entry, this.createdAt, this.tags});
factory IndvidualReadings.fromJson(Map<String, dynamic> json) {
var list = json['tags'] as List;
print(list.runtimeType);
List<ReadingTags> tagsList =
list.map((i) => ReadingTags.fromJson(i)).toList();
return IndvidualReadings(
entry: json['entry'], createdAt: json['created_at'], tags: tagsList);
}
}
class ReadingTags {
int id;
String tagName;
ReadingTags({this.id, this.tagName});
ReadingTags.fromJson(Map<String, dynamic> json) {
id = json['id'];
tagName = json['tag_name'];
}
}

当我点击打开页面时,它是空白的。我进行了一些打印,看看数据是否正在被API提取,并且打印成功。然后,当我只是热加载(我通常按Ctrl+S)信息被正确加载,ListTile被渲染。

我完全不知道为什么会发生这种事。如有任何帮助,不胜感激。

您的entries应该是一个ObservableList -然后只有Observer小部件将自动重建entries列表中的更改

...
@observable
ObservableList<IndvidualReadings> entries = ObservableList;
...

最新更新