Guest User

Untitled

a guest
Apr 26th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. // Final app - the app's primary color is now white.
  2.  
  3. import 'package:flutter/material.dart';
  4. import 'package:english_words/english_words.dart';
  5.  
  6. void main() => runApp(new MyApp());
  7.  
  8. class MyApp extends StatelessWidget {
  9. @override
  10. Widget build(BuildContext context) {
  11. return new MaterialApp(
  12. title: 'Startup Name Generator',
  13. theme: new ThemeData(
  14. primaryColor: Colors.white,
  15. ),
  16. home: new RandomWords(),
  17. );
  18. }
  19. }
  20.  
  21. class RandomWords extends StatefulWidget {
  22. @override
  23. RandomWordsState createState() => new RandomWordsState();
  24. }
  25.  
  26. class RandomWordsState extends State<RandomWords> {
  27. final List<WordPair> _suggestions = <WordPair>[];
  28. final Set<WordPair> _saved = new Set<WordPair>();
  29. final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);
  30.  
  31. @override
  32. Widget build(BuildContext context) {
  33. return new Scaffold(
  34. appBar: new AppBar(
  35. title: const Text('Startup Name Generator'),
  36. actions: <Widget>[
  37. new IconButton(icon: const Icon(Icons.list), onPressed: _pushSaved),
  38. ],
  39. ),
  40. body: _buildSuggestions(),
  41. );
  42. }
  43.  
  44. Widget _buildSuggestions() {
  45. return new ListView.builder(
  46. padding: const EdgeInsets.all(16.0),
  47. itemBuilder: (BuildContext _context, int i) {
  48. if (i.isOdd) {
  49. return const Divider();
  50. }
  51. final int index = i ~/ 2;
  52. if (index >= _suggestions.length) {
  53. _suggestions.addAll(generateWordPairs().take(10));
  54. }
  55. return _buildRow(_suggestions[index]);
  56. });
  57. }
  58.  
  59. Widget _buildRow(WordPair pair) {
  60. final bool alreadySaved = _saved.contains(pair);
  61.  
  62. return new ListTile(
  63. title: new Text(
  64. pair.asPascalCase,
  65. style: _biggerFont,
  66. ),
  67. trailing: new Icon(
  68. alreadySaved ? Icons.favorite : Icons.favorite_border,
  69. color: alreadySaved ? Colors.red : null,
  70. ),
  71. onTap: () {
  72. setState(() {
  73. if (alreadySaved) {
  74. _saved.remove(pair);
  75. } else {
  76. _saved.add(pair);
  77. }
  78. });
  79. },
  80. );
  81. }
  82.  
  83. void _pushSaved() {
  84. Navigator.of(context).push(
  85. new MaterialPageRoute<void>(
  86. builder: (BuildContext context) {
  87. final Iterable<ListTile> tiles = _saved.map(
  88. (WordPair pair) {
  89. return new ListTile(
  90. title: new Text(
  91. pair.asPascalCase,
  92. style: _biggerFont,
  93. ),
  94. );
  95. },
  96. );
  97. final List<Widget> divided = ListTile
  98. .divideTiles(
  99. context: context,
  100. tiles: tiles,
  101. )
  102. .toList();
  103. return new Scaffold(
  104. appBar: new AppBar(
  105. title: const Text('Saved Suggestions'),
  106. ),
  107. body: new ListView(children: divided),
  108. );
  109. },
  110. ),
  111. );
  112. }
  113. }
Add Comment
Please, Sign In to add comment