Adding Interactivity
Learn how to make a layout interactive by using interactive widgets.
Previously, we learned how to create the layout for our contact app via non-interactive widgets. In this lesson, we’ll learn to add interactivity to the layout of the application with interactive widgets.
To use an interactive widget, we need to wrap it around a layout widget that responds to user input.
Adding a second screen
First, let’s add a second screen to the contact app. Run the application below:
import 'package:flutter/material.dart'; import 'single_contact_screen.dart'; class ContactListScreen extends StatefulWidget { const ContactListScreen({ Key? key, }) : super(key: key); @override State<ContactListScreen> createState() => _ContactListScreenState(); } class _ContactListScreenState extends State<ContactListScreen> { List<String> contacts = List<String>.generate(20, (i) => "Ivy Walobwa"); @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(16.0), child: Wrap( direction: Axis.vertical, children: [ Text( "Contacts", style: Theme.of(context) .textTheme .headline3! .copyWith(color: Colors.black), ), Text("20 Contacts", style: Theme.of(context) .textTheme .bodyText2! .copyWith(color: Colors.black54)), ], ), ), Expanded( child: ListView.separated( itemCount: contacts.length, // TODO-5: Wrap ListTile with Dismissible itemBuilder: (context, index) => ListTile( // TODO-2: Add Navigation below leading: const CircleAvatar( child: Text("IW"), ), title: Text( contacts[index], ), trailing: Icon(Icons.info_outline), ), separatorBuilder: (BuildContext context, int index) => const Divider( height: 1, ), ), ), ], ), ), bottomNavigationBar: BottomNavigationBar( currentIndex: 1, items: const [ BottomNavigationBarItem(icon: Icon(Icons.call), label: "Phone"), BottomNavigationBarItem( icon: Icon(Icons.person), label: "Contacts"), BottomNavigationBarItem( icon: Icon(Icons.star_border), label: "Favorites"), ], ), floatingActionButton: FloatingActionButton( onPressed: () {}, child: const Icon(Icons.add), ), ); } }
Contact app: Add layout of a second screen
The code does the following:
- Creates two new files—
contact_list_screen.dart
andsingle_contact_screen.dart
. The former contains the layout we built in the previous lesson. - Creates a new screen in the
single_contact_screen.dart
. We will view the second screen after adding some
Get hands-on with 1400+ tech skills courses.