flutter - 我如何将自己的变量注入到 Flutter / dart 中的模型类中?
问题描述
背景
使用以下教程:https ://www.raywenderlich.com/5896601-flutter-networking-tutorial-getting-started
我正在从外部 JSON 数据构建一个列表视图。
我有这段代码可以为从我的 JSON 构建的“库”创建模型。
class SiteLibrary {
final List<MySite> dasite; // 1
SiteLibrary({required this.dasite});
factory SiteLibrary.fromRawJson(String str) =>
SiteLibrary.fromJson(json.decode(str)); // 2
factory SiteLibrary.fromJson(Map<String, dynamic> json) => SiteLibrary(
dasite: List<MySite>.from(
json["appData"].map((x) => MySite.fromJson(x))));
Map<String, dynamic> toJson() => {
"appData": List<dynamic>.from(dasite.map((x) => x.toJson())),
};
}
它被用于 FutureBuilder
FutureBuilder(
future: _apiResponse.getJSONfromTheSite(),
builder: (BuildContext context, AsyncSnapshot<Result> snapshot) {
if (snapshot.data is SuccessState) {
SiteLibrary sitedatacollection = (snapshot.data as SuccessState).value;
return ListView.builder ...
我想要达到的目标
我想做的是通过将json["appData"]
部分作为变量来使这段代码在我的应用程序中可重用。具体"appData"
部分。我希望能够在外部告诉这个 SiteLibrary 类使用一个"appData"
或多个替代字段,让我们暂时调用"appData2"
它们"appData3"
。
现在,如果我将硬编码更改"appData"
为它,"appData2"
它将成功检索一组不同的数据。
解决方案
您可以尝试引入一个变量jsonKey
来定义要读取的 json 键。请注意,它必须是静态的,因为您尝试在工厂方法中使用它。
class SiteLibrary {
static String _jsonKey = "appData";
static set jsonKey(String val) {
_jsonKey = val;
}
final List<MySite> dasite; // 1
SiteLibrary({required this.dasite});
factory SiteLibrary.fromRawJson(String str) =>
SiteLibrary.fromJson(json.decode(str)); // 2
factory SiteLibrary.fromJson(Map<String, dynamic> json) => SiteLibrary(
dasite: List<MySite>.from(
json[_jsonKey].map((x) => MySite.fromJson(x))));
Map<String, dynamic> toJson() => {
_jsonKey: List<dynamic>.from(dasite.map((x) => x.toJson())),
};
}
推荐阅读
- java - Android 是否有与 Java 的 Desktop.getDesktop() 类似的类来打开文件或提示用户选择应用程序关联?
- r - 绘制 glmer 中所有变量的预测概率
- vue.js - Vuetify.js shaped card being overridden by v-sheet
- docker - 在 Docker 中运行时向 Solr 添加字段?
- php - 无效的数据表格式:谷歌条形图上必须至少有 2 列
- css - Inject CSS styles to shadow root via Webpack
- powershell - "The WSMan provider host process did not return a proper response." issue while downloading a published package from SFTP server to target server
- php - "Failed to Decrypt" Error 190 in Instagram Graph API
- python - openpyxl中超链接的奇怪行为
- azure - Why is Azure SignalR Service recommended when deploying a Blazor Server Side app?