我正在使用 Windows Visual Studio 2022測驗
謝謝!
uj5u.com熱心網友回復:
您只能將單個物體作為引數或結果傳遞,但該物體可以是任何受支持的型別(無論是基本型別 - int、double 等 - 還是復雜 - 串列或映射)。
Dart 和 C (Windows 原生)型別之間的映射是:
// std::monostate -> null
// bool -> bool
// int32_t -> int
// int64_t -> int
// double -> double
// std::string -> String
// std::vector<uint8_t> -> Uint8List
// std::vector<int32_t> -> Int32List
// std::vector<int64_t> -> Int64List
// std::vector<float> -> Float32List
// std::vector<double> -> Float64List
// EncodableList -> List
// EncodableMap -> Map
(見encodable_value.h)
因此,要發送您的兩個整數 (fluval和data2),您可以選擇將它們放入 Dart 串列 (ie <int>[123, 456]) 或 Dart 映射 (ie {'fluval':123, 'data2':456})。在本機端,引數將是 anEncodableList或EncodableMap。
下面是一個復雜的 Dart 結構如何出現在本機端的示例:
// {
// 'flag': true,
// 'name': 'Thing',
// 'values': [1, 2.0, 4],
// }
// would correspond to:
// EncodableValue(EncodableMap{
// {EncodableValue("flag"), EncodableValue(true)},
// {EncodableValue("name"), EncodableValue("Thing")},
// {EncodableValue("values"), EncodableValue(EncodableList{
// EncodableValue(1),
// EncodableValue(2.0),
// EncodableValue(4),
// })},
// })
相機插件有一些示例用法(將引數作為地圖獲取):
const auto* arguments = std::get_if<flutter::EncodableMap>(method_call.arguments());
在同一個檔案中,查看兩個實用函式:
// Looks for |key| in |map|, returning the associated value if it is present, or
// a nullptr if not.
const EncodableValue* ValueOrNull(const EncodableMap& map, const char* key) {
auto it = map.find(EncodableValue(key));
if (it == map.end()) {
return nullptr;
}
return &(it->second);
}
// Looks for |key| in |map|, returning the associated int64 value if it is
// present, or std::nullopt if not.
std::optional<int64_t> GetInt64ValueOrNull(const EncodableMap& map,
const char* key) {
auto value = ValueOrNull(map, key);
if (!value) {
return std::nullopt;
}
if (std::holds_alternative<int32_t>(*value)) {
return static_cast<int64_t>(std::get<int32_t>(*value));
}
auto val64 = std::get_if<int64_t>(value);
if (!val64) {
return std::nullopt;
}
return *val64;
}
及其典型用法:
const auto* camera_name =
std::get_if<std::string>(ValueOrNull(args, kCameraNameKey));
auto camera_id = GetInt64ValueOrNull(args, kCameraIdKey);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/510773.html
