Как передать данные из StatelessWidget в Statefulwidget? - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь передать данные из StatelessWidget в StatefulWidget, но не могу это сделать. Пробовал различные варианты, но пока безуспешно

Ниже приведен код StatelessWidget

class ListFieldsForm2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => ListFieldFormBloc2(),
      child: Builder(
        builder: (context) {
          final formBloc = context.bloc<ListFieldFormBloc2>();

          return Theme(
            data: Theme.of(context).copyWith(
              inputDecorationTheme: InputDecorationTheme(
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(20),
                ),
              ),
            ),
            child: Scaffold(
              resizeToAvoidBottomInset: false,

              floatingActionButton: FloatingActionButton(
                onPressed: formBloc.submit,
                child: Icon(Icons.send),
              ),
              body: FormBlocListener<ListFieldFormBloc2, String, String>(
                onSubmitting: (context, state) {
                  //LoadingDialog.show(context);
                },
                onSuccess: (context, state) {

                  int u;

                  String copyrights;

                  String name1;

                  var parsedData = json.decode(state.successResponse);
                  List members = parsedData['members'];
                  members.forEach((member){

                    name1 = member['firstName'];
                    
                    List<String> _firstNames = [];
                    _firstNames.add(member["firstName"]);


                  });



                  MyHomePage().steps = members;
                  Navigator.pop(context);
                 
                },
                onFailure: (context, state) {


                  Scaffold.of(context).showSnackBar(
                      SnackBar(content: Text(state.failureResponse)));
                },
                
              ),
            ),
          );
        },
      ),
    );
  }
}

Я пробовал MyHomePage().steps = members; и 'MyHomePage (шаги: члены);', все же я получаю нулевые значения в StatefulWidget

Как мне передать данные?

Ответы [ 4 ]

0 голосов
/ 10 июля 2020

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

import 'package:flutter/material.dart';

void main() => runApp(HomePage());

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

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

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Container(
          child: SecondPage(
            callback: (value) {
              print(value);
            },
          ),
        ),
      ),
    );
  }
}

typedef void StringCallback(String val);

class SecondPage extends StatelessWidget {
  final StringCallback callback;
  const SecondPage({Key key, this.callback}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        callback('This is a sample text');
      },
      child: Center(
        child: Container(
          child: Text('press'),
        ),
      ),
    );
  }
}


просто проверьте и дайте мне знать, если это то, что вы хотите.

0 голосов
/ 10 июля 2020

Марк Дэвидс Попробуйте это:

Navigator.pop(context, members);

Получите данные с вашего pu sh код:

final members = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => ListFieldsForm2()),
    );
0 голосов
/ 10 июля 2020

Попробуйте это

Первая страница

RaisedButton(
              child: const Text('Send Data'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => Testing(todos: "Hello",),
                  ),
                );
           
              },
            ),

Вторая страница

class Testing extends StatefulWidget {
  String todos;
  Testing({Key key, @required this.todos}) : super(key: key);

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

class _TestingState extends State<Testing> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(child: Text(widget.todos)),
    );
  }
}
0 голосов
/ 10 июля 2020

В StatelessWidget создайте функцию обратного вызова (которая будет возвращать данные, которые вы хотите передать) и передайте ее через конструктор другому виджету

...