-1

I have a screen that is a stateful widget and contains events. When you click on one it takes you to another screen to view more info about it, once again a stateless widget and everything works fine. When i click a button though there i want it to use the info from that specific event e.g. category and price and pass this data to a stateful widget in a 3rd screen for checkout.

How can i pass this data from a stateless widget to a stateful widget? Note: i am using routes also for my navigation menu.

TLDR: this Event.events[6].ticketType1 should be changed to event.ticketType1 where event is the event i clicked in the previous screen


import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

class BookTicketScreen extends StatefulWidget {
  static const String routeName = '/bookTicket';

  static Route route() {
    return MaterialPageRoute(
        settings: RouteSettings(name: routeName),
        builder: (_) => BookTicketScreen());
  }

  @override
  _BookTicketScreenState createState() => _BookTicketScreenState();
}

class _BookTicketScreenState extends State<BookTicketScreen> {
  Var TicketType: '€' +'${Event.events[6].ticketType4Price}',

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
         Text('$_ticketType'),
        ],
      ),
    );
  }
}

Button from previous screen that navigates to statefulwidget screen and passes current event


class EventScreen extends StatelessWidget {
  static const String routeName = '/viewEvent';
  static Route route({required Event event}) {
    return MaterialPageRoute(
        settings: RouteSettings(name: routeName),
        builder: (_) => EventScreen(event: event));
  }

  final Event event;

  const EventScreen({required this.event});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
child: 
TextButton(
            child: Text('Book Now'),
            onPressed: () {
              Navigator.pushNamed(context, '/bookTicket', arguments: event);
            },
          
            ),
          ),),
class AppRouter {
  static Route onGenerateRoute(RouteSettings settings) {
    print('This is route ${settings.name}');
    
  switch (settings.name) {
      case '/':
        return HomeScreen.route();
      case HomeScreen.routeName:
          case EventScreen.routeName:
        return EventScreen.route(event: settings.arguments as Event);
          case BookTicketScreen.routeName:
        return BookTicketScreen.route();
import 'package:equatable/equatable.dart';

class Event extends Equatable {
final String name;
final String category;
final String imageUrl;
final double price;


const Event({
 required this.name,
 required this.category,
 required this.imageUrl,
 required this.price,

});

@override
List<Object?> get props => [
     name,
     category,
     imageUrl,
     price,
   
   ];

static List<Event> events = [
 Event(
   category: 'Live Music',
   name: 'Live event',
   imageUrl:
       'https://d1e00ek4ebabms.cloudfront.net/production/fd60d020-b4fa-47a3-9ef8-0af6265f7df3.jpg',
   price: 29.99,

 ),

1 Answers1

0
class BookTicketScreen extends StatefulWidget {
  static const String routeName = '/bookTicket';

  final Event event;
  BookTicketScreen(this.event);
  static Route route({required Event event}) {
    return MaterialPageRoute(
        settings: RouteSettings(name: routeName),
        builder: (_) => BookTicketScreen(event));
  }

  @override
  _BookTicketScreenState createState() => new _BookTicketScreenState(event);
}

class _BookTicketScreenState extends State<BookTicketScreen> {
  late Event event;
  _BookTicketScreenState(Event event) {
    this.event = event;
  }