Solution: Handling Gestures
Explore solutions to handling gestures challenge.
We'll cover the following...
Challenge solutions
Great job on completing all the steps in the previous challenge! Feel free to compare your code solutions with the solutions below:
import 'package:flutter/material.dart';import 'single_contact_screen.dart';import 'new_contact_screen.dart';class ContactListScreen extends StatefulWidget {const ContactListScreen({Key? key,}) : super(key: key);@overrideState<ContactListScreen> createState() => _ContactListScreenState();}class _ContactListScreenState extends State<ContactListScreen> {List<String> contacts = List<String>.generate(20, (i) => "Ivy Walobwa");@overrideWidget 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,itemBuilder: (context, index) => Dismissible(key: UniqueKey(),onDismissed: (DismissDirection direction){setState(() {contacts.removeAt(index);});},child: ListTile(onLongPress: (){showContactInfo(context);},onTap: () {Navigator.push(context,MaterialPageRoute(builder: (context) => const SingleContactScreen()),);},leading: const CircleAvatar(child: Text("IW"),),title: const Text("Ivy Walobwa",),trailing: const 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: () {Navigator.push(context,MaterialPageRoute(builder: (context) => const NewContactScreen()),);},child: const Icon(Icons.add),),);}}showContactInfo(BuildContext context) {return showMenu(context: context,position: const RelativeRect.fromLTRB(100, 150, 30, 0),items: const <PopupMenuItem>[PopupMenuItem(child: Text("info 1"),),PopupMenuItem(child: Text("info 2"),),]);}
Challenge 1: New screen navigation
First, we ...