Как добавить hintText в Search Delegate? - PullRequest
0 голосов
/ 16 мая 2019

Как изменить текст подсказки и цвет текста подсказки на Flutter showSearch ()

 AppBar(
        backgroundColor: Colors.blue,
        centerTitle: true,
        title: appBarIcon(context),
        actions: <Widget>[
          IconButton(
              icon: Icon(Icons.search),
              onPressed: () {
                showSearch(
                    context: context,
                    delegate: CustomSearchDelegateAssets(_searchdata, widget.regId));
              })
        ],
      ),

1 Ответ

0 голосов
/ 16 мая 2019

Согласно источникам метода showSearch, он просто проталкивает новый маршрут - _SearchPageRoute.

Этот внутренний маршрут предоставляет виджет с состоянием (_SearchPage), который состоит из недавно созданного AppBar с текстовым полем в нем.

Вам нужно создать собственный маршрут на основе _SearchPageRoute, возвращая пользовательский _SearchPage. Маршрут нужно протолкнуть через собственный метод, основанный на логике showSearch.

Для достижения пользовательского hintText & hintStyle - измените InputDecoration в своем пользовательском _SearchPageState.


например. MySearchPageRoute

class MySearchPageRoute<T> extends PageRoute<T> {
  // ...
  @override
  Widget buildPage(
    BuildContext context,
    Animation<double> animation,
    Animation<double> secondaryAnimation,
  ) {
    return MySearchPage<T>( // KEY PROP: Custom stateful widget based on `_SearchPage`
      delegate: delegate,
      animation: animation,
    );
  }
  // ...
}

MySearchPage:

class MySearchPage<T> extends StatefulWidget {
  // ...
  @override
  State<StatefulWidget> createState() => MySearchPageState<T>();
}
class MySearchPageState<T> extends State<MySearchPage<T>> {
  // ...
  @override
  Widget build(BuildContext context) {
    // ...
    return Semantics(
      // ...
      child: Scaffold(
        appBar: AppBar(
          // ...
          title: TextField(
            // ...
            decoration: InputDecoration(
              border: InputBorder.none,
              hintText: "My Custom Search Label", // KEY PROP
              hintStyle: TextStyle(color: Colors.red), // KEY PROP
            ),
          ),
          // ...
        ),
        // ...
      )
    );
  }
  // ...
}

Пройдите по маршруту:

Future<T> showMySearch<T>({
  @required BuildContext context,
  @required SearchDelegate<T> delegate,
  String query = '',
}) {
  // ...
  return Navigator.of(context).push(MySearchPageRoute<T>( // KEY PROP
    delegate: delegate,
  ));
}

Другими словами - просто скопируйте _SearchPageRoute, _SearchPage, _SearchPageState и showSearch из источников . Затем внесите изменения в строки, которые я пометил // KEY PROP.

...