diff --git a/lib/main.dart b/lib/main.dart index c682d92..28ea638 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,79 +9,105 @@ void main() { runApp(const MyApp()); } -// #docregion MyApp class MyApp extends StatelessWidget { const MyApp({super.key}); - // #docregion build @override Widget build(BuildContext context) { - return MaterialApp( + return const MaterialApp( title: 'Startup Name Generator', - home: Scaffold( - appBar: AppBar( - title: const Text('Startup Name Generator'), - ), - body: const Center( - child: RandomWords(), - ), + home: RandomWords(), + ); + } +} + +class _RandomWordsState extends State { + final _suggestions = []; + final _saved = {}; + final _biggerFont = const TextStyle(fontSize: 18); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Startup Name Generator'), + actions: [ + IconButton( + icon: const Icon(Icons.list), + onPressed: _pushSaved, + tooltip: 'Saved Suggestions', + ), + ], + ), + body: ListView.builder( + padding: const EdgeInsets.all(16.0), + itemBuilder: (context, i) { + if (i.isOdd) return const Divider(); + + final index = i ~/ 2; + if (index >= _suggestions.length) { + _suggestions.addAll(generateWordPairs().take(10)); + } + + final alreadySaved = _saved.contains(_suggestions[index]); + + return ListTile( + title: Text( + _suggestions[index].asPascalCase, + style: _biggerFont, + ), + trailing: Icon( + alreadySaved ? Icons.favorite : Icons.favorite_border, + color: alreadySaved ? Colors.red : null, + semanticLabel: alreadySaved ? 'Remove from saved' : 'Save', + ), + onTap: () { + setState(() { + if (alreadySaved) { + _saved.remove(_suggestions[index]); + } else { + _saved.add(_suggestions[index]); + } + }); + }, + ); + }, ), ); } - // #enddocregion build -} -// #enddocregion MyApp -// #docregion RWS-var -class _RandomWordsState extends State { - final _suggestions = []; - final _saved = {}; // NEW - final _biggerFont = const TextStyle(fontSize: 36); - // #enddocregion RWS-var + void _pushSaved() { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) { + final tiles = _saved.map( + (pair) { + return ListTile( + title: Text( + pair.asPascalCase, + style: _biggerFont, + ), + ); + }, + ); + final divided = tiles.isNotEmpty + ? ListTile.divideTiles( + context: context, + tiles: tiles, + ).toList() + : []; - // #docregion RWS-build - @override - Widget build(BuildContext context) { - // #docregion itemBuilder - return ListView.builder( - padding: const EdgeInsets.all(16.0), - itemBuilder: /*1*/ (context, i) { - if (i.isOdd) return const Divider(); /*2*/ - - final index = i ~/ 2; /*3*/ - if (index >= _suggestions.length) { - _suggestions.addAll(generateWordPairs().take(10)); /*4*/ - } - final alreadySaved = _saved.contains(_suggestions[index]); // NEW - // #docregion listTile - return ListTile( - title: Text( - _suggestions[index].asPascalCase, - style: _biggerFont, - ), - trailing: Icon( // NEW from here ... - alreadySaved ? Icons.favorite : Icons.favorite_border, - color: alreadySaved ? Colors.red : null, - semanticLabel: alreadySaved ? 'Remove from saved' : 'Save', - ), - onTap: () { // NEW from here ... - setState(() { - if (alreadySaved) { - _saved.remove(_suggestions[index]); - } else { - _saved.add(_suggestions[index]); - } - }); - }); - // #enddocregion listTile - }, + return Scaffold( + appBar: AppBar( + title: const Text('Saved Suggestions'), + ), + body: ListView(children: divided), + ); + }, + ), ); - // #enddocregion itemBuilder } - // #enddocregion RWS-build - // #docregion RWS-var } -// #enddocregion RWS-var class RandomWords extends StatefulWidget { const RandomWords({super.key});