在Flutter中,可以通过使用回调函数将TextFormField中的数据从另一个小部件检索到main。
首先,在main.dart文件中创建一个StatefulWidget类,例如MyApp。在MyApp类的构造函数中,创建一个空的字符串变量,用于存储从另一个小部件检索到的数据。
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String retrievedData = '';
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Retrieve Data Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Retrieved Data: $retrievedData'),
AnotherWidget(callback: (data) {
setState(() {
retrievedData = data;
});
}),
],
),
),
),
);
}
}
在上述代码中,MyApp类继承自StatefulWidget,并创建了一个名为retrievedData的字符串变量,用于存储从另一个小部件检索到的数据。在MyApp的build方法中,使用Column小部件将显示retrievedData的文本和AnotherWidget小部件放在一起。
接下来,创建一个名为AnotherWidget的StatelessWidget类,用于显示一个包含TextFormField的小部件。在AnotherWidget类的构造函数中,接收一个回调函数作为参数,该回调函数用于将TextFormField中的数据传递回MyApp。
class AnotherWidget extends StatelessWidget {
final Function(String) callback;
AnotherWidget({required this.callback});
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(16.0),
child: TextFormField(
onChanged: (value) {
callback(value);
},
decoration: InputDecoration(
labelText: 'Enter data',
),
),
);
}
}
在上述代码中,AnotherWidget类继承自StatelessWidget,并接收一个名为callback的回调函数作为参数。在TextFormField的onChanged回调中,将输入的数据通过回调函数传递回MyApp。
最后,在main函数中,将MyApp作为根小部件运行。
void main() {
runApp(MyApp());
}
这样,当在TextFormField中输入数据时,该数据将通过回调函数传递给MyApp,并更新retrievedData的值。然后,retrievedData的值将在MyApp的build方法中显示出来。
这是一个简单的示例,演示了如何从另一个小部件检索到TextFormField中的数据并在主小部件中使用。根据具体的需求,你可以根据需要进行修改和扩展。
领取专属 10元无门槛券
手把手带您无忧上云