import 'package:flutter/material.dart'; import 'package:flutter_hbb/mobile/pages/server_page.dart'; import 'package:flutter_hbb/mobile/pages/settings_page.dart'; import 'package:get/get.dart'; import '../../common.dart'; import '../../common/widgets/chat_page.dart'; import 'connection_page.dart'; abstract class PageShape extends Widget { final String title = ""; final Widget icon = Icon(null); final List appBarActions = []; } class HomePage extends StatefulWidget { static final homeKey = GlobalKey<_HomePageState>(); HomePage() : super(key: homeKey); @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State { var _selectedIndex = 0; int get selectedIndex => _selectedIndex; final List _pages = []; bool get isChatPageCurrentTab => isAndroid ? _selectedIndex == 1 : false; // change this when ios have chat page void refreshPages() { setState(() { initPages(); }); } @override void initState() { super.initState(); initPages(); } void initPages() { _pages.clear(); _pages.add(ConnectionPage()); if (isAndroid) { _pages.addAll([ChatPage(type: ChatPageType.mobileMain), ServerPage()]); } _pages.add(SettingsPage()); } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async { if (_selectedIndex != 0) { setState(() { _selectedIndex = 0; }); } else { return true; } return false; }, child: Scaffold( // backgroundColor: MyTheme.grayBg, appBar: AppBar( centerTitle: true, title: appTitle(), actions: _pages.elementAt(_selectedIndex).appBarActions, ), bottomNavigationBar: BottomNavigationBar( key: navigationBarKey, items: _pages .map((page) => BottomNavigationBarItem(icon: page.icon, label: page.title)) .toList(), currentIndex: _selectedIndex, type: BottomNavigationBarType.fixed, selectedItemColor: MyTheme.accent, // unselectedItemColor: MyTheme.darkGray, onTap: (index) => setState(() { // close chat overlay when go chat page if (_selectedIndex != index) { _selectedIndex = index; if (isChatPageCurrentTab) { gFFI.chatModel.hideChatIconOverlay(); gFFI.chatModel.hideChatWindowOverlay(); gFFI.chatModel.mobileClearClientUnread( gFFI.chatModel.currentKey.connId); } } }), ), body: _pages.elementAt(_selectedIndex), )); } Widget appTitle() { final currentUser = gFFI.chatModel.currentUser; final currentKey = gFFI.chatModel.currentKey; if (isChatPageCurrentTab && currentUser != null && currentKey.peerId.isNotEmpty) { final connected = gFFI.serverModel.clients.any((e) => e.id == currentKey.connId); return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Tooltip( message: currentKey.isOut ? translate('Outgoing connection') : translate('Incoming connection'), child: Icon( currentKey.isOut ? Icons.call_made_rounded : Icons.call_received_rounded, ), ), Expanded( child: Center( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "${currentUser.firstName} ${currentUser.id}", ), if (connected) Container( width: 10, height: 10, decoration: BoxDecoration( shape: BoxShape.circle, color: Color.fromARGB(255, 133, 246, 199)), ).marginSymmetric(horizontal: 2), ], ), ), ), ], ); } return Text("RustDesk"); } } class WebHomePage extends StatelessWidget { final connectionPage = ConnectionPage(); @override Widget build(BuildContext context) { return Scaffold( // backgroundColor: MyTheme.grayBg, appBar: AppBar( centerTitle: true, title: Text("RustDesk" + (isWeb ? " (Beta) " : "")), actions: connectionPage.appBarActions, ), body: connectionPage, ); } }