Flutter, как построить список виджетов из переданных данных? - PullRequest
0 голосов
/ 17 июня 2020

Я новичок во Flutter, и я пытаюсь понять, как написать функцию, которая создает виджет на основе данных, передаваемых из FirstScreenPageView () в SecondScreenPageView ()?

Точнее:

class nameCard extends StatelessWidget{
const nameCard({
  Key key, this.firstName, this.lastName
}): super(key:key);
final String fistName;
final String lastName;
@override
Widget build(BuildContext context){
  return Container(
    child: Column(
       children: <Widget>[
          Text(fistName), 
          Text(lastName),
       ],
    ),
  ),
}
};

class FirstScreenPageView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: RaisedButton(child: Text('Send'), onPressed:(){
          ///Send nameCard Widget to SecondScreenPageView here})
    );
 }
}

class SecondScreenPageView extends StatelessWidget {
   List<Widget> nameCardList = [];
   @override
   Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
       children: nameCardList,
      ),
    );
   }
 }

Как добавить nameCard из FirstScreenPageView в nameCardList SecondScreenPageView?

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

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

import 'package:flutter/material.dart';

class NameCard {
  final String firstName;
  final String lastName;

  NameCard({this.firstName, this.lastName});
}

class FirstScreenPageView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    NameCard nameCardToSend = NameCard(firstName: 'name', lastName: 'lastName');

    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: <Widget>[
          RaisedButton(
              child: Text('Send'),
              onPressed: () {
                ///Send nameCard Widget to SecondScreenPageView here})
                Navigator.of(context).push(MaterialPageRoute(builder: (_) {
                  return SecondScreenPageView(
                    nameCard: nameCardToSend,
                  );
                }));
              }),
        ],
      ),
    );
  }
}

class SecondScreenPageView extends StatelessWidget {
  final NameCard nameCard;

  SecondScreenPageView({@required this.nameCard});

  List<NameCard> nameCardList = [];
  @override
  Widget build(BuildContext context) {
    nameCardList.add(nameCard);
    return Scaffold(

      appBar: AppBar(),

      body: Column(
        children: <Widget>[
          Text(nameCard.firstName),
          SizedBox(
            height: 11,
          ),
          Text(nameCard.lastName),
          SizedBox(
            height: 11,
          ),
          Text('Or in a Row'),
          Row(
            children: <Widget>[
              SizedBox(
                width: 11,
              ),
              Text(nameCard.firstName),
              SizedBox(
                width: 11,
              ),
              Text(nameCard.lastName),
            ],
          ),
        ],
      ),
    );
  }
}

извините, забудьте добавить appBar : AppBar () в SecondScreenPageView, чтобы вы могли go вернуться к первому экрану

если это, пожалуйста, примите это как ответ, увидимся

0 голосов
/ 17 июня 2020

Вы можете передать просмотр страницы второго экрана конструктором.

class FirstScreenPageView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: RaisedButton(child: Text('Send'), onPressed:(){
          ///Send nameCard Widget to SecondScreenPageView here})
          Navigator.push(
              context,
              MaterialPageRoute(
              builder: (context) => SecondScreenPageView(nameCardList: cardList),
          ),
        );
    );
 }
}

-------
class SecondScreenPageView extends StatelessWidget {
   final List<Widget> nameCardList;

   SecondScreenPageView({this.nameCardList});

   @override
   Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
       children: nameCardList,
      ),
    );
   }
 }

...