// Copyright 2018 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. 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: 'W.A Link Generator', theme: ThemeData(primaryColor: Colors.purpleAccent), home: RandomWords(), ); } } class RandomWords extends StatefulWidget { const RandomWords({Key? key}) : super(key: key); @override _RandomWordsState createState() => _RandomWordsState(); } class _RandomWordsState extends State { final _suggestions = []; //final _biggerFont = const TextStyle(fontSize: 12.0); final _saved = {}; void _pushSaved() { Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { final tiles = _saved.map( (WordPair pair) { return ListTile( title: Text( pair.asPascalCase, ), ); }, ); final divided = ListTile.divideTiles( context: context, tiles: tiles, ).toList(); return Scaffold( appBar: AppBar( title: Text('Saved Suggestions'), ), body: ListView(children: divided), ); }, ), ); } Widget _buildRow(WordPair pair) { final alreadySaved = _saved.contains(pair); return ListTile( title: Text( pair.asPascalCase, ), trailing: Icon( alreadySaved ? Icons.favorite : Icons.favorite_border, color: alreadySaved ? Colors.red : null, ), onTap: () { setState(() { if (alreadySaved) { _saved.remove(pair); } else { _saved.add(pair); } }); }, ); } Widget _buildSuggestions() { return ListView.builder( padding: const EdgeInsets.all(16.0), itemBuilder: /*1*/ (context, i) { if (i.isOdd) return const Divider( thickness: 2.0, ); /*2*/ final index = i ~/ 2; /*3*/ if (index >= _suggestions.length) { _suggestions.addAll(generateWordPairs().take(50)); /*4*/ } return _buildRow(_suggestions[index]); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('W.A Link Generator'), actions: [ IconButton(icon: Icon(Icons.favorite), onPressed: _pushSaved), ], ), body: _buildSuggestions(), ); } }