#flutter #search
Вопрос:
Код:
class SearchBarDemoApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Search Bar Demo',
theme: new ThemeData(primarySwatch: Colors.blue),
home: new SearchBarDemoHome());
}
}
class SearchBarDemoHome extends StatefulWidget {
@override
_SearchBarDemoHomeState createState() => new _SearchBarDemoHomeState();
}
class _SearchBarDemoHomeState extends State<SearchBarDemoHome> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
SearchBar searchBar;
AppBar buildAppBar(BuildContext context) {
return new AppBar(
title: new Text('Search Bar Demo'),
actions: [searchBar.getSearchAction(context)]);
}
void onSubmitted(String value) {
setState(() {
var context = _scaffoldKey.currentContext;
if (context == null) {
return;
}
ScaffoldMessenger.maybeOf(context)
?.showSnackBar(
new SnackBar(content: new Text('You wrote "$value"!')));
});
}
_SearchBarDemoHomeState() {
searchBar = SearchBar(
inBar: false,
buildDefaultAppBar: buildAppBar,
setState: setState,
onSubmitted: onSubmitted,
onCleared: () {
print("Search bar has been cleared");
},
onClosed: () {
print("Search bar has been closed");
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Food3Rs'),
backgroundColor: Colors.green,
),
);
}
}
Сообщение об ошибке: ошибка: Необходимо инициализировать поле экземпляра «Панель поиска», не допускающее значения null. (поле not_initialized_non_nullable_instance_field в [имя_старта] libmain.dart:167)
Больше никаких подробностей. Большое вам спасибо за вашу помощь!!!!!!!!!!!!!!! Не хватает слов….Поэтому я не могу успешно загрузить.Да, я могу загрузить его.
Ответ №1:
_SearchBarDemoHomeState() {
searchBar = SearchBar(
inBar: false,
buildDefaultAppBar: buildAppBar,
setState: setState,
onSubmitted: onSubmitted,
onCleared: () {
print("Search bar has been cleared");
},
onClosed: () {
print("Search bar has been closed");
});
}
Здесь вы создаете панель поиска. Внутри панели создания панели поиска вы пытаетесь создать панель приложений: buildDefaultAppBar: buildAppBar,
Но когда вы хотите создать панель приложений, вы еще не создали панель поиска, хотя и пытаетесь ее использовать:
AppBar buildAppBar(BuildContext context) {
return new AppBar(
title: new Text('Search Bar Demo'),
actions: [searchBar.getSearchAction(context)]);
}
Поэтому он выдает эту ошибку. Вы пытаетесь использовать searchBar
его до того, как он будет создан.
Ответ №2:
Вам нужно инициализироваться SearchBar
. Либо инициализируйте его, сказав SearchBar searchBar = SearchBar(whateverGoesInside);
, либо, если вы хотите инициализировать позже, вы можете добавить late
ключевое слово спереди, например late SearchBar searchBar;
, чтобы компилятор знал, что вы собираетесь инициализировать его позже.