坚持能够从颤振应用程序的列表中查看详细信息

Posted

技术标签:

【中文标题】坚持能够从颤振应用程序的列表中查看详细信息【英文标题】:Stuck on being able to view detailed information from a list in flutter app 【发布时间】:2020-11-14 19:21:55 【问题描述】:

我在实时数据库中有一个响亮的信息,格式例如:

 record
      0
        Club: "Club1"
        Name: "Ronaldo"
        Place: "London"
        date:  "25.07.2020"
        email: "flutter@gmail.com"
        phone: "12345678"

我创建了一个包含名称和俱乐部的列表,我想通过单击名称来根据表单访问完整信息,但我无法编写代码。请帮助新程序员

import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'package:.../anketa/tile.dart';


class Anketa extends StatefulWidget 
  Anketa(Key key, this.title) : super(key: key);
  final String title;

  @override
  _AnketaState createState() => _AnketaState();


class _AnketaState extends State<Anketa> 
  @override
  Widget build(BuildContext context) 
    return Scaffold(

      body: Center(
          child: SingleChildScrollView(
            child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text("Registration form",
                      style: TextStyle(
                          fontWeight: FontWeight.w200,
                          fontSize: 30,
                          fontFamily: 'Roboto',
                          fontStyle: FontStyle.italic)),
                  RegisterStudent(),
                ]),
          )),
    );
  


class RegisterStudent extends StatefulWidget 
  RegisterStudent(Key key) : super(key: key);

  @override
  _RegisterStudentState createState() => _RegisterStudentState();


class _RegisterStudentState extends State<RegisterStudent> 
  final _formKey = GlobalKey<FormState>();
  final listOfClubs = ["Club1", "Club2", "Club3", "Club4"];
  String dropdownValue = "Club1";
  final clubController = TextEditingController();
  final nameController = TextEditingController();
  final placeController = TextEditingController();
  final dateController = TextEditingController();
  final emailController = TextEditingController();
  final phoneController = TextEditingController();
  final rawController = TextEditingController();

  final dbRef = FirebaseDatabase.instance.reference().child("record");



  @override
  Widget build(BuildContext context) 
    return Form(
        key: _formKey,
        child: SingleChildScrollView(
            child: Column(children: <Widget>[
              Padding(
                padding: EdgeInsets.all(20.0),
                child: TextFormField(
                  controller: nameController,
                  decoration: InputDecoration(
                    labelText: "EnterName",
                    enabledBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(10.0),
                    ),
                  ),
                  // The validator receives the text that the user has entered.
                  validator: (value) 
                    if (value.isEmpty) 
                      return "Enter name";
                    
                    return null;
                  ,
                ),
              ),
              Padding(
                padding: EdgeInsets.all(20.0),
                child: DropdownButtonFormField(
                  value: dropdownValue,
                  icon: Icon(Icons.arrow_downward),
                  decoration: InputDecoration(
                    labelText: "Club",
                    enabledBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(10.0),
                    ),
                  ),
                  items: listOfClubs.map((String value) 
                    return new DropdownMenuItem<String>(
                      value: value,
                      child: new Text(value),
                    );
                  ).toList(),
                  onChanged: (String newValue) 
                    setState(() 
                      this.dropdownValue = newValue;
                    );
                  ,
                  validator: (value) 
                    if (value.isEmpty) 
                      return 'Club';
                    
                    return null;
                  ,
                ),
              ),
              Padding(
                padding: EdgeInsets.all(20.0),
                child: TextFormField(
                  keyboardType: TextInputType.number,
                  controller: dateController,
                  decoration: InputDecoration(
                    labelText: "Date",
                    enabledBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(10.0),
                    ),
                  ),
                  // The validator receives the text that the user has entered.
                  validator: (value) 
                    if (value.isEmpty) 
                      return 'Date';
                    
                    return null;
                  ,
                ),
              ),
              Padding(
                  padding: EdgeInsets.all(20.0),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    children: <Widget>[
                      RaisedButton(
                        color: Colors.lightBlue,
                        onPressed: () 
                          if (_formKey.currentState.validate()) 
                            dbRef.push().set(
                              "Name": nameController.text,
                              "date": dateController.text,
                              "Club": dropdownValue
                            ).then((_) 
                              Scaffold.of(context).showSnackBar(
                                  SnackBar(content: Text('Add')));
                              dateController.clear();
                              nameController.clear();
                            ).catchError((onError) 
                              Scaffold.of(context)
                                  .showSnackBar(SnackBar(content: Text(onError)));
                            );
                          
                        ,
                        child: Text('Enter'),
                      ),
                      RaisedButton(
                        color: Colors.amber,
                        onPressed: () 
                          Navigator.push(
                            context,
                            MaterialPageRoute(builder: (context) => ListOfNames()),
                          );
                        ,
                        child: Text('Go to'),
                      ),
                    ],
                  )),
            ])));
  

  @override
  void dispose() 
    super.dispose();
    dateController.dispose();
    nameController.dispose();
  

这是带有列表的第二页,我想从中找到完整信息

    import 'package:flutter/material.dart';
    import 'package:firebase_database/firebase_database.dart';
    
    class ListOfNames extends StatelessWidget 
      final dbRef = FirebaseDatabase.instance.reference().child("record");
      List<Map<dynamic,dynamic>> lists = List();
      @override
      Widget build(BuildContext context) 
        return Scaffold(
            backgroundColor: Colors.grey.shade300,
            appBar: AppBar(
              backgroundColor: Colors.deepPurple,
              title: Text("List of students"),
            ),
            body: StreamBuilder(
                stream: dbRef.onValue,
                builder: (context, AsyncSnapshot<Event> snapshot) 
                  if (snapshot.hasData) 
                    lists.clear();
                    DataSnapshot dataValues = snapshot.data.snapshot;
                    Map<dynamic, dynamic> values = dataValues.value;
                    values.forEach((key, values) 
                      lists.add(values);
                    );
                    return new ListView.builder(
                        shrinkWrap: true,
                        itemCount: lists.length,
                        itemBuilder: (BuildContext context, int index) 
itemBuilder: (BuildContext context, int index) 
                      return ListTile(
                            title:Text(lists[index]["Name"], style: TextStyle(height: 2.5, fontSize:20.0),),
                            subtitle:Text(lists[index]['Club'], style: TextStyle(fontSize:16.0),),
                        onTap: ()

// in this line i have a problem...
 Navigator.push(context, MaterialPageRoute(builder: (context) => DetailPage(snapshot.data[index]['Name']),
                              )
                              );
                        ,
                      );
                    );
              
                  return CircularProgressIndicator();
                )
        );
      
    

我想创建这样一个页面:

class DetailPage extends StatelessWidget 

  List<Map<dynamic,dynamic>> data ;
  DetailPage (this.data);
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text(data.name),

// here I want to show the all  information from the form about one person from the list
      ),
    );
  

【问题讨论】:

【参考方案1】:

在“DetailsPage”的脚手架主体中,使用“Card”小部件和“Text”小部件来显示信息。 Like Card(child:Text('$data.clubLoc').

【讨论】:

我无法从我的表单 RealtimeDatabase 中注册任何卡片的路径

以上是关于坚持能够从颤振应用程序的列表中查看详细信息的主要内容,如果未能解决你的问题,请参考以下文章

如何查看Chrome插件列表详细

如何设置视图或活动来处理以前的列表活动?例如“查看完整的详细信息页面”

在 Excel 中查看 OLAP 多维数据集详细信息

如何查看特定列表视图项的详细数据

如何使用条形码从 api 中提取信息并将其解析到用户详细信息小部件屏幕 - 在颤振中

如何在 laravel 8 中查看特定 id 的详细信息