import 'dart:math'; import 'package:english_words/english_words.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_lorem/flutter_lorem.dart'; import 'utils.dart'; const tab2Title = 'News'; const tab2IosIcon = Icon(CupertinoIcons.news); const _itemsLength = 20; String _makeFakeNews(Random random) { final pair = generateWordPairs(random: random); final artist = capitalizePair(pair.first); switch (random.nextInt(9)) { case 0: return '$artist says ${nouns[random.nextInt(nouns.length)]}'; case 1: return '$artist arrested due to ${pair.first}'; case 2: return '$artist releases ${capitalizePair(pair.first)}'; case 3: return '$artist talks about his ${nouns[random.nextInt(nouns.length)]}'; case 4: return '$artist talks about her ${nouns[random.nextInt(nouns.length)]}'; case 5: return '$artist talks about their ${nouns[random.nextInt(nouns.length)]}'; case 6: return '$artist says their music is inspired by ${pair.first}'; case 7: return '$artist says the world needs more ${nouns[random.nextInt(nouns.length)]}'; case 7: return '$artist calls their band ${adjectives[random.nextInt(adjectives.length)]}'; case 8: return '$artist finally ready to talk about ${nouns[random.nextInt(nouns.length)]}'; } } class Tab2 extends StatefulWidget { const Tab2({ Key key }) : super(key: key); @override _Tab2State createState() => _Tab2State(); } class _Tab2State extends State<Tab2> { List<Color> colors; List<String> titles; List<String> contents; @override void initState() { final random = Random(); colors = getRandomColors(_itemsLength); titles = List<String>.generate( _itemsLength, (int index) => _makeFakeNews(random), ); contents = List<String>.generate( _itemsLength, (int index) => lorem(paragraphs: 1, words: 50), ); super.initState(); } Widget _listBuilder(BuildContext context, int index) { return Card( elevation: 1, margin: EdgeInsets.symmetric( horizontal: 12, vertical: 12, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(4), ), child: Padding( padding: const EdgeInsets.all(12.0), child: Column( children: <Widget>[ Row( children: <Widget>[ CircleAvatar( backgroundColor: colors[index], ), Padding(padding: EdgeInsets.only(left: 12)), Expanded(child: Text(titles[index])), ], ), ], ), ) ); } Widget _buildAndroid(BuildContext context) { return ListView.builder( itemBuilder: _listBuilder, ); } Widget _buildIos(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar(), child: ListView.builder( itemBuilder: _listBuilder, ), ); } @override Widget build(BuildContext context) { switch (defaultTargetPlatform) { case TargetPlatform.android: case TargetPlatform.fuchsia: return _buildAndroid(context); case TargetPlatform.iOS: return _buildIos(context); } assert(false, 'Unexpected platform'); return null; } }