【问题标题】:Flutter - How to pass search text from one widget to its another class widget while searching?Flutter - 如何在搜索时将搜索文本从一个小部件传递到另一个类小部件?
【发布时间】:2020-08-09 00:10:42
【问题描述】:

我在主状态小部件类中有一个搜索视图,在另一个小部件类中有一个列表视图。 现在,当用户搜索某些内容时,我想将搜索文本传递给 listview 小部件以调用 api。

那我该怎么做呢?

第一次打开列表时会起作用,但是当我搜索某些内容时,我该如何再次调用它?

下面是我的代码sn-p。

Stack(
      children: <Widget>[
        Flex(
          direction: Axis.vertical,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Divider(
              color: ColorsApp.gray,
              height: 1,
            ),
            searchView(),
            Expanded(
              child: OrderList(
                isSearch: isSearch,
                textSearch: textSearch,
                onCallBack: widget.onCalBack,
              ),
            ),
          ],
        ),
      ],
    );

现在搜索文本更改

 void _onTextChange(String value) {
    print(tag + "....value........" + value);

    if (value == "") {
      _writtingStatusController.add(true);
      _customSearchViewController.add(false);
      setState(() {
        textSearch = "";
        isSearch = true;
      });
    } else {
      _writtingStatusController.add(false);
      _customSearchViewController.add(true);
      setState(() {
        textSearch = value;
        isSearch = true;
      });
    }
  }

订单列表类

class OrderList extends StatefulWidget {
  final String textSearch;
  final bool isSearch;
  final Function onCallBack;

  const OrderList({
    Key key,
    this.textSearch,
    this.onCallBack,
    this.isSearch,
  }) : super(key: key);

  @override
  _OrderListState createState() => _OrderListState();
}

【问题讨论】:

  • 也添加您的searchView() 方法。您的 searchlist 在一个小部件(文件/路由)中。
  • 我想在搜索某些内容时将搜索文本传递给 ORDER LIST 类。那么如何每次都将 SEARCH TEXT 传递给 ORDER LIST 类,以及如何将它传递给 ORDER LIST 类,因为当它传递 init 方法时不会每次都调用。
  • 不,我没有使用流生成器你能举一个例子在这种情况下如何使用它吗?
  • 我的文本搜索类不同,订单列表类不同,但两者都在设计中的一页中。我制作了两个类小部件,所以我关心的只是当我搜索某些内容时如何将搜索文本传递给另一个类小部件。

标签: flutter flutter-layout


【解决方案1】:

您应该从父级传递onChanged 方法。

class SearchView extends StatelessWidget {
  final void Function(String) onChanged;

  const SearchView({Key key, this.onChanged}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return 
        ...
        TextField(
          ...
          onChanged: this.onChanged,
          ...
        ),
        ...
  }
}

然后在父级中:

Stack(
  children: <Widget>[
    Flex(
      direction: Axis.vertical,
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Divider(
          color: ColorsApp.gray,
          height: 1,
        ),
        SearchView(
            onChanged: _onChanged,
        ),
        Expanded(
          child: OrderList(
            isSearch: isSearch,
            textSearch: textSearch,
            onCallBack: widget.onCalBack,
          ),
        ),
      ],
    ),
  ],
);

【讨论】:

  • 感谢您的回答,但我的问题有点不同,我询问了如何将 textsearch 传递给 ORDER LIST 类并在那里进行文本搜索,因为我每次输入内容时都希望 textsearch 到那个小部件类。
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2022-01-16
  • 2020-08-20
  • 2023-03-10
  • 2021-09-26
相关资源
最近更新 更多