【发布时间】:2018-11-17 09:34:01
【问题描述】:
flutter 文档显示一个demo for SliverAppBar + TabBar + TabBarView with ListView 使用NestedScrollView,而且有点复杂,不知道有没有简单明了的实现方式。我试过这个:
CustomScrollView
slivers:
SliverAPPBar
bottom: TabBar
TabBarView
children: MyWidget(list or plain widget)
出现错误:
flutter:在构建 Scrollable(axisDirection: right, physical:
时抛出了以下断言 颤动:RenderViewport 期望 RenderSliver 类型的子级,但收到 _RenderExcludableScrollSemantics 类型的子级。
Flutter:RenderObjects 期望特定类型的子对象,因为它们在布局和绘制过程中与子对象协调。例如,RenderSliver 不能是 RenderBox 的子级,因为 RenderSliver 不理解 RenderBox 布局协议。
和
flutter:引发了另一个异常:'package:flutter/src/widgets/framework.dart':断言失败:第 3497 行 pos 14:'owner._debugCurrentBuildTarget == this':不正确。
这是我的代码:
import 'package:flutter/material.dart';
main(List<String> args) {
runApp(MyScrollTabListApp());
}
class MyScrollTabListApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(title: "aa", home: MyScrollTabListHomePage());
}
}
class MyScrollTabListHomePage extends StatefulWidget {
@override
MyScrollTabListHomePageState createState() {
return new MyScrollTabListHomePageState();
}
}
class MyScrollTabListHomePageState extends State<MyScrollTabListHomePage>
with SingleTickerProviderStateMixin {
final int _listItemCount = 300;
final int _tabCount = 8;
TabController _tabController;
@override
void initState() {
_tabController = TabController(length: _tabCount, vsync: this);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
expandedHeight: 240.0,
title: Text("Title"),
pinned: true,
bottom: TabBar(
controller: _tabController,
isScrollable: true,
tabs: List<Tab>.generate(_tabCount, (int i) {
return Tab(text: "TAB$i");
}),
),
),
TabBarView(
controller: _tabController,
children: List<Widget>.generate(_tabCount, (int i) {
return Text('line $i');
}),
),
],
),
);
}
}
对于官方演示,它使用这样的结构
DefaultTabController
NestedScrollView
headerSliverBuilder
SliverOverlapAbsorber
handle
SliverAppBar
TabBarView
CustomScrollView
SliverOverlapInjector
handle
SliverPadding
【问题讨论】:
标签: flutter nestedscrollview flutter-sliver