[Dart/Fluter] Shared Preferences 등 String 값에 임의의 맵을 저장(획득)합니다.

15847 단어 AndroidFlutterDarttech
응용 프로그램 내 데이터로 "shared_preferences"를 저장할 때 맵을 저장하거나 가져오려고 할 때의 간단한 이해 노트입니다.(더 편할지도 몰라요.)

[Dart/Fluter] 모든 Map String


개시하다


  • 이번에 고려Map<DateTime, dynamic>가 최종적으로 String으로 바뀌었다(반대로)
  • 데이터 사용 시간 클래스 이외의 상황에서 적절하게 변경

  • 운영 환경

  • DartPad 및 Android Studio 등
  • Flutter 2.0.4 Dart SDK 2.12.2
  • 부호화

  • 변환 프로세스
  • Map<DateTime, dynamic>Map<String, dynamic>
  • toString() 함수를 통해 키를 String
  • 으로 변경
  • Map<String, dynamic>String
  • json.encode()를 통해 함수 활용import 'dart:convert';
  • import 'dart:convert';
    
    void main() {
      Map<DateTime, List<dynamic>> _events = {
        DateTime.now(): ['Test', 'List']
      };
    
      // エンコード汎用関数(Map<DateTime, dynamic>→Map<String, dynamic>)
      Map<String, dynamic> encodeMap(Map<DateTime, dynamic> map) {
        Map<String, dynamic> newMap = {};
        map.forEach((key, value) {
          newMap[key.toString()] = map[key];
        });
        return newMap;
      }
    
      // json.encodeでMapをStringへ
      String testEncoded = json.encode(encodeMap(_events));
    
      print(testEncoded.runtimeType);
      print(testEncoded);
    }
    
    실행 결과
    String
    {"2021-04-07 18:09:24.454":["Test","List"]}
    

    디코딩


    ※ 인코딩된 testEncoded값은 이번엔 입력으로 사용
  • 변환 프로세스
  • StringMap<String, dynamic>
  • json.decode()를 통해 함수 활용import 'dart:convert';
  • Map<String, dynamic>Map<DateTime, dynamic>
  • DateTime.parse() 함수는 키를 데이터 시간으로 변경
  • import 'dart:convert';
    
    void main() {
      Map<DateTime, List<dynamic>> _events = {
        DateTime.now(): ['Test', 'List']
      };
    
      // エンコード汎用関数(Map<DateTime, dynamic>→Map<String, dynamic>)
      Map<String, dynamic> encodeMap(Map<DateTime, dynamic> map) {
        Map<String, dynamic> newMap = {};
        map.forEach((key, value) {
          newMap[key.toString()] = map[key];
        });
        return newMap;
      }
    
      // json.encodeでMapをStringへ
      String testEncoded = json.encode(encodeMap(_events));
    
      // デコード汎用関数(Map<String, dynamic>→Map<DateTime, dynamic>)
      Map<DateTime, dynamic> decodeMap(Map<String, dynamic> map) {
        Map<DateTime, dynamic> newMap = {};
        map.forEach((key, value) {
          newMap[DateTime.parse(key)] = map[key];
        });
        return newMap;
      }
    
      Map<DateTime, List<dynamic>> newEvents = {};
      // json.decodeでStringをMapへ
      newEvents = Map<DateTime, List<dynamic>>.from(
        // 以下は、実際にはsharedPreferences等を利用し、取得したString値を入れる
        decodeMap(
          json.decode(testEncoded),
        ),
      );
    
      print(newEvents.runtimeType);
      print(newEvents);
    }
    
    실행 결과
    JsLinkedHashMap<DateTime, List<dynamic>>
    {2021-04-07 18:31:18.014: [Test, List]}
    
    ※ 데이터 패드의 결과

    좋은 웹페이지 즐겨찾기