import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../model/collection.dart'; import '../service/bookmarks_provider.dart'; import '../service/shared_link_provider.dart'; import '../service/storage.dart'; import '../widgets/create_bookmark_collection_dialog.dart'; import 'collection_page.dart'; class CollectionsListPage extends StatefulWidget { const CollectionsListPage({super.key}); static const String routeName = '/collections'; @override State createState() => _CollectionsListPageState(); } class _CollectionsListPageState extends State { final collections = Storage.loadCollections(); bool addingNewBookmark = false; @override Widget build(BuildContext context) { final provider = context.watch(); addingNewBookmark = provider.currentMapsLinkMetadata != null; return Scaffold( appBar: AppBar( title: addingNewBookmark ? Text('Choose Collection') : null, actions: [ if (addingNewBookmark) TextButton( onPressed: () => provider.removeCurrentMapsLink(), child: Text('Cancel'), ), ], ), floatingActionButton: FloatingActionButton( onPressed: onAddButtonPressed, child: Icon(Icons.add), ), body: ListView.builder( itemBuilder: itemBuilder, itemCount: collections.length, ), // bottomSheet: provider.currentMapsLinkMetadata == null // ? null // : BottomSheet(onClosing: () {}, builder: bottomSheetBuilder), ); } Widget bottomSheetBuilder(BuildContext context) { final titleTextFieldController = TextEditingController( text: context .read() .currentMapsLinkMetadata! .placeName, ); return SizedBox( height: 200, child: TextField(controller: titleTextFieldController), ); } void onAddButtonPressed() => showDialog( context: context, builder: (context) => CreateBookmarkCollectionDialog(onSavePressed: onCollectionSaved), ).whenComplete(() { if (addingNewBookmark) navigateToCollection(collections.last.id); }); void onCollectionSaved(String name) { collections.add(Collection(name: name)); Storage.saveCollections(collections); setState(() {}); } Widget itemBuilder(BuildContext context, int index) { final collection = collections.elementAt(index); return ListTile( title: Text(collection.name), onTap: () => navigateToCollection(collection.id), ); } void navigateToCollection(int collectionId) { BookmarksProvider.selectedCollectionId = collectionId; Navigator.pushNamed(context, CollectionPage.routeName); } @override void didChangeDependencies() { super.didChangeDependencies(); } }