* refact: init values from initState to Constractor Signed-off-by: dignow <linlong1265@gmail.com> * fix: move RxBool init into Constructor Signed-off-by: dignow <linlong1265@gmail.com> * peer sort option Signed-off-by: dignow <linlong1265@gmail.com> * Remove empty initState() Signed-off-by: dignow <linlong1265@gmail.com> --------- Signed-off-by: dignow <linlong1265@gmail.com>
		
			
				
	
	
		
			134 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:flutter/material.dart';
 | 
						|
import 'package:flutter_hbb/common.dart';
 | 
						|
import 'package:flutter_hbb/consts.dart';
 | 
						|
import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart';
 | 
						|
import 'package:flutter_hbb/desktop/pages/desktop_setting_page.dart';
 | 
						|
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
 | 
						|
import 'package:flutter_hbb/models/platform_model.dart';
 | 
						|
import 'package:flutter_hbb/models/state_model.dart';
 | 
						|
import 'package:get/get.dart';
 | 
						|
import 'package:window_manager/window_manager.dart';
 | 
						|
// import 'package:flutter/services.dart';
 | 
						|
 | 
						|
import '../../common/shared_state.dart';
 | 
						|
 | 
						|
class DesktopTabPage extends StatefulWidget {
 | 
						|
  const DesktopTabPage({Key? key}) : super(key: key);
 | 
						|
 | 
						|
  @override
 | 
						|
  State<DesktopTabPage> createState() => _DesktopTabPageState();
 | 
						|
 | 
						|
  static void onAddSetting(
 | 
						|
      {SettingsTabKey initialPage = SettingsTabKey.general}) {
 | 
						|
    try {
 | 
						|
      DesktopTabController tabController = Get.find<DesktopTabController>();
 | 
						|
      tabController.add(TabInfo(
 | 
						|
          key: kTabLabelSettingPage,
 | 
						|
          label: kTabLabelSettingPage,
 | 
						|
          selectedIcon: Icons.build_sharp,
 | 
						|
          unselectedIcon: Icons.build_outlined,
 | 
						|
          page: DesktopSettingPage(
 | 
						|
            key: const ValueKey(kTabLabelSettingPage),
 | 
						|
            initialTabkey: initialPage,
 | 
						|
          )));
 | 
						|
    } catch (e) {
 | 
						|
      debugPrintStack(label: '$e');
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class _DesktopTabPageState extends State<DesktopTabPage>
 | 
						|
    with WidgetsBindingObserver {
 | 
						|
  final tabController = DesktopTabController(tabType: DesktopTabType.main);
 | 
						|
 | 
						|
  final RxBool _block = false.obs;
 | 
						|
  // bool mouseIn = false;
 | 
						|
 | 
						|
  _DesktopTabPageState() {
 | 
						|
    RemoteCountState.init();
 | 
						|
    Get.put<DesktopTabController>(tabController);
 | 
						|
    tabController.add(TabInfo(
 | 
						|
        key: kTabLabelHomePage,
 | 
						|
        label: kTabLabelHomePage,
 | 
						|
        selectedIcon: Icons.home_sharp,
 | 
						|
        unselectedIcon: Icons.home_outlined,
 | 
						|
        closable: false,
 | 
						|
        page: DesktopHomePage(
 | 
						|
          key: const ValueKey(kTabLabelHomePage),
 | 
						|
        )));
 | 
						|
    if (bind.isIncomingOnly()) {
 | 
						|
      tabController.onSelected = (key) {
 | 
						|
        if (key == kTabLabelHomePage) {
 | 
						|
          windowManager.setSize(getIncomingOnlyHomeSize());
 | 
						|
          setResizable(false);
 | 
						|
        } else {
 | 
						|
          windowManager.setSize(getIncomingOnlySettingsSize());
 | 
						|
          setResizable(true);
 | 
						|
        }
 | 
						|
      };
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  void didChangeAppLifecycleState(AppLifecycleState state) {
 | 
						|
    super.didChangeAppLifecycleState(state);
 | 
						|
    if (state == AppLifecycleState.resumed) {
 | 
						|
      shouldBeBlocked(_block, canBeBlocked);
 | 
						|
    } else if (state == AppLifecycleState.inactive) {}
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  void initState() {
 | 
						|
    super.initState();
 | 
						|
    // HardwareKeyboard.instance.addHandler(_handleKeyEvent);
 | 
						|
    WidgetsBinding.instance.addObserver(this);
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
  bool _handleKeyEvent(KeyEvent event) {
 | 
						|
    if (!mouseIn && event is KeyDownEvent) {
 | 
						|
      print('key down: ${event.logicalKey}');
 | 
						|
      shouldBeBlocked(_block, canBeBlocked);
 | 
						|
    }
 | 
						|
    return false; // allow it to propagate
 | 
						|
  }
 | 
						|
  */
 | 
						|
 | 
						|
  @override
 | 
						|
  void dispose() {
 | 
						|
    // HardwareKeyboard.instance.removeHandler(_handleKeyEvent);
 | 
						|
    WidgetsBinding.instance.removeObserver(this);
 | 
						|
    Get.delete<DesktopTabController>();
 | 
						|
 | 
						|
    super.dispose();
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    final tabWidget = Container(
 | 
						|
        child: Scaffold(
 | 
						|
            backgroundColor: Theme.of(context).colorScheme.background,
 | 
						|
            body: DesktopTab(
 | 
						|
              controller: tabController,
 | 
						|
              tail: Offstage(
 | 
						|
                offstage: bind.isIncomingOnly() || bind.isDisableSettings(),
 | 
						|
                child: ActionIcon(
 | 
						|
                  message: 'Settings',
 | 
						|
                  icon: IconFont.menu,
 | 
						|
                  onTap: DesktopTabPage.onAddSetting,
 | 
						|
                  isClose: false,
 | 
						|
                ),
 | 
						|
              ),
 | 
						|
              blockTab: _block,
 | 
						|
            )));
 | 
						|
    return isMacOS || kUseCompatibleUiMode
 | 
						|
        ? tabWidget
 | 
						|
        : Obx(
 | 
						|
            () => DragToResizeArea(
 | 
						|
              resizeEdgeSize: stateGlobal.resizeEdgeSize.value,
 | 
						|
              child: tabWidget,
 | 
						|
            ),
 | 
						|
          );
 | 
						|
  }
 | 
						|
}
 |