Rasat
Rasat

Reputation: 27

Flutter: send data from first screen to second screen

I have little problem and I don't know how I can solve this. I am fetching datas from database and when I click on the list it is navigating to new screen. I mean I want to fetch datas which are on first screen to second screen. it is not giving me error but the simulator gives me this and codes below here:

enter image description here

class ServisIhaleEkran extends StatelessWidget {
  final url = 'https://escar.com/cek.php';

  Future<List<dynamic>> getIhaleData() async {
    var response = await http.get(url);
    return json.decode(response.body);
  }

  String _brand(dynamic user) {
    return user['marka'];
  }

  String _model(dynamic user) {
    return user['model'];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: FutureBuilder<List<dynamic>>(
        future: getIhaleData(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (context, index) {
                return Card(
                  child: Column(
                    children: <Widget>[
                      ListTile(
                        title: Text(
                          _brand(
                            snapshot.data[index],
                          ).toString(),
                        ),
                        onTap: () => _sendDataToSecondScreen(context),
                      ),
                    ],
                  ),
                );
              },
            );
          } else {
            return Center(child: Text('Error'));
          }
        },
      ),
    );
  }

  void _sendDataToSecondScreen(BuildContext context) {
    String brandSend = _brand.toString();
    Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => Details(brand: brandSend),
        ));
  }
}

class Details extends StatelessWidget {
  final String brand;

  Details({this.brand});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Text(brand),
        ));
  }
}

The First Screen: ServisIhaleEkran The Second Screen: Details

I think, the problem is here:

  void _sendDataToSecondScreen(BuildContext context) {
    String brandSend = _brand.toString();
    Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => Details(brand: brandSend),
        ));
  }
}

probably String brandSend = _brand.toString(); is giving me error but I don't know what is this, please help me, thanks.

and my first screen:

enter image description here

Upvotes: 0

Views: 345

Answers (1)

Jhakiz
Jhakiz

Reputation: 1609

Rasat change your code as below:

void _sendDataToSecondScreen(BuildContext context, String brandSend) {
    //String brandSend = _brand.toString();
    Navigator.push(
        context,
        MaterialPageRoute(
          builder: (context) => Details(brand: brandSend),
        ));
  }

And use it in your widget as:

ListTile(
    title: Text(
    _brand(
        snapshot.data[index],
     ).toString(),
    ),
     onTap: () => _sendDataToSecondScreen(context, _brand(snapshot.data[index])),
),

Upvotes: 2

Related Questions