如何将相同的小部件传递给 blocs 构建器中的所有状态
How to pass same widget to all states in a blocs builder
假设我有以下 bloc 构建器:
return BlocListener<LoginBloc, LoginState>(listener: (context, state) {
if (state is ErrorLoginState) {
showError(state.message, context);
}
}, child: BlocBuilder<LoginBloc, LoginState>(
builder: (context, state) {
if (state is StartLogin) {
return Center(
child: Loading(),
);
}
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 50.0),
child: Container(),
),
);
},
));
我如何将同一个小部件(如搜索栏)传递给所有状态渲染?唯一的方法是将他的代码放在所有状态条件中吗?
我已经做到了:
Widget build(BuildContext context){
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 50.0),
child: SizedBox(
children: [
_showSearch(),
]),
),
);
}
Widget _showSearch() {
return BlocListener<SearchBloc, SearchState>(
child: BlocBuilder<SearchBloc, SearchState>(
builder: (context, state) {
if (state is SearchInitial) {
return SearchHome();
} else if (state is SuccessFilterState) {
return SearchResult(opportunityList: state.opportunityList);
} else {
return ErrorSearch();
}
},
),
);
}
假设我有以下 bloc 构建器:
return BlocListener<LoginBloc, LoginState>(listener: (context, state) {
if (state is ErrorLoginState) {
showError(state.message, context);
}
}, child: BlocBuilder<LoginBloc, LoginState>(
builder: (context, state) {
if (state is StartLogin) {
return Center(
child: Loading(),
);
}
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 50.0),
child: Container(),
),
);
},
));
我如何将同一个小部件(如搜索栏)传递给所有状态渲染?唯一的方法是将他的代码放在所有状态条件中吗?
我已经做到了:
Widget build(BuildContext context){
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 50.0),
child: SizedBox(
children: [
_showSearch(),
]),
),
);
}
Widget _showSearch() {
return BlocListener<SearchBloc, SearchState>(
child: BlocBuilder<SearchBloc, SearchState>(
builder: (context, state) {
if (state is SearchInitial) {
return SearchHome();
} else if (state is SuccessFilterState) {
return SearchResult(opportunityList: state.opportunityList);
} else {
return ErrorSearch();
}
},
),
);
}