Updated home appbar

This commit is contained in:
Juan Gilsanz Polo 2023-05-18 11:13:03 +02:00
parent baed03e0c3
commit 8dffb83fd0
3 changed files with 223 additions and 210 deletions

View file

@ -55,6 +55,7 @@ class HomeAppBar extends StatelessWidget {
: Theme.of(context).colorScheme.onSurface.withOpacity(0.38)
),
title: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (serversProvider.selectedServer != null) ...[

View file

@ -2,7 +2,6 @@
import 'dart:io';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:provider/provider.dart';
@ -17,6 +16,7 @@ import 'package:adguard_home_manager/screens/home/chart.dart';
import 'package:adguard_home_manager/functions/number_format.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class Home extends StatefulWidget {
@ -58,9 +58,7 @@ class _HomeState extends State<Home> {
final width = MediaQuery.of(context).size.width;
Widget status() {
switch (serversProvider.serverStatus.loadStatus) {
case 0:
Widget loading() {
return SizedBox(
width: double.maxFinite,
child: Column(
@ -80,10 +78,36 @@ class _HomeState extends State<Home> {
],
),
);
}
case 1:
return ListView(
Widget loadError() {
return SizedBox(
width: double.maxFinite,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Icon(
Icons.error,
color: Colors.red,
size: 50,
),
const SizedBox(height: 30),
Text(
AppLocalizations.of(context)!.errorLoadServerStatus,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 22,
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
)
],
),
);
}
List<Widget> listItems() {
return [
ServerStatus(serverStatus: serversProvider.serverStatus.data!),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
@ -226,37 +250,7 @@ class _HomeState extends State<Home> {
),
],
)
],
);
case 2:
return SizedBox(
width: double.maxFinite,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Icon(
Icons.error,
color: Colors.red,
size: 50,
),
const SizedBox(height: 30),
Text(
AppLocalizations.of(context)!.errorLoadServerStatus,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 22,
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
)
],
),
);
default:
return const SizedBox();
}
];
}
return Scaffold(
@ -270,7 +264,11 @@ class _HomeState extends State<Home> {
sliver: HomeAppBar(innerBoxScrolled: innerBoxIsScrolled,)
)
],
body: RefreshIndicator(
body: SafeArea(
top: false,
bottom: false,
child: Builder(
builder: (context) => RefreshIndicator(
color: Theme.of(context).colorScheme.primary,
onRefresh: () async {
final result = await getServerStatus(serversProvider.selectedServer!);
@ -286,8 +284,25 @@ class _HomeState extends State<Home> {
);
}
},
child: status()
child: CustomScrollView(
slivers: [
SliverOverlapInjector(
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
),
if (serversProvider.serverStatus.loadStatus == 0) SliverFillRemaining(
child: loading(),
),
if (serversProvider.serverStatus.loadStatus == 1) SliverList.list(
children: listItems()
),
if (serversProvider.serverStatus.loadStatus == 2) SliverFillRemaining(
child: loadError(),
),
],
)
),
)
)
),
AnimatedPositioned(
duration: const Duration(milliseconds: 100),

View file

@ -18,9 +18,7 @@ class ServerStatus extends StatelessWidget {
final width = MediaQuery.of(context).size.width;
return Container(
padding: width > 700
? const EdgeInsets.only(left: 20, right: 20, bottom: 20)
: const EdgeInsets.all(20),
padding: const EdgeInsets.only(left: 20, right: 20, bottom: 10),
child: Column(
children: [
Text(
@ -31,9 +29,8 @@ class ServerStatus extends StatelessWidget {
color: Theme.of(context).colorScheme.onSurface
),
),
const SizedBox(height: 20),
SizedBox(
height: width > 700 ? 70 : 140,
height: width > 700 ? 90 : 170,
child: GridView(
physics: const NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(