如何根据其他项目编辑GridView.Builder()项目

时间:2019-06-29 20:05:06

标签: flutter dart hybrid-mobile-app mobile-application flutter-web

我是StackOverflow的新手。我想知道如何编辑GridView.Builder()的项目。假设如果我点击Grid的一个元素,那么其他元素应该对该那个点击事件做出反应。

例如:如果单击第0个索引,则第1个索引的元素也应更改其UI,因为第0个索引的UI已更改。 我的主要目标是使所有元素相互依赖,以便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(),其他两张卡片中的任何一张应更改其颜色强> 我希望这个问题有意义。谢谢您的时间

0 个答案:

没有答案