csv added

This commit is contained in:
Chinmay Chaudhari
2024-02-24 09:07:40 +05:30
parent 2c515b03cb
commit 4a519cfa0a
4 changed files with 81 additions and 0 deletions

View File

@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:csv/csv.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/widgets/widgets.dart';
class CsvPreviewer extends StatelessWidget {
const CsvPreviewer({Key? key, required this.body}) : super(key: key);
final String body;
@override
Widget build(BuildContext context) {
try {
final List<List<dynamic>> csvData = const CsvToListConverter().convert(body, eol: '\n');
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: DataTable(
columns: csvData[0]
.map(
(item) => DataColumn(
label: Text(
item.toString(),
),
),
)
.toList(),
rows: csvData
.skip(1)
.map(
(csvrow) => DataRow(
cells: csvrow
.map(
(csvItem) => DataCell(
Text(
csvItem.toString(),
),
),
)
.toList(),
),
)
.toList(),
),
);
} catch (e) {
return const ErrorMessage(message: kCsvError);
}
}
}

View File

@ -1,4 +1,5 @@
import 'dart:convert';
import 'package:apidash/widgets/csv_previewer.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:printing/printing.dart';
@ -81,6 +82,13 @@ class _PreviewerState extends State<Previewer> {
},
);
}
if (widget.type == kTypeText && widget.subtype == kSubTypeCsv) {
try {
return CsvPreviewer(body: widget.body);
} catch (e) {
return const ErrorMessage(message: kCsvError);
}
}
if (widget.type == kTypeVideo) {
// TODO: Video Player
}
@ -89,4 +97,5 @@ class _PreviewerState extends State<Previewer> {
: "$kMimeTypeRaiseIssueStart${widget.type}/${widget.subtype}$kMimeTypeRaiseIssue";
return ErrorMessage(message: message);
}
}

View File

@ -54,6 +54,7 @@ dependencies:
code_builder: ^4.9.0
dart_style: ^2.3.4
json_text_field: ^1.1.0
csv: ^5.1.1
dev_dependencies:
flutter_test:

View File

@ -231,4 +231,26 @@ void main() {
await tester.pumpAndSettle();
expect(find.text(kSvgError), findsOneWidget);
});
testWidgets('Testing when type/subtype is text/csv', (tester) async {
String csvDataString =
'Id,Name,Age\n1,John Doe,40\n2,Dbestech,41\n3,Voldermort,71\n4,Joe Biden,80\n5,Ryo Hanamura,35';
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Previewer(
type: kTypeText,
subtype: kSubTypeCsv,
bytes: Uint8List.fromList([]),
body: csvDataString,
),
),
),
);
expect(find.byType(DataTable), findsOneWidget);
expect(find.text('John Doe'), findsOneWidget);
expect(find.text('41'), findsOneWidget);
});
}