2022-09-26 13:51:18 +02:00
|
|
|
import 'package:flutter/material.dart';
|
2022-10-29 19:25:58 +02:00
|
|
|
import 'package:flutter/rendering.dart';
|
2022-09-26 18:49:41 +02:00
|
|
|
import 'package:provider/provider.dart';
|
2022-10-29 19:25:58 +02:00
|
|
|
import 'package:expandable/expandable.dart';
|
2023-05-04 20:23:29 +02:00
|
|
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
2022-09-26 18:49:41 +02:00
|
|
|
|
2022-10-09 01:47:03 +02:00
|
|
|
import 'package:adguard_home_manager/screens/connect/fab.dart';
|
2022-09-26 22:43:30 +02:00
|
|
|
import 'package:adguard_home_manager/widgets/servers_list/servers_list.dart';
|
|
|
|
|
2022-09-26 18:49:41 +02:00
|
|
|
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
2022-10-29 19:25:58 +02:00
|
|
|
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
2022-09-26 13:51:18 +02:00
|
|
|
|
2022-09-26 22:43:30 +02:00
|
|
|
class Connect extends StatefulWidget {
|
2023-12-09 04:04:14 +01:00
|
|
|
const Connect({super.key});
|
2022-09-26 13:51:18 +02:00
|
|
|
|
2022-09-26 22:43:30 +02:00
|
|
|
@override
|
|
|
|
State<Connect> createState() => _ConnectState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _ConnectState extends State<Connect> {
|
|
|
|
List<ExpandableController> expandableControllerList = [];
|
|
|
|
|
2022-10-29 19:25:58 +02:00
|
|
|
late bool isVisible;
|
|
|
|
final ScrollController scrollController = ScrollController();
|
|
|
|
|
2022-09-26 22:43:30 +02:00
|
|
|
void expandOrContract(int index) async {
|
|
|
|
expandableControllerList[index].expanded = !expandableControllerList[index].expanded;
|
|
|
|
}
|
|
|
|
|
2022-10-29 19:25:58 +02:00
|
|
|
@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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2022-09-26 13:51:18 +02:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
2022-09-26 18:49:41 +02:00
|
|
|
final serversProvider = Provider.of<ServersProvider>(context);
|
2022-10-29 19:25:58 +02:00
|
|
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
2022-09-26 18:49:41 +02:00
|
|
|
|
2022-09-26 22:43:30 +02:00
|
|
|
for (var i = 0; i < serversProvider.serversList.length; i++) {
|
|
|
|
expandableControllerList.add(ExpandableController());
|
|
|
|
}
|
|
|
|
|
2022-10-09 01:43:09 +02:00
|
|
|
return Scaffold(
|
2023-05-04 20:23:29 +02:00
|
|
|
appBar: AppBar(
|
|
|
|
title: Text(AppLocalizations.of(context)!.connect),
|
|
|
|
),
|
2023-12-09 04:04:14 +01:00
|
|
|
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()
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
2022-10-09 01:43:09 +02:00
|
|
|
),
|
2022-09-26 22:43:30 +02:00
|
|
|
);
|
2022-09-26 13:51:18 +02:00
|
|
|
}
|
|
|
|
}
|