Web approach - basic look and feel done

This commit is contained in:
2026-08-29 21:52:11 +05:30
parent 364961c9de
commit 372c2bc14d
71 changed files with 2209 additions and 1044 deletions

View File

@@ -1,12 +1,16 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter/material.dart';
import 'widgets/attachment_gallery_screen.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:lucide_icons/lucide_icons.dart';
import 'package:lucide_icons_flutter/lucide_icons.dart';
import 'package:intl/intl.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart' as flutter_secure_storage;
import 'package:image_picker/image_picker.dart';
import 'package:flutter_image_compress/flutter_image_compress.dart';
import '../../../core/network/dio_client.dart';
import '../../../core/widgets/responsive_layout.dart';
import '../providers/providers.dart';
import '../data/models.dart';
import '../../../core/utils/snackbar_service.dart';
@@ -133,11 +137,16 @@ class _AddTransactionScreenState extends ConsumerState<AddTransactionScreen> {
final XFile? image = await _picker.pickImage(source: source);
if (image != null) {
final bytes = await image.readAsBytes();
final compressedBytes = await FlutterImageCompress.compressWithList(
bytes,
minWidth: 600,
quality: 80,
);
Uint8List compressedBytes = bytes;
if (!kIsWeb) {
try {
compressedBytes = await FlutterImageCompress.compressWithList(
bytes,
minWidth: 600,
quality: 80,
);
} catch (_) {}
}
final base64String = base64Encode(compressedBytes);
setState(() {
base64Attachments.add({
@@ -751,8 +760,10 @@ class _AddTransactionScreenState extends ConsumerState<AddTransactionScreen> {
)
],
),
body: SafeArea(
child: SingleChildScrollView(
body: MaxContentWidth(
maxWidth: 800,
child: SafeArea(
child: SingleChildScrollView(
padding: const EdgeInsets.all(24.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
@@ -988,7 +999,7 @@ class _AddTransactionScreenState extends ConsumerState<AddTransactionScreen> {
borderRadius: BorderRadius.circular(8),
image: DecorationImage(
image: _jwtToken != null
? NetworkImage('https://app.technobeesolutions.in/api/kifi-v2/transactions/${widget.transaction!.id}/attachments/${att.id}/content', headers: {'Authorization': 'Bearer $_jwtToken'})
? NetworkImage('${DioClient().dio.options.baseUrl}/transactions/${widget.transaction!.id}/attachments/${att.id}/content', headers: {'Authorization': 'Bearer $_jwtToken'})
: const AssetImage('assets/images/placeholder.png') as ImageProvider,
fit: BoxFit.cover,
),
@@ -1096,6 +1107,7 @@ class _AddTransactionScreenState extends ConsumerState<AddTransactionScreen> {
),
),
),
),
);
}
@@ -1105,7 +1117,7 @@ class _AddTransactionScreenState extends ConsumerState<AddTransactionScreen> {
// Add existing attachments
for (final att in existingAttachments) {
if (_jwtToken != null) {
allImages.add(NetworkImage('https://app.technobeesolutions.in/api/kifi-v2/transactions/${widget.transaction!.id}/attachments/${att.id}/content', headers: {'Authorization': 'Bearer $_jwtToken'}));
allImages.add(NetworkImage('${DioClient().dio.options.baseUrl}/transactions/${widget.transaction!.id}/attachments/${att.id}/content', headers: {'Authorization': 'Bearer $_jwtToken'}));
} else {
allImages.add(const AssetImage('assets/images/placeholder.png'));
}