Flutter:同一页面中有 2 个不同的应用程序栏
Flutter: 2 differents appbars in same page
在flutter中是否可以在同一个页面中有两个不同的appbars?我需要一个用于 header,但经过一些滚动后,另一个随 body 的其余部分一起出现,并取代了最初的那个。
是的,当您创建一个 child 时,您可以创建新的脚手架,它可以添加一个新的 AppBar
例如..
Return Scaffold(
appBar: AppBar(),
body: Center(
child: Scaffold(
appBar: AppBar()
)
)
)
然后如果你想要建造任何其他东西,你可以将它添加到第二个脚手架的主体中。
您可能想尝试包 flutter_sticky_header。
代码示例
import 'package:flutter/material.dart';
import 'package:flutter_sticky_header/flutter_sticky_header.dart';
class StickyHeaderListWidget extends StatelessWidget {
final String header;
final int length;
const StickyHeaderListWidget({
Key? key,
required this.header,
this.length = 10,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return SliverStickyHeader(
header: AppBar(title: Text(header)),
sliver: SliverList(
delegate: SliverChildBuilderDelegate(
(_, i) => ListTile(title: Text('List tile $i')),
childCount: length,
),
),
);
}
}
class StickyHeadersPage extends StatelessWidget {
const StickyHeadersPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Scaffold(
body: CustomScrollView(
slivers: [
StickyHeaderListWidget(header: 'Header 1'),
StickyHeaderListWidget(header: 'Header 2'),
StickyHeaderListWidget(header: 'Header 3', length: 20),
],
),
);
}
}
结果
在flutter中是否可以在同一个页面中有两个不同的appbars?我需要一个用于 header,但经过一些滚动后,另一个随 body 的其余部分一起出现,并取代了最初的那个。
是的,当您创建一个 child 时,您可以创建新的脚手架,它可以添加一个新的 AppBar
例如..
Return Scaffold(
appBar: AppBar(),
body: Center(
child: Scaffold(
appBar: AppBar()
)
)
)
然后如果你想要建造任何其他东西,你可以将它添加到第二个脚手架的主体中。
您可能想尝试包 flutter_sticky_header。
代码示例
import 'package:flutter/material.dart';
import 'package:flutter_sticky_header/flutter_sticky_header.dart';
class StickyHeaderListWidget extends StatelessWidget {
final String header;
final int length;
const StickyHeaderListWidget({
Key? key,
required this.header,
this.length = 10,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return SliverStickyHeader(
header: AppBar(title: Text(header)),
sliver: SliverList(
delegate: SliverChildBuilderDelegate(
(_, i) => ListTile(title: Text('List tile $i')),
childCount: length,
),
),
);
}
}
class StickyHeadersPage extends StatelessWidget {
const StickyHeadersPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Scaffold(
body: CustomScrollView(
slivers: [
StickyHeaderListWidget(header: 'Header 1'),
StickyHeaderListWidget(header: 'Header 2'),
StickyHeaderListWidget(header: 'Header 3', length: 20),
],
),
);
}
}