diff --git a/lib/models/shopping_item.dart b/lib/models/shopping_item.dart index c4de287..dd6ab60 100644 --- a/lib/models/shopping_item.dart +++ b/lib/models/shopping_item.dart @@ -24,4 +24,10 @@ class ShoppingItem { this.quantity = 1, this.id = 0, }); + + Map toJson() => { + 'name': name, + 'checked': checked, + 'quantity': quantity, + }; } diff --git a/lib/models/shopping_list.dart b/lib/models/shopping_list.dart index 412d9cf..58e4b23 100644 --- a/lib/models/shopping_list.dart +++ b/lib/models/shopping_list.dart @@ -18,4 +18,9 @@ class ShoppingList { required this.name, this.id = 0, }); + + Map toJson() => { + 'name': name, + 'shoppingItems': shoppingItems.map((si) => si.toJson()).toList(), + }; } diff --git a/lib/widgets/export_shopping_list.dart b/lib/widgets/export_shopping_list.dart index df10a2f..714b50c 100644 --- a/lib/widgets/export_shopping_list.dart +++ b/lib/widgets/export_shopping_list.dart @@ -1,22 +1,19 @@ +import 'dart:convert'; import 'dart:math'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:shopping_list_but_free/models/shopping_list.dart'; /// Displays a card that lets the user copy the Json encoding of /// [shoppingList] -class ExportShoppingList extends StatefulWidget { +class ExportShoppingList extends StatelessWidget { final ShoppingList shoppingList; const ExportShoppingList({ required this.shoppingList, Key? key, }) : super(key: key); - @override - State createState() => _ExportShoppingListState(); -} - -class _ExportShoppingListState extends State { @override Widget build(BuildContext context) { return Scaffold( @@ -54,7 +51,19 @@ class _ExportShoppingListState extends State { Expanded( child: Center( child: ElevatedButton.icon( - onPressed: () {}, + onPressed: () async { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text( + 'Copied shopping list code to clipboard'), + ), + ); + + await Clipboard.setData( + ClipboardData( + text: json.encode(shoppingList.toJson())), + ); + }, icon: const Icon(Icons.copy), label: const Text('Shopping list code'), ),