#flutter #gridview #widget #flutter-layout #flutter-animation
#flutter #gridview #виджет #flutter-layout #flutter-анимация
Вопрос:
Я новичок в flutter. Я хочу создать сетку размером 8×2 с кнопкой (пользовательский виджет кнопки).Но элементы в GridView потеряли свое состояние, когда они находятся вне области просмотра.Я также попробовал SilverGrid.Там также та же проблема.Вот мой фрагмент кода. Выбранный статус звуковой карты теряется, когда я прокручиваю вниз и возвращаюсь к началу звуковой карты.Я приложил образец изображения здесь.
import 'package:flutter/material.dart';
import 'package:relax/constants.dart';
import 'package:relax/soundcard.dart';
class Index extends StatefulWidget {
@override
_IndexState createState() => _IndexState();
}
class _IndexState extends State<Index> {
bool playState = false;
@override
Widget build(BuildContext context) {
return Container(
color: Color(0xFF55b9f3),
child: GridView.count(
primary: false,
padding: const EdgeInsets.all(20),
crossAxisSpacing: 40,
mainAxisSpacing: 40,
crossAxisCount: 2,
children: <Widget>[
SoundCard(
assetName: 'rain',
),
SoundCard(
assetName: 'summernight',
),
SoundCard(
assetName: 'water',
),
SoundCard(
assetName: 'wind',
),
SoundCard(
assetName: 'thunderstorm',
),
SoundCard(
assetName: 'forest',
),
SoundCard(
assetName: 'leaves',
),
SoundCard(
assetName: 'fireplace',
),
SoundCard(
assetName: 'waterstream',
),
SoundCard(
assetName: 'seaside',
),
SoundCard(
assetName: 'brownnoise',
),
SoundCard(
assetName: 'coffeeshop',
),
SoundCard(
assetName: 'fan',
),
SoundCard(
assetName: 'pinknoise',
),
SoundCard(
assetName: 'whitenoise',
),
SoundCard(
assetName: 'train',
),
],
)
);
}
}
Звуковая карта похожа на кнопку.Когда я прокручиваю и возвращаюсь к началу, выбранное состояние кнопки звуковой карты теряется из выбранного состояния.Может ли кто-нибудь помочь мне в этом?
Комментарии:
1. можете ли вы показать нам код, в котором при нажатии кнопки он выбирается?
2. Спасибо !, Я решил это, добавив `AutomaticKeepAliveClientMixin` с моим виджетом звуковой карты
3. @ARUNBALAJI пожалуйста, добавьте свое решение в качестве ответа и примите его, чтобы люди с похожими проблемами могли его найти.
Ответ №1:
Чтобы гарантировать, что состояние сохраняется даже после перехода с экрана, добавьте в состояние mixin с именем AutomaticKeepAliveClientMixin и переопределите средство получения wantKeepAlive как таковое:
class _IndexState extends State<Index> with AutomaticKeepAliveClientMixin
{
@override
bool get wantKeepAlive => true;
...
}
Ответ №2:
Я решаю вышеуказанную проблему, добавляя AutomaticKeepAliveClientMixin
свою звуковую карту. Вкратце, когда мы разрабатываем наши приложения, наш дизайн обычно имеет начальный экран с несколькими вкладками или просмотр страниц. Проблема, с которой мы сталкиваемся, заключается в том, что при смене страниц состояние предыдущей страницы будет потеряно. Это было неудобно.
Это решается приведенным ниже методом.
class Page extends StatefulWidget {
final String title;
const Page({
Key key,
@required this.title,
}) : super(key: key);
@override
_PageState createState() => _PageState();
}
class _PageState extends State<Page> with AutomaticKeepAliveClientMixin {
int _value = 0;
@override
Widget build(BuildContext context) {
super.build(context); /// Remember to add this line!!!
...
...
@override
bool get wantKeepAlive => true;
}
Не забудьте добавить «super.build (контекст); »