* fix some warnings and some deprecated reported by `flutter analyze` Signed-off-by: 21pages <pages21@163.com> * pubspec.lock changes from flutter 3.16.9 Signed-off-by: 21pages <pages21@163.com> * pubspec.lock changes from `flutter pub upgrade` Signed-off-by: 21pages <pages21@163.com> --------- Signed-off-by: 21pages <pages21@163.com>
		
			
				
	
	
		
			164 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
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<Widget> appBarActions = [];
 | 
						|
}
 | 
						|
 | 
						|
class HomePage extends StatefulWidget {
 | 
						|
  static final homeKey = GlobalKey<HomePageState>();
 | 
						|
 | 
						|
  HomePage() : super(key: homeKey);
 | 
						|
 | 
						|
  @override
 | 
						|
  HomePageState createState() => HomePageState();
 | 
						|
}
 | 
						|
 | 
						|
class HomePageState extends State<HomePage> {
 | 
						|
  var _selectedIndex = 0;
 | 
						|
  int get selectedIndex => _selectedIndex;
 | 
						|
  final List<PageShape> _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,
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |