флаттер установите состояние, подобное посту в instagram

#flutter #dart #setstate

Вопрос:

извините за мой английский, я надеюсь, что смогу точно объяснить, чего я хочу. Если я создам переменную imageCount в части else, заданное состояние не произойдет. но если я создам его глобально, он станет установленным состоянием, но на этот раз он изменится на каждом изображении. Это мой код, так же, как и в Instagram, приходят сообщения, они перечислены один под другим. Я также пытаюсь напечатать номера изображений, теперь как я должен определить эту переменную? Какой бы пост пользователь ни прокрутил, его количество увеличится на 1.

 Widget _imageDisplay(int index) {  if (postsList == null) {  return null; } else { int imageCount=1; //this variable  return Container(  color: Colors.white,  width: MediaQuery.of(context).size.width,  height: MediaQuery.of(context).size.height * 0.5,  child: Stack(children: [  PhotoViewGallery(  onPageChanged: (index) {  setState(() {  imageCount = index   1;  });   },  customSize: MediaQuery.of(context).size,  backgroundDecoration: BoxDecoration(color: Colors.white),  pageOptions: _photoPageOpt(index),  ),  Align(  alignment: Alignment.topRight,  child: Text(imageCount.toString()    '/'    postsList[index].images.length.toString()))  ]),  ); }  

} то, что я пытаюсь сделать

Ответ №1:

Переменная imageCount должна быть частью состояния вашего виджета с отслеживанием состояния, в противном setState случае она не будет иметь эффекта. Поэтому он должен быть объявлен в вашем классе, который расширяется Statelt;MyWidgetgt; .

Когда _imageDisplay вызывается, если postsList значение равно null, вам нужно вернуть виджет, вы можете вернуть пустой контейнер, например SizedBox() .

Теперь, чтобы управлять логикой при обновлении вашей переменной imageCount , вам нужно поместить логику внутрь setState функции.

К сожалению, я не очень хорошо понял, чего именно вы хотите достичь, но попробуйте выразить это в условии, которое будет контролировать обновление счетчика изображений, как показано ниже:

 setState(() {  if(condition) {  imageCount = index   1;  } });