mirror of
https://github.com/foss42/apidash.git
synced 2025-05-21 00:09:55 +08:00
csv added
This commit is contained in:
49
lib/widgets/csv_previewer.dart
Normal file
49
lib/widgets/csv_previewer.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user