import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:provider/provider.dart'; import 'package:expandable/expandable.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/connect/fab.dart'; import 'package:adguard_home_manager/widgets/servers_list/servers_list.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; class Connect extends StatefulWidget { const Connect({super.key}); @override State createState() => _ConnectState(); } class _ConnectState extends State { List expandableControllerList = []; late bool isVisible; final ScrollController scrollController = ScrollController(); void expandOrContract(int index) async { expandableControllerList[index].expanded = !expandableControllerList[index].expanded; } @override void initState() { super.initState(); isVisible = true; scrollController.addListener(() { if (scrollController.position.userScrollDirection == ScrollDirection.reverse) { if (mounted && isVisible == true) { setState(() => isVisible = false); } } else { if (scrollController.position.userScrollDirection == ScrollDirection.forward) { if (mounted && isVisible == false) { setState(() => isVisible = true); } } } }); } @override Widget build(BuildContext context) { final serversProvider = Provider.of(context); final appConfigProvider = Provider.of(context); for (var i = 0; i < serversProvider.serversList.length; i++) { expandableControllerList.add(ExpandableController()); } return Scaffold( appBar: AppBar( title: Text(AppLocalizations.of(context)!.connect), ), body: SafeArea( child: Stack( children: [ ServersList( context: context, controllers: expandableControllerList, onChange: expandOrContract, scrollController: scrollController, breakingWidth: 700, ), AnimatedPositioned( duration: const Duration(milliseconds: 100), curve: Curves.easeInOut, bottom: isVisible ? appConfigProvider.showingSnackbar ? 90 : 20 : -90, right: 20, child: const FabConnect() ) ], ), ), ); } }