簡體   English   中英

Dart / Flutter 條件命名參數

[英]Dart / Flutter Conditional Named Parameters

在 Javascript 中,要有條件地向對象添加值,我可以執行以下操作:

const obj = {
   ...(myCondition && {someKey: "someValue"})
}

我可以做一些類似於在 Dart / Flutter 中傳遞命名參數的事情嗎? 例如,如果我有下面的代碼,有沒有辦法有條件地傳遞place參數, fromJson是它存在於傳遞給fromJson工廠函數的json

factory SearchResult.fromJson(Map<String, dynamic> json) {
    return SearchResult(
      id: json['id'],
      displayString: json['displayString'],
      name: json['name'],
      recordType: json['recordType'],
      collection: json['collection'],
      place: GeoJson.fromJson(json['place']),
      properties: json['properties']
    );
  }

您可能正在尋找 Dart 的集合運算符,特別是collection-ifcollection-for功能。

例如,您可以執行以下操作:

final map = {
  'key1': 'value1',
  'key2': 'value2',
  if (myCondition) 'key3': 'value3'
};

這也適用於列表:

final list = ['value1', 'value2', if (myCondition) 'value3']; 

在這種情況下,您可能會追求以下方面的內容:

final keys = [
  'id',
  'displayString',
  'name',
  'recordType',
  'collection',
  'place',
  'properties'
],
obj = {for (final key in keys) if (json.containsKey(key)) key: json[key]};
factory SearchResult.fromJson(Map<String, dynamic> json) {
    var isNotEmpty = json['place'] != null;

    return SearchResult(
      id: json['id'],
      displayString: json['displayString'],
      name: json['name'],
      recordType: json['recordType'],
      collection: json['collection'],
      /// This way you won't call fromJson and passing null if json['place'] is null in the first place
      place: isNotEmpty ? GeoJson.fromJson(json['place']) : null,
      properties: json['properties']
    );
  }

在 dart 中,如果您收到一個null對象,您可以使用雙問號運算符:

  • ??

這是什么意思? : 如果objectnull則取雙問號后的內容

var b = null;
var a = b ?? 'b was null, you got me!';
print(a);

結果:

a: b was null, you got me!

例如:

factory SearchResult.fromJson(Map<String, dynamic> json) {
    var isNotEmpty = json['place'] != null;

    return SearchResult(
      id: json['id'] ?? 0,
      displayString: json['displayString'] ?? '',
      name: json['name'] ?? '',
      recordType: json['recordType'] ?? '',
      collection: json['collection'] ? '',
      place: GeoJson.fromJson(json['place'] ?? {}),
      properties: json['properties'] ?? [],
    );
  }

空安全類型使用起來很有趣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM