Автоматически вычислять `maxExtent` из` SliverPersistentHeaderDelegate` - PullRequest
0 голосов
/ 26 октября 2019

Рассмотрим следующий пример, предназначенный для визуализации закрепленной строки заголовка (с потенциально нестандартным длинным / коротким текстом) внутри CustomScrollView.

class TitleBar extends StatelessWidget {
  TitleBar(this.text);

  final String text;

  @override
  Widget build(BuildContext context) => Text(
        text,
        style: TextStyle(fontSize: 30),
        maxLines: 3,
        overflow: TextOverflow.ellipsis,
      );
}

class TitleBarDelegate extends SliverPersistentHeaderDelegate {
  final String text;

  TitleBarDelegate(this.text);

  @override
  Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) => TitleBar(text);

  @override
  bool shouldRebuild(TitleBarDelegate oldDelegate) => oldDelegate.text != text;

  @override
  double get maxExtent => ???;

  @override
  double get minExtent => maxExtent; // doesn't shrink
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: CustomScrollView(
          slivers: [
            SliverPersistentHeader(
              pinned: true,
              delegate: TitleBarDelegate('Potentially very long text'),
            ),
            SliverToBoxAdapter(
              child: Text("Foo " * 1000),
            ),
          ],
        ),
      ),
    );
  }
}

. Вопрос в том, как вычислитьmaxExtent на основе фактического TitleBar. Проблема в том, что фактический размер TitleBar зависит от текста и, следовательно, обычно рассчитывается заранее.

Обратите внимание, что TitleBar может также иметь более сложную компоновку, чем в примере выше. ,Таким образом, общий вопрос заключается в том, как «обернуть» SliverPersistentHeaderDelegate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...