Tugas PPB 12 Membuat Aplikasi Flutter Namer App

 TUGAS PPB 12

Membuat Aplikasi Flutter Namer App
Nama: Fayyadh Hafizh
NRP : 5025201164
Kelas: PPB I
Link Github: Tugas 12

Halo temen-temen semuanya! Pada kesempatan kali ini, kita akan mencoba membuat sebuah aplikasi yang bernama Namer App. Aplikasi ini menggunakan flutter sebagai framework pengembangan aplikasi, berbeda seperti tugas-tugas sebelumnya yang menggunakan kotlin. Aplikasi ini nantinya dapat memberikan dua kata random yang digabung menjadi satu kata. Selain itu, setiap dua kata random yang diberikan dapat ditandai sebagai favorit dan pengguna dapat melihat kata favorit yang sudah ditandai pada halaman lain.
  • Kode Implementasi
  • import 'package:english_words/english_words.dart';
    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    void main() {
    runApp(MyApp());
    }
    class MyApp extends StatelessWidget {
    const MyApp({super.key});
    @override
    Widget build(BuildContext context) {
    return ChangeNotifierProvider(
    create: (context) => MyAppState(),
    child: MaterialApp(
    title: 'Namer App',
    theme: ThemeData(
    useMaterial3: true,
    colorScheme: ColorScheme.fromSeed(seedColor: Colors.blueGrey),
    ),
    home: MyHomePage(),
    ),
    );
    }
    }
    class MyAppState extends ChangeNotifier {
    var current = WordPair.random();
    void getNext() {
    current = WordPair.random();
    notifyListeners();
    }
    var favorites = <WordPair>[];
    void toggleFavorite() {
    if (favorites.contains(current)) {
    favorites.remove(current);
    } else {
    favorites.add(current);
    }
    notifyListeners();
    }
    }
    class MyHomePage extends StatefulWidget {
    @override
    State<MyHomePage> createState() => _MyHomePageState();
    }
    class _MyHomePageState extends State<MyHomePage> {
    var selectedIndex = 0;
    @override
    Widget build(BuildContext context) {
    Widget page;
    switch (selectedIndex) {
    case 0:
    page = GeneratorPage();
    break;
    case 1:
    page = FavoritesPage();
    break;
    default:
    throw UnimplementedError('No widget for $selectedIndex');
    }
    return LayoutBuilder(builder: (context, constraints) {
    return Scaffold(
    body: Row(
    children: [
    SafeArea(
    child: NavigationRail(
    extended: constraints.maxWidth >= 600,
    destinations: [
    NavigationRailDestination(
    icon: Icon(Icons.home),
    label: Text('Home'),
    ),
    NavigationRailDestination(
    icon: Icon(Icons.favorite),
    label: Text('Favorites'),
    ),
    ],
    selectedIndex: selectedIndex,
    onDestinationSelected: (value) {
    setState(() {
    selectedIndex = value;
    });
    },
    ),
    ),
    Expanded(
    child: Container(
    color: Theme.of(context).colorScheme.primaryContainer,
    child: page,
    ),
    ),
    ],
    ),
    );
    });
    }
    }
    class GeneratorPage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    var appState = context.watch<MyAppState>();
    var pair = appState.current;
    IconData icon;
    if (appState.favorites.contains(pair)) {
    icon = Icons.favorite;
    } else {
    icon = Icons.favorite_border;
    }
    return Center(
    child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
    BigCard(pair: pair),
    SizedBox(height: 10),
    Row(
    mainAxisSize: MainAxisSize.min,
    children: [
    ElevatedButton.icon(
    onPressed: () {
    appState.toggleFavorite();
    },
    icon: Icon(icon),
    label: Text('Like'),
    ),
    SizedBox(width: 10),
    ElevatedButton(
    onPressed: () {
    appState.getNext();
    },
    child: Text('Next'),
    ),
    ],
    ),
    ],
    ),
    );
    }
    }
    class BigCard extends StatelessWidget {
    const BigCard({
    super.key,
    required this.pair,
    });
    final WordPair pair;
    @override
    Widget build(BuildContext context) {
    final theme = Theme.of(context);
    final style = theme.textTheme.displayMedium!
    .copyWith(color: theme.colorScheme.onPrimary);
    return Card(
    color: theme.colorScheme.primary,
    child: Padding(
    padding: const EdgeInsets.all(20.0),
    child: Text(pair.asLowerCase,
    style: style, semanticsLabel: '${pair.first} ${pair.second}'),
    ),
    );
    }
    }
    class FavoritesPage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    var appState = context.watch<MyAppState>();
    if (appState.favorites.isEmpty) {
    return Center(child: Text('No favorites yet.'));
    }
    return ListView(
    children: [
    Padding(
    padding: const EdgeInsets.all(20),
    child: Text('You have ' '${appState.favorites.length} favorites:')),
    for (var pair in appState.favorites)
    ListTile(
    leading: Icon(Icons.favorite),
    title: Text(pair.asLowerCase),
    )
    ],
    );
    }
    }
    view raw main.dart hosted with ❤ by GitHub

  • Hasil


Komentar

Postingan populer dari blog ini

Tugas PPB 8 Membuat Image Scroll dengan menggunakan Desain Material

Tugas PPB 13 Membuat Aplikasi Musik