如何解决Flutter实现嵌套的SliverPersistentHeader
在我的应用程序中,我在父级中有一个SliverPersistentHeader
,在内部我想与SliverList
一起使用另一个SliverPersistentHeader
,我在下面有一个伪代码,然后得到
应用父数据时引发了以下断言: 错误使用ParentDataWidget。
ParentDataWidget Expanded(flex:1)要应用的ParentData 将FlexParentData类型键入RenderObject,该对象已设置为接受 类型不兼容的ParentData的ParentData。
通常,这表示扩展窗口小部件的祖先错误 RenderObjectWidget。通常,扩展小部件直接放置 在Flex小部件中。违规扩展目前位于内部 一个RepaintBoundary小部件。
已接收到RenderObject的所有权链 不兼容的父数据为:RepaintBoundary← NotificationListener←GlowingOverscrollIndicator ←可滚动←_nestedScrollViewCustomScrollView←构建器← _InheritednestedScrollView←nestedScrollView←扩展←RepaintBoundary←⋯
════════渲染库捕获的异常═══════RenderBox是 未布置:RendernestedScrollViewViewport#e9060 NEEDS-LAYOUT 需求油漆需求组成位更新 'package:Flutter / src / rendering / Box.dart':断言失败:1785行 pos 12:“ hasSize”相关的引起错误的小部件是:
nestedScrollView 文件:/// C:/Users/mahdi/AndroidStudioProjects/instacheeta/lib/nested.dart:41:26 ══════════════════════════════════════════════════ ════
错误,当我尝试删除Expanded
小部件时,出现另一个错误。
我该如何解决?
import 'package:Flutter/material.dart';
void main()=>runApp(MySliverApp());
class MySliverApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'sample',home: MySilverHomeApp(),);
}
}
class MySilverHomeApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
physics: const ClampingScrollPhysics(),slivers: <Widget>[
SliverPersistentHeader(
pinned: false,floating: true,delegate: CustomAutoHideAppBarDelegate(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0),child: Row(
children:const <Widget>[
Text('SAMPLE')
],),SliverPadding(
padding: const EdgeInsets.all(0),sliver: SliverList(
delegate: SliverChildListDelegate([
Expanded(
child: nestedScrollView(
headerSliverBuilder: (BuildContext context,bool innerBoxIsScrolled) {
return <Widget>[
SliverList(
delegate: SliverChildBuilderDelegate((BuildContext context,int index) {
return Column(
children:const <Widget>[
Text('SAMPLE'),Text('SAMPLE')
],);
},childCount: 1),SliverPersistentHeader(
pinned: true,delegate: ContestTabHeader(
Text('SAMPLE'),];
},body: ListView.builder(itemBuilder: (context,index){
return Container(
child: Text('$index'),);
},itemCount: 100,)),]),],);
}
}
class CustomAutoHideAppBarDelegate extends SliverPersistentHeaderDelegate {
const CustomAutoHideAppBarDelegate({
@required this.child,});
final Widget child;
@override
Widget build(BuildContext context,double shrinkOffset,bool overlapsContent) {
final theme = Theme.of(context);
return SizedBox.expand(
child: Material(
color: Colors.white,elevation: 3,child: Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context).padding.top,child: DefaultTextStyle.merge(
style: theme.primaryTextTheme.subtitle1,child: IconTheme.merge(
data: theme.primaryIconTheme,child: child,);
}
@override
double get minextent => kToolbarHeight;
@override
double get maxExtent => kToolbarHeight;
@override
bool shouldRebuild(CustomAutoHideAppBarDelegate oldDelegate) => child != oldDelegate.child;
}
class ContestTabHeader extends SliverPersistentHeaderDelegate {
ContestTabHeader(
this.searchUI,);
final Widget searchUI;
@override
Widget build(BuildContext context,bool overlapsContent) {
return searchUI;
}
@override
double get maxExtent => 52.0;
@override
double get minextent => 52.0;
@override
bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
return false;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。