Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'package:flutter/material.dart';
- import 'package:english_words/english_words.dart';
- void main() => runApp(MyApp());
- class MyApp extends StatelessWidget {
- @override
- Widget build(BuildContext context) {
- return MaterialApp(
- title: 'Startup Name Generator',
- theme: new ThemeData(
- // Add the 3 lines from here...
- primaryColor: Colors.deepPurple,
- ), // ... to here.
- home: RandomWords(),
- );
- }
- }
- class RandomWordsState extends State<RandomWords> {
- final _suggestions = <WordPair>[];
- final Set<WordPair> _saved = new Set<WordPair>();
- final _biggerFont = const TextStyle(fontSize: 18.0);
- Widget _buildSuggestions() {
- return ListView.builder(
- padding: const EdgeInsets.all(16.0),
- // and places each suggestion into a ListTile row.
- // For even rows, the function adds a ListTile row for the word pairing.
- // For odd rows, the function adds a Divider widget to visually
- // separate the entries. Note that the divider may be difficult
- // to see on smaller devices.
- itemBuilder: (context, i) {
- // Add a one-pixel-high divider widget before each row in theListView.
- if (i.isOdd) return Divider();
- // The syntax "i ~/ 2" divides i by 2 and returns an integer result.
- // For example: 1, 2, 3, 4, 5 becomes 0, 1, 1, 2, 2.
- // This calculates the actual number of word pairings in the ListView,
- // minus the divider widgets.
- final index = i ~/ 2;
- // If you've reached the end of the available word pairings...
- if (index >= _suggestions.length) {
- // ...then generate 10 more and add them to the suggestions list.
- _suggestions.addAll(generateWordPairs().take(10));
- }
- return _buildRow(_suggestions[index]);
- });
- }
- Widget _buildRow(WordPair pair) {
- final bool alreadySaved = _saved.contains(pair);
- return ListTile(
- title: Text(
- pair.asPascalCase,
- style: _biggerFont,
- ),
- trailing: new Icon(
- // Add the lines from here...
- alreadySaved ? Icons.favorite : Icons.favorite_border,
- color: alreadySaved ? Colors.red : null,
- ), // ... to here.
- onTap: () {
- // Add 9 lines from here...
- setState(() {
- if (alreadySaved) {
- _saved.remove(pair);
- } else {
- _saved.add(pair);
- }
- });
- }, // ... to here.
- );
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- title: Text('Startup Name Generator'),
- actions: <Widget>[
- // Add 3 lines from here...
- new IconButton(icon: const Icon(Icons.list), onPressed: _pushSaved),
- ],
- ),
- body: _buildSuggestions(),
- );
- }
- void _pushSaved() {
- Navigator.of(context).push(
- new MaterialPageRoute<void>(
- builder: (BuildContext context) {
- final Iterable<ListTile> tiles = _saved.map(
- (WordPair pair) {
- return new ListTile(
- title: new Text(
- pair.asPascalCase,
- style: _biggerFont,
- ),
- );
- },
- );
- final List<Widget> divided = ListTile.divideTiles(
- context: context,
- tiles: tiles,
- ).toList();
- return new Scaffold(
- // Add 6 lines from here...
- appBar: new AppBar(
- title: const Text('Saved Suggestions'),
- ),
- body: new ListView(children: divided),
- ); // ... to here.
- },
- ),
- );
- }
- }
- class RandomWords extends StatefulWidget {
- @override
- RandomWordsState createState() => new RandomWordsState();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement