From 58850320ced0a357ba17bd76aa2ff76c59d177e6 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sun, 6 Nov 2022 13:03:34 +0600 Subject: [PATCH] feat(linux): platform tab view add --- lib/src/platform_tab_view.dart | 54 +++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/lib/src/platform_tab_view.dart b/lib/src/platform_tab_view.dart index 129107d..84aaae4 100644 --- a/lib/src/platform_tab_view.dart +++ b/lib/src/platform_tab_view.dart @@ -1,5 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:libadwaita/libadwaita.dart'; +import 'package:libadwaita_core/libadwaita_core.dart'; import 'package:macos_ui/macos_ui.dart'; import 'package:platform_ui/platform_ui.dart'; import 'package:fluent_ui/fluent_ui.dart' as FluentUI; @@ -147,6 +149,13 @@ class PlatformTab { tileColor: color != null ? FluentUI.ButtonState.all(color) : null, ); } + + ViewSwitcherData linux(BuildContext context) { + return ViewSwitcherData( + title: label, + icon: icon is Icon ? (icon as Icon).icon : null, + ); + } } class PlatformTabController extends ChangeNotifier { @@ -348,7 +357,50 @@ class _PlatformTabViewState extends State @override Widget linux(BuildContext context) { - return android(context); + final tabbar = AdwViewSwitcher( + policy: widget.placement?.linux == PlatformTabbarPlacement.bottom + ? ViewSwitcherPolicy.narrow + : ViewSwitcherPolicy.wide, + currentIndex: currentIndex, + onViewChanged: (value) { + controller.index = value; + }, + tabs: widget.body.keys.mapIndexed((i, e) => e.linux(context)).toList(), + ); + return Scaffold( + appBar: widget.placement?.linux == PlatformTabbarPlacement.top + ? PreferredSize( + preferredSize: const Size.fromHeight(kToolbarHeight), + child: AdwHeaderBar( + actions: AdwActions(), + title: Center(child: tabbar), + ), + ) + : null, + body: AdwViewStack( + index: currentIndex, + animationDuration: const Duration(milliseconds: 100), + children: widget.body.values.toList(), + ), + bottomNavigationBar: + widget.placement?.linux == PlatformTabbarPlacement.bottom + ? SizedBox.fromSize( + size: const Size.fromHeight(kToolbarHeight - 9), + child: Container( + decoration: BoxDecoration( + border: Border( + top: BorderSide( + color: Theme.of(context).dividerColor, + width: 1, + ), + ), + color: Theme.of(context).appBarTheme.backgroundColor, + ), + child: Center(child: tabbar), + ), + ) + : null, + ); } @override