Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
flutter::NativeAssetsManager Class Reference

#include <native_assets.h>

Public Member Functions

 NativeAssetsManager ()=default
 
 ~NativeAssetsManager ()=default
 
void RegisterNativeAssets (const uint8_t *manifest, size_t manifest_size)
 
void RegisterNativeAssets (const std::shared_ptr< AssetManager > &asset_manager)
 
std::vector< std::string > LookupNativeAsset (std::string_view asset_id)
 
std::string AvailableNativeAssets ()
 

Detailed Description

Definition at line 22 of file native_assets.h.

Constructor & Destructor Documentation

◆ NativeAssetsManager()

flutter::NativeAssetsManager::NativeAssetsManager ( )
default

◆ ~NativeAssetsManager()

flutter::NativeAssetsManager::~NativeAssetsManager ( )
default

Member Function Documentation

◆ AvailableNativeAssets()

std::string flutter::NativeAssetsManager::AvailableNativeAssets ( )

Definition at line 121 of file native_assets.cc.

121 {
122 if (parsed_mapping_.empty()) {
123 return std::string("No available native assets.");
124 }
125
126 std::string result;
127 result.append("Available native assets: ");
128 bool first = true;
129 for (const auto& n : parsed_mapping_) {
130 if (first) {
131 first = false;
132 } else {
133 result.append(", ");
134 }
135 result.append(n.first);
136 }
137
138 result.append(".");
139 return result;
140}

Referenced by flutter::testing::TEST().

◆ LookupNativeAsset()

std::vector< std::string > flutter::NativeAssetsManager::LookupNativeAsset ( std::string_view  asset_id)

Definition at line 110 of file native_assets.cc.

111 {
112 // Cpp17 does not support unordered_map lookup with std::string_view on a
113 // std::string key.
114 std::string as_string = std::string(asset_id);
115 if (parsed_mapping_.find(as_string) == parsed_mapping_.end()) {
116 return std::vector<std::string>();
117 }
118 return parsed_mapping_[as_string];
119}

◆ RegisterNativeAssets() [1/2]

void flutter::NativeAssetsManager::RegisterNativeAssets ( const std::shared_ptr< AssetManager > &  asset_manager)

Definition at line 96 of file native_assets.cc.

97 {
98 std::unique_ptr<fml::Mapping> manifest_mapping =
99 asset_manager->GetAsMapping("NativeAssetsManifest.json");
100 if (manifest_mapping == nullptr) {
101 FML_DLOG(WARNING)
102 << "Could not find NativeAssetsManifest.json in the asset store.";
103 return;
104 }
105
106 RegisterNativeAssets(manifest_mapping->GetMapping(),
107 manifest_mapping->GetSize());
108}
void RegisterNativeAssets(const uint8_t *manifest, size_t manifest_size)
#define FML_DLOG(severity)
Definition logging.h:121

References FML_DLOG, and RegisterNativeAssets().

◆ RegisterNativeAssets() [2/2]

void flutter::NativeAssetsManager::RegisterNativeAssets ( const uint8_t *  manifest,
size_t  manifest_size 
)

Definition at line 46 of file native_assets.cc.

47 {
48 // Note that this format is also expected by build tools for Apple
49 // platforms in packages/flutter_tools/bin/xcode_backend.dart.
50 parsed_mapping_.clear();
51
52 rapidjson::Document document;
53 static_assert(sizeof(decltype(document)::Ch) == sizeof(uint8_t), "");
54 document.Parse(reinterpret_cast<const decltype(document)::Ch*>(manifest),
55 manifest_size);
56 if (document.HasParseError()) {
57 FML_DLOG(WARNING) << "NativeAssetsManifest.json is malformed.";
58 return;
59 }
60 if (!document.IsObject()) {
61 FML_DLOG(WARNING) << "NativeAssetsManifest.json is malformed.";
62 return;
63 }
64 auto native_assets = document.FindMember("native-assets");
65 if (native_assets == document.MemberEnd() ||
66 !native_assets->value.IsObject()) {
67 FML_DLOG(WARNING) << "NativeAssetsManifest.json is malformed.";
68 return;
69 }
70 auto mapping = native_assets->value.FindMember(kTarget);
71 if (mapping == native_assets->value.MemberEnd() ||
72 !mapping->value.IsObject()) {
73 FML_DLOG(WARNING) << "NativeAssetsManifest.json is malformed.";
74 return;
75 }
76 for (auto entry = mapping->value.MemberBegin();
77 entry != mapping->value.MemberEnd(); entry++) {
78 std::vector<std::string> parsed_path;
79 entry->name.GetString();
80 auto& value = entry->value;
81 if (!value.IsArray()) {
82 FML_DLOG(WARNING) << "NativeAssetsManifest.json is malformed.";
83 continue;
84 }
85 for (const auto& element : value.GetArray()) {
86 if (!element.IsString()) {
87 FML_DLOG(WARNING) << "NativeAssetsManifest.json is malformed.";
88 continue;
89 }
90 parsed_path.push_back(element.GetString());
91 }
92 parsed_mapping_[entry->name.GetString()] = std::move(parsed_path);
93 }
94}
int32_t value
#define kTarget

References FML_DLOG, kTarget, and value.

Referenced by RegisterNativeAssets(), and flutter::testing::TEST().


The documentation for this class was generated from the following files: