Improve TabBar

This commit is contained in:
2024-12-09 20:07:08 +08:00
parent 72b146a9bf
commit 463805f5ed

View File

@@ -189,20 +189,19 @@ class _MySliverAppBarDelegate extends SliverPersistentHeaderDelegate {
leading ?? leading ??
(Navigator.of(context).canPop() (Navigator.of(context).canPop()
? Tooltip( ? Tooltip(
message: "Back".tl, message: "Back".tl,
child: IconButton( child: IconButton(
icon: const Icon(Icons.arrow_back), icon: const Icon(Icons.arrow_back),
onPressed: () => Navigator.maybePop(context), onPressed: () => Navigator.maybePop(context),
), ),
) )
: const SizedBox()), : const SizedBox()),
const SizedBox( const SizedBox(
width: 16, width: 16,
), ),
Expanded( Expanded(
child: DefaultTextStyle( child: DefaultTextStyle(
style: style: DefaultTextStyle.of(context).style.copyWith(fontSize: 20),
DefaultTextStyle.of(context).style.copyWith(fontSize: 20),
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
child: title, child: title,
@@ -215,7 +214,7 @@ class _MySliverAppBarDelegate extends SliverPersistentHeaderDelegate {
], ],
).paddingTop(topPadding); ).paddingTop(topPadding);
if(style == AppbarStyle.blur) { if (style == AppbarStyle.blur) {
return SizedBox.expand( return SizedBox.expand(
child: BlurEffect( child: BlurEffect(
blur: 15, blur: 15,
@@ -281,9 +280,7 @@ class _FilledTabBarState extends State<FilledTabBar> {
_IndicatorPainter? painter; _IndicatorPainter? painter;
var scrollController = ScrollController( var scrollController = ScrollController();
keepScrollOffset: false
);
var tabBarKey = GlobalKey(); var tabBarKey = GlobalKey();
@@ -305,15 +302,16 @@ class _FilledTabBarState extends State<FilledTabBar> {
@override @override
void didChangeDependencies() { void didChangeDependencies() {
_controller = widget.controller ?? DefaultTabController.of(context); _controller = widget.controller ?? DefaultTabController.of(context);
_controller.animation!.addListener(onTabChanged);
initPainter(); initPainter();
super.didChangeDependencies(); super.didChangeDependencies();
var prevIndex = bucket.readState(context) as int?; var prevIndex = bucket.readState(context) as int?;
if (prevIndex != null && prevIndex != _controller.index) { if (prevIndex != null &&
Future.microtask(() { prevIndex != _controller.index &&
_controller.index = prevIndex; prevIndex >= 0 &&
}); prevIndex < widget.tabs.length) {
_controller.index = prevIndex;
} }
_controller.animation!.addListener(onTabChanged);
} }
@override @override
@@ -357,6 +355,7 @@ class _FilledTabBarState extends State<FilledTabBar> {
controller: scrollController, controller: scrollController,
builder: (context, controller, physics) { builder: (context, controller, physics) {
return SingleChildScrollView( return SingleChildScrollView(
key: const PageStorageKey('scroll'),
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
controller: controller, controller: controller,