How can I add a onTap/onPress in the ProfileListItem to make navigation to other pages?
I try to put onTap/onPress for navigation no error but when it press on the profilelistitem widget it doest not work.
Any suggestion or hints for the navigation in profilelistitem ? thankyou
user profile.dart
import 'package:flutter/material.dart';
import 'package:flutter_auth/Profile/widgets/profile_list_item.dart';
import 'package:flutter_svg/svg.dart';
import 'package:line_awesome_flutter/line_awesome_flutter.dart';
import 'constants.dart';
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, this.title}) : super(key: key);
final String? title;
@override
_ProfilePageState createState() => _ProfilePageState();
}
class _ProfilePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: kAppPrimaryColor,
body: Stack(
children: <Widget>[
Padding(
padding: EdgeInsets.all(25),
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppBarButton(
icon: Icons.arrow_back,
),
SvgPicture.asset("assets/icons/menu.svg"),
],
),
),
AvatarImage(),
SizedBox(
height: 30,
),
SocialIcons(),
SizedBox(height: 30),
Text(
'chromicle',
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.w700,
fontFamily: "Poppins"),
),
Text(
'@amFOSS',
style: TextStyle(fontWeight: FontWeight.w300),
),
SizedBox(height: 15),
Text(
'Mobile App Developer and Open source enthusiastic',
textAlign: TextAlign.center,
style: TextStyle(fontSize: 20, fontFamily: "Poppins"),
),
ProfileListItems(),
],
),
)
],
),
);
}
}
class AppBarButton extends StatelessWidget {
final IconData icon;
const AppBarButton({required this.icon});
@override
Widget build(BuildContext context) {
return Container(
width: 55,
height: 55,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: kAppPrimaryColor,
boxShadow: [
BoxShadow(
color: kLightBlack,
offset: Offset(1, 1),
blurRadius: 10,
),
BoxShadow(
color: kWhite,
offset: Offset(-1, -1),
blurRadius: 10,
),
]),
child: Icon(
icon,
color: fCL,
),
);
}
}
class AvatarImage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
width: 150,
height: 150,
padding: EdgeInsets.all(8),
decoration: avatarDecoration,
child: Container(
decoration: avatarDecoration,
padding: EdgeInsets.all(3),
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
image: AssetImage('assets/images/user.png'),
),
),
),
),
);
}
}
class SocialIcons extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SocialIcon(
color: Color(0xFF102397),
iconData: facebook,
onPressed: () {},
),
SocialIcon(
color: Color(0xFFff4f38),
iconData: googlePlus,
onPressed: () {},
),
SocialIcon(
color: Color(0xFF38A1F3),
iconData: twitter,
onPressed: () {},
),
SocialIcon(
color: Color(0xFF2867B2),
iconData: linkedin,
onPressed: () {},
)
],
);
}
}
class SocialIcon extends StatelessWidget {
final Color color;
final IconData iconData;
final Function onPressed;
SocialIcon(
{required this.color, required this.iconData, required this.onPressed});
@override
Widget build(BuildContext context) {
return new Padding(
padding: EdgeInsets.only(left: 20.0),
child: Container(
width: 45.0,
height: 45.0,
decoration: BoxDecoration(shape: BoxShape.circle, color: color),
child: RawMaterialButton(
shape: CircleBorder(),
onPressed: () {},
child: Icon(iconData, color: Colors.white),
),
),
);
}
}
class ProfileListItems extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Expanded(
child: ListView(
children: <Widget>[
ProfileListItem(
icon: LineAwesomeIcons.user_shield,
text: 'Privacy',
),
ProfileListItem(
icon: LineAwesomeIcons.history,
text: 'Purchase History',
),
ProfileListItem(
icon: LineAwesomeIcons.question_circle,
text: 'Help & Support',
),
ProfileListItem(
icon: LineAwesomeIcons.cog,
text: 'Settings',
),
ProfileListItem(
icon: LineAwesomeIcons.user_plus,
text: 'Invite a Friend',
),
ProfileListItem(
icon: LineAwesomeIcons.alternate_sign_out,
text: 'Logout',
hasNavigation: true,
ontap:(){}; << error
)
],
),
);
}
}
profile_listitem.dart
import 'package:flutter/material.dart';
import 'package:line_awesome_flutter/line_awesome_flutter.dart';
import '../constants.dart';
class ProfileListItem extends StatelessWidget {
final IconData? icon;
final String text;
final bool hasNavigation;
const ProfileListItem({
Key? key,
this.icon,
required this.text,
this.hasNavigation = true,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
height: 55,
margin: EdgeInsets.symmetric(
horizontal: 10,
).copyWith(
bottom: 20,
),
padding: EdgeInsets.symmetric(
horizontal: 20,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
color: Colors.grey.shade300,
),
child: Row(
children: <Widget>[
Icon(
this.icon,
size: 25,
),
SizedBox(width: 15),
Text(
this.text,
style: kTitleTextStyle.copyWith(
fontWeight: FontWeight.w500, fontFamily: "Poppins"),
),
Spacer(),
if (this.hasNavigation)
Icon(
LineAwesomeIcons.angle_right,
size: 25,
),
],
),
);
}
}
CodePudding user response:
You can use InkWell or GestureDetector around list item, both provides onTap
InkWell(onTap:(){},
child: ProfileListItem()
)