Согласно источникам метода 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
.