Dart에서 json을 대상으로 변환할 때 int를 enum으로 변환합니다

10552 단어 FlutterDarttech

TL;DR

  • Flutter/Dart Convert Int to Enum | Stack Overflow
  • https://stackoverflow.com/questions/51190035/flutter-dart-convert-int-to-enum
  • Dart에서 json을 대상으로 변환할 때 int를 enum으로 변환합니다


    C#에서 그런 거 많이 하니까.
    Dart에서도 하고 싶어요.
    이런 제이슨
    {
      "playlist":[
        {
          "category": 0,
          "title": "Foo Video",
        },
        {
          "category": 0,
          "title": "Bar Video",
        },
        {
          "category": 1,
          "title": "Baz Music",
        }
      ]
    }
    
    이런 enum과 대상으로 전환하려면
    enum ContentCategory {
      video,
      music,
    }
    
    class Content {
      final ContentCategory category;
      final String title;
    }
    
    이렇게 하면 돼요.
    Future<List<Content>> fetchContents() async {
      final response = await http.get('https://hoge.com/json');
    
      if (response.statusCode == 200) {
        final jsonMap = jsonDecode(response.body) as Map<String, dynamic>;
    
        final result = <Content>[];
        if (jsonMap['playlist'] != null) {
          jsonMap['playlist'].forEach((dynamic v) {
            result.add(new Content.fromJson(v as Map<String, dynamic>));
          });
        }
      
        return result;
      } else {
        throw Exception('Faild to load album.');
      }
    }
    
    enum ContentCategory {
      video,
      music,
    }
    
    class Content {
      Content(
          {this.category,
          this.title});
    
      factory Content.fromJson(Map<String, dynamic> json) {
        return Content(
          category: ContentCategory.values[json['category'] as int], /* これ */
          title: json['title'] as String,
        );
      }
    
      final ContentCategory category;
      final String title;
    }
    

    좋은 웹페이지 즐겨찾기