我有一个问题,我有2个不同的dart文件,分别是main.dart和homeview.dart,我故意在homeview.dart上创建了一个自定义对话框,该对话框包含listview和仅数据字符串,我想在项目列表我创建了一个Inkwell小部件以能够进行OnTap:在main.dart中,它包含TextFormField,
问题是,如何在onTap列表项中将文本字符串移动到main.dart上的TextFormField上?
homeview.dart
final List<String> _listViewTypeInvest = [
"12 Months Invest",
"18 Months Invest",
"24 Months Invest",
];
child: ListView(
children: _listViewTypeInvest
.map( (data) => ListTile(
title: Text(data),
onTap: () => _scaffoldKey.currentState.showSnackBar(SnackBar(
content: Text(
"$data Clicked!",
style: TextStyle(fontFamily: "Montserrat"),
),
duration: Duration(seconds: 1),
)),
))
.toList(),
),
答案 0 :(得分:0)
您可以使用Function
回调。
因此,您想在homeview.dart
中添加一个函数作为属性。
class HomeView extends StatelessWidget {
final void Function(String) onStringSelected;
const HomeView({Key key, @required this.onStringSelected}) : super(key: key);
...
现在,一旦用户在对话框中按下按钮,就可以调用此功能。
因此,这将是您的onTap()
函数:
onTap: () {
onStringSelected(data); // this fires the callback function
_scaffoldKey.currentState.showSnackBar(SnackBar(
content: Text(
"$data Clicked!",
style: TextStyle(fontFamily: "Montserrat"),
),
duration: Duration(seconds: 1),
));
}),
无论您在哪里实例化homeview.dart
文件,现在都可以监听该新的onStringSelected
函数回调,例如,设置TextFormField的text属性。
HomeView(
onStringSelected: (myDataString) {
print("The user clicked $myDataString");
},
);