我想把一个 Navigator
作为子女 ListView
小部件。我这样做的目的是为了有一些静态的顶部内容(例如,一个带有导航选项的顶部导航条),而在其下方,一些基于 Navigator
. 我想用 ListView
而非 Column
以便能够滚动所有内容,包括顶部导航栏。
然而,我得到了一个渲染异常,因为在 Navigator
widget没有边界,因此不能放在 ListView
因为它没有任何尺寸限制。
有没有什么变通的方法可以达到这样的效果?
|------------------| ^
| STATIC NAVBAR | | SCROLL
|------------------| |
| | ^
| NAVIGATOR |
| CONTENT |
| |
|------------------|
首先是一个 SingleChildScrollView
会 可能 更适合你的需求来滚动一个单一的widget。
为了解决你的渲染异常,你应该把你的 ListView
或 SingleChildScrollView
作为 孩子 的 Navigator
因为您的预期效果是滚动每个路由小组件的内容。这并不是唯一的方法,我只是认为对你来说,管理每个子路由的约束会更容易。无论哪种方式,你都需要将你的子路由的 Navigator
在垂直方向的某个点上。
你可以使用TabBar来实现你问题中所说的导航。你可以把 TabBar
里面 bottom
的财产 Scaffold - AppBar()
.
关于文档,你可以查看这个官方文档,了解如何使用tabs 此处
我的工作实例:
return Scaffold(
appBar: AppBar(
title: AppBarTitle(),
bottom: TabBar(
controller: _tabController, // define your TabController
tabs: _tabs, //list of tab widgets
),
),
body: TabBarView(
controller: _tabController,
children: <Widget>[
// Here you can put your ListView widget as your dynamic contents
],
),
);