У меня есть приложение Flutter, в котором я использую много блоков для обновления, извлечения списка, разработки всего списка и т. Д. Поэтому ниже я показал одну страницу, например, у меня есть страница Clist, где у меня есть блок и я запускаюцикл для вызова возврата CListIndividualCard (подробнее: state.cList [index]);которая на самом деле карта. Ниже приведены сначала коды для Clist, а затем CListIndividualCard. Проблема теперь в том, что у меня есть жест, который я нажимаю, и он перенаправляет меня на эту страницу
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BListPage()
)
);
, и то, что я замечаю в блоке этой страницы: clistApiBLoC, вызывается после нажатия этой новой страницы BListPage. Как избежать повторного создания этого в фоновом режиме?
Коды страниц CList.
class _CListPageState extends State<CListPage> with SingleTickerProviderStateMixin {
Widget _form;
CListApiBloc clistApiBLoC;
CListRepository _repo;
ScrollController _scrollController = new ScrollController();
@override
void initState() {
_repo = new CListRepository();
clistApiBLoC = new CListApiBloc(_repo);
super.initState();
}
@override
void dispose() {
super.dispose();
}
Widget build(BuildContext context) {
if(_form==null){
_form = _createForm(context);
}
return _form;
}
Widget _createForm(BuildContext context) {
final _scaffoldKey = new GlobalKey<ScaffoldState>();
return BlocProviderTree(
blocProviders: [
BlocProvider<CListApiBloc>(
bloc: clistApiBLoC,
),
],
cList: Scaffold(
key: _scaffoldKey,
resizeToAvoidBottomInset: true,
resizeToAvoidBottomPadding: false,
backgroundColor: pagebackgroundColor,
appBar: appBar(),
drawer: Theme(
data: Theme.of(context).copyWith(canvasColor: Colors.white),
cList: new ReusableWidgets().getDrawer('C List',context)
),
body: SafeArea(
cList: Column(
cListren: <Widget>[
SizedBox(
height: 20.0,
),
BlocBuilder(
bloc: clistApiBLoC,
builder: (BuildContext context, CListApiState state) {
if(state is CListInitialState){
if(state.cList.length>0){
return Flexible(
child: Container(
margin: EdgeInsets.all(0.0),
child: ListView.builder(
controller: _scrollController,
padding: EdgeInsets.only(top: 0.0, right: 0.0),
physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: state.cList?.length??0,
itemBuilder: (BuildContext ctxt, int index) {
return CListIndividualCard(details: state.cList[index]);
},
),
),
);
}
else{
return Container(
cList: Center(
cList: Text("No C Record Found"),
),
);
}
}
if (state is CListApiStateError) {
return Flexible(
cList: Center(
cList: Text(state.errorMessage,style: errorStyle,),
),
);
}
if (state is LoadingState) {
return Flexible(
cList: Center(
cList:CircularProgressIndicator(),
),
);
}
return Container(height: 0, width: 0,);
},
),
],
)
)
)
);
}
Вот коды CIndidividualCard.
class _CListIndividualCardState extends State<CListIndividualCard> {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return new Column(
children: <Widget>[
RoundedCardDataNoColor(
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
GestureDetector(
onTap: () {
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BListPage(
cID: widget.details.cID,
sID: widget.details.sID,
lID: widget.details.lID,
),
)
);
},
child: Icon(Icons.shopping_cart,size: 18,color: Colors.blue,),
),
SizedBox(width: 5,),
Text(
"Purchase",
style: purchaseStyle,
),
],
),
],
),
SizedBox(width: 20,),
],
),
],
)
]
)
)
]
);
}