Flutter-获取ListView文本中的值以粘贴到另一个Dart文件的TextField上

时间:2019-05-08 04:34:19

标签: flutter flutter-layout flutter-listview

main.dart image homeview.dart

我有一个问题,我有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(),
),

1 个答案:

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