我在dart中编写了此方法以动态生成graphql查询,并且按预期方式工作:
String getPosts({
bool id = false,
bool title = false,
bool description = false,
bool date = false,
bool creator = false,
}) {
final fieldsStringList = [
if (id) "_id",
if (title) "title",
if (description) "description",
if (date) "date",
if (creator) "creator{_id}",
];
String fieldsString = "";
for (var i = 0; i < fieldsStringList.length; i++) {
fieldsString += fieldsStringList[i];
if (i != fieldsStringList.length - 1) fieldsString += ',';
}
return 'query{posts{$fieldsString}}';
}
但是我想知道是否有更好的方法?
答案 0 :(得分:0)
您可以使用StringBuffer
代替String
,并使用for each
循环代替常规循环。
String getPosts({
bool id = false,
bool title = false,
bool description = false,
bool date = false,
bool creator = false,
}) {
final stringsList = <String>[
if (id) '_id',
if (title) 'title',
if (description) 'description',
if (date) 'date',
if (creator) 'creator{_id}',
];
final buffer = StringBuffer();
for (var item in stringsList) {
buffer.write(item);
if (stringsList.last != item) buffer.write(',');
}
return 'query{posts{$buffer}}';
}
答案 1 :(得分:0)
对于其他情况相同的人,感谢@pskink,这是实现这一目标的一种更好的方法:
String getPosts({
bool id = false,
bool title = false,
bool description = false,
bool date = false,
bool creator = false,
}) {
final fields = [
if (id) "_id",
if (title) "title",
if (description) "description",
if (date) "date",
if (creator) "creator{_id}",
];
if (fields.isEmpty)
throw EmptyQueryException('getPost() query must have at least 1 argument');
return 'query{posts{${fields.join(',')}}}';
}