mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-04-25 16:26:07 +00:00
Updated scroll screens
This commit is contained in:
parent
31f5e045c8
commit
a57a65f12a
2 changed files with 490 additions and 418 deletions
|
@ -82,9 +82,8 @@ class LogDetailsScreen extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
Widget content() {
|
||||
return ListView(
|
||||
children: [
|
||||
List<Widget> content() {
|
||||
return [
|
||||
SectionLabel(label: AppLocalizations.of(context)!.status),
|
||||
LogListTile(
|
||||
icon: Icons.shield_rounded,
|
||||
|
@ -206,8 +205,7 @@ class LogDetailsScreen extends StatelessWidget {
|
|||
)
|
||||
)).toList()
|
||||
]
|
||||
],
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
if (dialog) {
|
||||
|
@ -269,7 +267,9 @@ class LogDetailsScreen extends StatelessWidget {
|
|||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
child: content(),
|
||||
child: ListView(
|
||||
children: content(),
|
||||
)
|
||||
),
|
||||
)
|
||||
],
|
||||
|
@ -279,8 +279,15 @@ class LogDetailsScreen extends StatelessWidget {
|
|||
}
|
||||
else {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
body: NestedScrollView(
|
||||
headerSliverBuilder: (context, innerBoxIsScrolled) => [
|
||||
SliverOverlapAbsorber(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
sliver: SliverAppBar.large(
|
||||
pinned: true,
|
||||
floating: true,
|
||||
centerTitle: false,
|
||||
forceElevated: innerBoxIsScrolled,
|
||||
title: Text(AppLocalizations.of(context)!.logDetails),
|
||||
actions: [
|
||||
IconButton(
|
||||
|
@ -307,7 +314,25 @@ class LogDetailsScreen extends StatelessWidget {
|
|||
const SizedBox(width: 10)
|
||||
],
|
||||
),
|
||||
body: content(),
|
||||
)
|
||||
],
|
||||
body: SafeArea(
|
||||
top: false,
|
||||
bottom: false,
|
||||
child: Builder(
|
||||
builder: (context) => CustomScrollView(
|
||||
slivers: [
|
||||
SliverOverlapInjector(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
),
|
||||
SliverList.list(
|
||||
children: content()
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,7 +192,17 @@ class _LogsState extends State<Logs> {
|
|||
Widget generateBody() {
|
||||
switch (logsProvider.loadStatus) {
|
||||
case LoadStatus.loading:
|
||||
return SizedBox(
|
||||
return SafeArea(
|
||||
top: false,
|
||||
bottom: false,
|
||||
child: Builder(
|
||||
builder: (context) => CustomScrollView(
|
||||
slivers: [
|
||||
SliverOverlapInjector(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
),
|
||||
SliverFillRemaining(
|
||||
child: SizedBox(
|
||||
width: double.maxFinite,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
@ -209,20 +219,25 @@ class _LogsState extends State<Logs> {
|
|||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
case LoadStatus.loaded:
|
||||
return RefreshIndicator(
|
||||
onRefresh: () async {
|
||||
await logsProvider.fetchLogs(inOffset: 0);
|
||||
},
|
||||
child: logsProvider.logsData!.data.isNotEmpty
|
||||
? ListView.builder(
|
||||
controller: scrollController,
|
||||
padding: const EdgeInsets.only(top: 0),
|
||||
itemCount: logsProvider.isLoadingMore == true
|
||||
? logsProvider.logsData!.data.length+1
|
||||
: logsProvider.logsData!.data.length,
|
||||
return SafeArea(
|
||||
top: false,
|
||||
bottom: false,
|
||||
child: Builder(
|
||||
builder: (context) => CustomScrollView(
|
||||
slivers: [
|
||||
SliverOverlapInjector(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
),
|
||||
if (logsProvider.logsData!.data.isNotEmpty) SliverList.builder(
|
||||
itemCount: logsProvider.logsData!.data.length,
|
||||
itemBuilder: (context, index) {
|
||||
if (logsProvider.isLoadingMore == true && index == logsProvider.logsData!.data.length) {
|
||||
return const Padding(
|
||||
|
@ -255,8 +270,9 @@ class _LogsState extends State<Logs> {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
)
|
||||
: Center(
|
||||
),
|
||||
if (logsProvider.logsData!.data.isEmpty) SliverFillRemaining(
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
|
@ -284,11 +300,25 @@ class _LogsState extends State<Logs> {
|
|||
),
|
||||
]
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
case LoadStatus.error:
|
||||
return SizedBox(
|
||||
return SafeArea(
|
||||
top: false,
|
||||
bottom: false,
|
||||
child: Builder(
|
||||
builder: (context) => CustomScrollView(
|
||||
slivers: [
|
||||
SliverOverlapInjector(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
),
|
||||
SliverFillRemaining(
|
||||
child: SizedBox(
|
||||
width: double.maxFinite,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
@ -309,6 +339,11 @@ class _LogsState extends State<Logs> {
|
|||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
default:
|
||||
|
@ -318,9 +353,18 @@ class _LogsState extends State<Logs> {
|
|||
|
||||
Widget logsScreen() {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(AppLocalizations.of(context)!.logs),
|
||||
body: NestedScrollView(
|
||||
headerSliverBuilder: (context, innerBoxIsScrolled) => [
|
||||
SliverOverlapAbsorber(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
sliver: SliverAppBar.large(
|
||||
pinned: true,
|
||||
floating: true,
|
||||
centerTitle: false,
|
||||
forceElevated: innerBoxIsScrolled,
|
||||
title: Text(AppLocalizations.of(context)!.logs),
|
||||
expandedHeight: logsProvider.appliedFilters.searchText != null || logsProvider.appliedFilters.selectedResultStatus != 'all' || logsProvider.appliedFilters.clients != null
|
||||
? 170 : null,
|
||||
actions: [
|
||||
if (!(Platform.isAndroid || Platform.isIOS)) IconButton(
|
||||
onPressed: () => logsProvider.fetchLogs(inOffset: 0),
|
||||
|
@ -369,7 +413,7 @@ class _LogsState extends State<Logs> {
|
|||
],
|
||||
bottom: logsProvider.appliedFilters.searchText != null || logsProvider.appliedFilters.selectedResultStatus != 'all' || logsProvider.appliedFilters.clients != null
|
||||
? PreferredSize(
|
||||
preferredSize: const Size(double.maxFinite, 50),
|
||||
preferredSize: const Size(double.maxFinite, 70),
|
||||
child: Container(
|
||||
height: 50,
|
||||
width: double.maxFinite,
|
||||
|
@ -494,7 +538,10 @@ class _LogsState extends State<Logs> {
|
|||
)
|
||||
: null,
|
||||
),
|
||||
)
|
||||
],
|
||||
body: generateBody()
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue