【问题标题】:How to pass data from StatelessWidget to Statefulwidget?如何将数据从 StatelessWidget 传递到 StatefulWidget?
【发布时间】:2020-10-30 23:27:02
【问题描述】:

我正在尝试将数据从 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(steps: members);',但我仍然在 StatefulWidget 中收到空值

我应该如何传递数据?

【问题讨论】:

    标签: json flutter flutter-widget


    【解决方案1】:

    这是您想要达到的目标吗?使用回调函数为您创建了一个示例示例:

    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'),
            ),
          ),
        );
      }
    }
    
    
    

    只要看看,让我知道这是否是你想要的。

    【讨论】:

    • 您只提供了一个无状态小部件,您可以提供另一个小部件,以便我可以告诉您可以做什么。 (我们将不胜感激完整的示例,以便我们知道您想要实现的目标)。
    【解决方案2】:

    试试这个

    首页

    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)),
        );
      }
    }
    

    【讨论】:

      【解决方案3】:

      Mark Davids试试这个:

      Navigator.pop(context, members);
      

      从您的推送代码中获取数据:

      final members = await Navigator.push(
            context,
            MaterialPageRoute(builder: (context) => ListFieldsForm2()),
          );
      

      【讨论】:

        【解决方案4】:

        在 StatelessWidget 中创建一个回调函数(它将返回您要传递的数据)并通过构造函数将其传递给另一个小部件

        【讨论】:

        • 我尝试了很多东西,请您举例说明
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-25
        • 1970-01-01
        • 2020-05-12
        • 1970-01-01
        • 2021-05-16
        • 2021-09-19
        • 2021-06-24
        相关资源
        最近更新 更多