Есть ли способ изменить цвет всех кнопок в сетке при нажатии? - PullRequest
0 голосов
/ 04 августа 2020

Я кодирую приложение-лабиринт, которое состоит из 100 кнопок в виде сетки. Я хочу изменить цвет всех кнопок на зеленый при нажатии любой кнопки. Кроме того, можно ли изменить цвет другой кнопки при нажатии (ie закодируйте это так, чтобы нижняя правая кнопка меняла цвет при нажатии верхней левой)? Ниже приведен демонстрационный код, имеющий отношение к моей проблеме.

import 'dart:async';

import 'package:flutter/material.dart';
Color color=Colors.grey;

void main() {
  maze maze1=new maze();
  runApp(MyApp());
}

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

class gameButton extends StatefulWidget {
  @override
  gameButtonState createState() => gameButtonState();
}

class gameButtonState extends State<gameButton> {
@override
  Widget build(BuildContext context) {
  return Container(
    decoration: BoxDecoration(border: Border.all(color: Colors.black)),
    child: FlatButton(
      color: color,
      materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
      onPressed: () {
        setState(() {
          color=Colors.green;
        });
      },
    ),
  );
  }
}

class maze extends StatefulWidget {
  List<gameButton> empty_grid = [
    for (var i = 0; i < 100; i++) new gameButton()
  ];
  @override
  mazeState createState() => mazeState();
}

class mazeState extends State<maze> {
  @override
  Widget build(BuildContext context) {
  }
}



class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  maze maze1=new maze();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Demo Code"),
      ),
      body: Center(
        child:Column(
          children: <Widget>[
            GridView.builder(
              itemCount: 100,
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                  crossAxisCount: 10,
                  crossAxisSpacing: 0,
                  mainAxisSpacing: 0),
              shrinkWrap: true,
              itemBuilder: (BuildContext context, int index) {
                return maze1.empty_grid[index];
              },
            ),
          ],
        )
      ),
    );
  }
}




Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...