У меня есть приложение для дротиков, содержащее шаблон с флажком материала, который я не могу использовать в своем компоненте. Вот простой шаблон для демонстрации проблемы (two_boxes.html):
<!--
Simple HTML to test checkboxes
-->
<input type="checkbox" id="cb0">
<label>Standard Checkbox</label>
<material-checkbox label="Material Checkbox" id="cb1">
</material-checkbox>
<button (click)="doTest()">Test</button>
и соответствующий компонент, в котором я пытаюсь использовать флажки (two_boxes.dart). Я могу использовать стандартный флажок в приведении, как и ожидалось, но не могу найти способ сделать то же самое с флажком материала:
// Component for testing
import 'package:angular/angular.dart';
import 'package:angular_components/angular_components.dart';
import 'dart:html';
@Component(
selector: 'two-boxes',
templateUrl: 'two_boxes.html',
directives: const [MaterialCheckboxComponent],
pipes: const [
COMMON_PIPES
])
class TwoBoxes {
// Get the the two checkboxes and see if they are checked
void doTest() {
var checkbox_standard = querySelector("#cb0");
print(checkbox_standard.runtimeType.toString()); // InputElement
print((checkbox_standard as CheckboxInputElement).checked); // Succeeds
var checkbox_material = querySelector("#cb1");
print(checkbox_material.runtimeType.toString()); // HtmlElement
print((checkbox_material as MaterialCheckboxComponent).checked); // Error!
}
}
Последний оператор терпит неудачу, когда я запускаю приложение в Dartium после «обслуживания в пабе» (без ошибок) с:
VM54:1 EXCEPTION: type 'HtmlElementImpl' is not a subtype of type
MaterialCheckboxComponent' in type cast where HtmlElementImpl is
from dart:html MaterialCheckboxComponent is from
package:angular_components/src/components/
material_checkbox/material_checkbox.dart
Ясно, что этот способ литья не работает. Я часами искал, как решить эту ошибку и найти правильный способ сделать это, но, очевидно, не в тех местах. Что мне здесь не хватает? Я использую Dart VM версии 1.24.2.