android - 如何通过在 AnimatedBuilder 中点击来关闭带有可关闭小部件的项目?

标签 android ios flutter dart

我是 flutter 新手。我有一个 Playground 应用程序,我正在尝试从列表中删除该项目。我发现这个例子没有关闭功能。通过在特定方向上滑动它可以正常工作,但我需要的是通过点击卡上的数字来消除它并完全删除滑动功能。提前致谢。

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

  final String title;

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

class ColorCards {
  int id;
  Color color;

  ColorCards({this.id, this.color});
}

class _MyHomePageState extends State<MyHomePage> {
  PageController controller;
  int currentPage = 0;
  List<ColorCards> cards = [
    ColorCards(id: 1, color: Colors.green),
    ColorCards(id: 2, color: Colors.yellow),
    ColorCards(id: 3, color: Colors.green),
    ColorCards(id: 4, color: Colors.yellow),
    ColorCards(id: 5, color: Colors.green),
  ];

  @override
  initState() {
    super.initState();
    controller = PageController(
      initialPage: currentPage,
      keepPage: false,
      viewportFraction: 0.85,
    );
  }

  @override
  dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    //Scaffold
    return Scaffold(
      appBar: AppBar(
        title: Text('Playground App'),
        backgroundColor: Colors.grey,
      ),
      body: Center(
        child: Container(
          child: PageView.builder(
              onPageChanged: (value) {
                setState(() {
                  currentPage = value;
                });
              },
              itemCount: cards.length,
              controller: controller,
              itemBuilder: (context, index) => builder(index)),
        ),
      ),
    );
  }

  builder(int index) {
    return AnimatedBuilder(
      animation: controller,
      builder: (context, child) {
        double value = 1.0;
        if (controller.position.haveDimensions) {
          value = controller.page - index;
          value = (1 - (value.abs() * .1)).clamp(0.0, 1.0);
        }
        return Center(
          child: Dismissible(
            key: Key(cards[index].id.toString()),
            direction: DismissDirection.up,
            onDismissed: (direction) {
              cards.removeAt(index);
              setState(() {
                controller.animateToPage(index,
                    duration: Duration(milliseconds: 1), curve: Curves.bounceIn);
              });
            },
            child: SizedBox(
              height: Curves.easeOut.transform(value) * 300,
              width: Curves.easeOut.transform(value) * 350,
              child: child,
            ),
          ),
        );
      },
      child: Container(
          child: Center(
              child: GestureDetector(
            onTap: () {
              print('Dismiss this item');
            },
            child: Text(
              cards[index].id.toString(),
              style: TextStyle(
                  fontSize: 60.0, color: Colors.white, fontWeight: FontWeight.bold),
            ),
          )),
          margin: const EdgeInsets.all(8.0),
          color: cards[index].color),
    );
  }
}

最佳答案

对于那些遇到同样情况的人,我已经找到了解决方法。首先,最好使用 AnimatedList 而不是 PageView。有关 AnimatedList 的详细信息,您可以找到 herehere .然后您必须在 ItemBuilder 类中指定 Dismissible 。就是这样,希望如此

关于android - 如何通过在 AnimatedBuilder 中点击来关闭带有可关闭小部件的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58543874/

相关文章:

ios - 空气 + iOS : what is the difference between iPad1 and iPad2

ios - 将 Controller 显示为 presentViewController 后 NSNotification 停止工作

android - Flutter TabBarView 不断调用构建器

image - Flutter pdf 生成对于图像太慢

java - 任务 :app:compileDebugJavaWithJavac in Android Studio 执行失败

android - 我在 flutter 中遇到 gradle 问题。无法打开设置文件的设置通用类缓存

ios - 从支持文件中删除了 wav 文件,但 xcode 仍在播放这些文件

android - Android 上一致的状态栏外观

android - 如何在 AAR 文件中将 ndk-stack 与共享库一起使用

android - 从 Google 的示例代码中获取 createMime is undefined for type beamActivity 错误