Flutter - Как передать текст поиска из одного виджета в другой виджет класса при поиске? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть одно представление поиска в основном классе виджетов statefull и одно представление списка в другом классе виджетов. Теперь, когда пользователь ищет что-то, я хочу передать поисковый текст в виджет списка, чтобы вызвать api.

, как я могу это сделать?

Когда первый раз открыть список, это будет работать, но когда я что-то ищу тогда как я могу позвонить снова?

Мой фрагмент кода ниже.

enter image description here

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();
}

1 Ответ

0 голосов
/ 25 апреля 2020

Вы должны передать метод 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,
          ),
        ),
      ],
    ),
  ],
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...