cache.dart 899 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import 'dart:ui';
  2. import 'package:flutter/painting.dart';
  3. import 'package:quiver/collection.dart';
  4. class TextLayoutCache {
  5. TextLayoutCache(this.textDirection, int maximumSize)
  6. : _cache = LruMap<int, Paragraph>(maximumSize: maximumSize);
  7. final LruMap<int, Paragraph> _cache;
  8. final TextDirection textDirection;
  9. void clear() {
  10. _cache.clear();
  11. }
  12. Paragraph? getLayoutFromCache(int key) {
  13. return _cache[key];
  14. }
  15. Paragraph performAndCacheLayout(String text, TextStyle style, int? key) {
  16. final builder = ParagraphBuilder(style.getParagraphStyle());
  17. builder.pushStyle(style.getTextStyle());
  18. builder.addText(text);
  19. final paragraph = builder.build();
  20. paragraph.layout(ParagraphConstraints(width: double.infinity));
  21. if (key != null) {
  22. _cache[key] = paragraph;
  23. }
  24. return paragraph;
  25. }
  26. int get length {
  27. return _cache.length;
  28. }
  29. }