如何将数据从 StatelessWidget 传递到 StatefulWidget?
Posted
技术标签:
【中文标题】如何将数据从 StatelessWidget 传递到 StatefulWidget?【英文标题】:How to pass data from StatelessWidget to 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 中收到空值
我应该如何传递数据?
【问题讨论】:
【参考方案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 中创建一个回调函数(它将返回您要传递的数据)并通过构造函数将其传递给另一个小部件
【讨论】:
我尝试了很多东西,请您举例说明以上是关于如何将数据从 StatelessWidget 传递到 StatefulWidget?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 StatelessWidget 中的 StatefulWidget 访问变量?
如何在 StatelessWidget 的任何函数中获取上下文?
在 Flutter 中,如何将数据传递给 Stateless Widget?