Как редактировать элементы GridView.Builder () в соответствии с другими элементами - PullRequest
0 голосов
/ 29 июня 2019

Я новичок в StackOverflow. Я хотел бы знать, как редактировать элементы GridView.Builder (). Предположим, если я коснусь элемента сетки, другие элементы должны отреагировать на это событие касания.

Например: если я щелкну по 0-му индексу, элемент с 1-м индексом также должен изменить свой пользовательский интерфейс, поскольку изменился пользовательский интерфейс 0-го индекса. Моя главная цель - сделать так, чтобы все элементы зависели друг от друга, чтобы onTap реагировал на другие элементы (желательно один) то есть; если я нажимаю x, y должен реагировать на предыдущее событие касания.

Вот мой код:

void main() => runApp(MyApp());
var clicked = List<bool>.generate(3, (i) => false);

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          width: 600,
          child: GridView.builder(
            shrinkWrap: true,
            itemCount: 3,
            itemBuilder: (BuildContext context, int index) {
              return myWidget(context, index, clicked);
            },
            gridDelegate:
                SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
          ),
        ),
      ),
    );
  }
}

class myWidget extends StatefulWidget {
  final BuildContext context;
  final int index;
  final List<bool> clicked;
  final value = ValueNotifier(false);
  myWidget(this.context, this.index, this.clicked);
  @override
  _myWidgetState createState() => _myWidgetState();
}

class _myWidgetState extends State<myWidget> {
  Color color;

  @override
  void initState() {
    color = Colors.transparent;
    super.initState();
  }

seeTheWidget(){
  setState(() {
    widget.clicked[widget.index] = !widget.clicked[widget.index];
    if(widget.clicked[widget.index]){
      color= Colors.green;
    }else{
      color = Colors.red;
    }
  }); 
}

//didUpdateWidget 
// ValueListenableBuilder
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      child: Card(
        color: color,
      ),
      onTap: () {
        seeTheWidget();
      },
    );
  }
}

Отредактировано - добавлено initState ()

Здесь я могу щелкнуть по отдельной карточке и изменить ее цвет. Мне нужно щелкнуть одну карточку, и любая из двух других карточек должна изменить свой цвет из-за предыдущего события касания onTap () Я надеюсь, что вопрос имеет смысл. Спасибо за ваше время

...