Как передать определенные переменные ListTile в маршрут новой страницы onTap? - PullRequest
0 голосов
/ 06 февраля 2019

Мой код создает ListView ListTiles, где каждый ListTile получает данные из базы данных облачного пожарного хранилища.

Когда я активирую onTap ListTile, я хотел бы направить на новую страницу и передать конкретные данныедля этой плитки на новую страницу.

На странице, на которой я строю представление списка, я без проблем передал переменные, однако я не могу заставить тот же метод работать на этой странице.

Я довольно плохо знаком с трепетом и дротиком.Мое первое предположение состоит в том, что, возможно, для этого требуется виджет с отслеживанием состояния, чтобы выполнить это?Однако я не совсем уверен, как это реализовать.

import 'package:flutter/material.dart';

import 'package:menu/screens/menu/detail.dart';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';

class Menu extends StatelessWidget {
    final String barcode;

  // receive data from the FirstScreen as a parameter
  Menu({Key key, @required this.barcode}) : super(key: key);

  Widget _buildListItem(BuildContext context, DocumentSnapshot document) {
    return ListTile(
      leading: Icon(Icons.fastfood),
      title: Text(document['item'] ?? '*name*'),
      subtitle: Text( document['description'] ?? '*description*'),
      isThreeLine: true,
      onTap: (){
        Navigator.push(
            context,
            MaterialPageRoute(
            builder: (context) => Detail(),
        ),);
        },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Menu'),
      ),
      body: StreamBuilder(
          stream: Firestore.instance.collection(barcode).snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) return const Text('loading...');
            return ListView.builder(
              itemExtent: 80.0,
              itemCount: snapshot.data.documents.length,
              itemBuilder: (context, index) =>
                  _buildListItem(context, snapshot.data.documents[index]),
            );
          }),
    );
  }
}

1 Ответ

0 голосов
/ 06 февраля 2019

Передать document в качестве параметра для Detail

    Navigator.push(
        context,
        MaterialPageRoute(
        builder: (context) => Detail(document), // <-- document instance
    ),);

Detail. Виджет, конечно, должен принимать document в качестве параметра:

class Detail extends ... {
  Detail(this.document);
  final DocumentSnapshot document;
}

, как описано в https://flutter.io/docs/cookbook/navigation/passing-data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...