flutter 在SingleChildScrollView中有2个容器和2个墨水池,当用户点击墨水池时,屏幕应滚动到相应的容器

qgelzfjb  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(94)

我在一列中有一个SingleChildScrollView。有两个墨水池排成一行。下面的行,我有2个容器具有不同的高度和内容。我希望屏幕滚动到第一个容器,当用户点击第一个墨水池和屏幕应该滚动到第二个容器,当用户点击第二个墨水池。代码在这里:

class ExperienceCustomDrawer extends StatelessWidget {
  ExperienceCustomDrawer({
    super.key,
  });

  @override
  Widget build(BuildContext context) {

    return Drawer(
        shape:const RoundedRectangleBorder(
          borderRadius: BorderRadius.only(
              topRight: Radius.circular(20),
              bottomRight: Radius.circular(20)),
        ),
        width: MediaQuery.of(context).size.width * 0.6,
        child:Container(
          color: Constants.black,
          child: SingleChildScrollView(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Padding(
                  padding: const EdgeInsets.fromLTRB(0, 15, 30, 15),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.end,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      InkWell(
                          onTap:(){
                            Navigator.of(context).pop();
                          },
                          child: const Icon(Icons.close, color: Constants.orange,))
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.fromLTRB(30, 15, 30, 15),
                  child: FittedBox(
                    fit: BoxFit.scaleDown,
                    child: Text("Sea Food Experience",
                      style: TextStyle(
                        color: Constants.white,
                        fontSize: 28,
                      ),
                    ),
                  ),
                ),

                //THIS IS MY INKWELL ROW
                Container(
                  width: MediaQuery.of(context).size.width *0.6,
                  height: 70,
                  color: Constants.grey,
                  child:
                  Row(
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: [
                      Padding(
                        padding: const EdgeInsets.symmetric(vertical: 15.0, horizontal: 30),
                        child: Column(
                          children: [
                            Flexible(
                                child: Text("Details",
                                  style: TextStyle(
                                    color: Constants.orange,
                                    fontSize: 16,
                                  ),
                                )),
                            Flexible(
                              child: Padding(
                                padding: const EdgeInsets.only(top: 8.0),
                                child: CircleAvatar(
                                  radius: 3,
                                  backgroundColor: Constants.orange,
                                ),
                              ),
                            )
                          ],
                        ),
                      ),

                      Padding(
                        padding: const EdgeInsets.symmetric(vertical: 15.0),
                        child: Column(
                          children: [
                            Flexible(
                                child: Text("Menus",
                                  style: TextStyle(
                                    color: Constants.orange,
                                    fontSize: 16,
                                  ),
                                )),
                            Flexible(
                              child: Padding(
                                padding: const EdgeInsets.only(top: 8.0),
                                child: CircleAvatar(
                                  radius: 3,
                                  backgroundColor: Constants.orange,
                                ),
                              ),
                            )
                          ],
                        ),
                      ),

                    ],
                  ),
                ),

//THIS IS THE FIRST CONTAINER
                Container(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      
                    ],
                  ),
                ),
                
                
                //THIS IS THE second CONTAINER
                Container(child: MenuCard()),


              ],
            ),
          ),
        )
    );
  }
}

我也希望当用户滚动屏幕和屏幕到达第二个容器的第二个墨水池应该改变其颜色为红色显示屏幕上的第二个容器。如果用户在第一容器上,则第一墨水池颜色应该是红色,第二墨水池颜色应该是橙子。

kb5ga3dv

kb5ga3dv1#

有几种方法你可以使用。
1.使用可滚动键
1.在列表视图中使用控制器
1.使用scrollable_positioned_list
有关详细信息,请参阅**THIS**。

相关问题