added fading scroll; widget refactorings

This commit is contained in:
Fabian Freund
2024-08-28 15:52:21 +02:00
parent 7fedbe260c
commit 7708f46f15
11 changed files with 622 additions and 571 deletions
@@ -1,3 +1,4 @@
import 'package:fading_scroll/fading_scroll.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
@@ -29,19 +30,26 @@ class ChatArchiveListScreen extends HookConsumerWidget {
enabled: chatsAsync.isLoading,
child: chatsAsync.when(
data: (chats) {
return ListView.builder(
itemCount: chats.length,
itemBuilder: (context, index) {
final chat = chats[index];
return FadingScroll(
fadingSize: 25,
builder: (context, controller) {
return ListView.builder(
controller: controller,
itemCount: chats.length,
itemBuilder: (context, index) {
final chat = chats[index];
return ListTile(
title: Text(chat.toString()),
subtitle: (chat.dateTime != null)
? Text(chat.dateTime!.formatWithMinutePrecision())
: null,
onTap: () async {
await context.push(
ChatArchiveDetailRoute(fileName: chat.fileName).location,
return ListTile(
title: Text(chat.toString()),
subtitle: (chat.dateTime != null)
? Text(chat.dateTime!.formatWithMinutePrecision())
: null,
onTap: () async {
await context.push(
ChatArchiveDetailRoute(fileName: chat.fileName)
.location,
);
},
);
},
);
@@ -1,5 +1,6 @@
import 'dart:async';
import 'package:fading_scroll/fading_scroll.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
@@ -60,43 +61,52 @@ class ChatArchiveSearchScreen extends HookConsumerWidget {
),
body: resultsAsync.when(
skipLoadingOnReload: true,
data: (chats) => ListView.builder(
itemCount: chats.length,
itemBuilder: (context, index) {
final chat = chats[index];
final chatEntity = ChatEntity.fromFileName(chat.fileName);
data: (chats) => FadingScroll(
fadingSize: 25,
builder: (context, controller) {
return ListView.builder(
controller: controller,
itemCount: chats.length,
itemBuilder: (context, index) {
final chat = chats[index];
final chatEntity = ChatEntity.fromFileName(chat.fileName);
return Card(
clipBehavior: Clip.antiAlias,
child: InkWell(
onTap: () async {
await context.push(
ChatArchiveDetailRoute(fileName: chat.fileName).location,
);
},
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Markdown(
shrinkWrap: true,
padding: EdgeInsets.zero,
data: '## ${chat.title}',
return Card(
clipBehavior: Clip.antiAlias,
child: InkWell(
onTap: () async {
await context.push(
ChatArchiveDetailRoute(fileName: chat.fileName)
.location,
);
},
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Markdown(
shrinkWrap: true,
padding: EdgeInsets.zero,
data: '## ${chat.title}',
),
if (chatEntity.dateTime != null)
Text(
chatEntity.dateTime!.formatWithMinutePrecision(),
),
const SizedBox(height: 8.0),
Markdown(
shrinkWrap: true,
padding: EdgeInsets.zero,
data: chat.contentSnippet,
),
],
),
if (chatEntity.dateTime != null)
Text(chatEntity.dateTime!.formatWithMinutePrecision()),
const SizedBox(height: 8.0),
Markdown(
shrinkWrap: true,
padding: EdgeInsets.zero,
data: chat.contentSnippet,
),
],
),
),
),
),
);
},
);
},
),