バッキング リストを変更すると、テンプレートは古い要素をすべて破棄して最初から再作成することを繰り返すため、ユーザーのサイズ変更情報はすべて失われます。
リストに新しいアイテムを追加すると、古い要素のすべてのサイズ情報を保存し、アイテムが追加された後に新しい要素のサイズを設定できます。
// Stores size information
List<List> sizes = [];
void add() {
// Store the old sizes
sizes.clear();
ElementList divs = queryAll(".superDivContainer");
for(int i = 0; i < divs.toList().length; i++) {
Element div = divs[i];
sizes.add([div.style.width, div.style.height]);
}
// Add the new item
yourList.add("new");
// Set the sizes of the new elements
Timer timer = new Timer(new Duration(milliseconds: 1), () {
divs = queryAll(".superDivContainer");
for(int i = 0; i < divs.toList().length && i < sizes.length; i++) {
Element div = divs[i];
div.style.width = sizes[i][0];
div.style.height = sizes[i][1];
}
});
}
2 つの注意事項:
- 複数の要素に適用しているように見えるため、superDivContainer を id ではなくクラスに変更しました。それを反映するCSSを変更する必要があります
- 1 ミリ秒のタイマーは、新しい要素が追加されてアクセス可能になるまでわずかな遅延があるという事実を回避します。