Flutter ListView对手势进行动画处理

时间:2020-01-08 11:43:25

标签: flutter dart

我正在尝试在列表视图上获得一些动画反馈,当用户在列表项上单击时,它会缩小到90%,而在点击时返回到100%。问题在于,为了更新保存比例值的变量的状态,所有列表项都更新为该新比例。有什么解决办法吗?

1 个答案:

答案 0 :(得分:1)

  1. 使用StatefulBuilder仅针对被点击的列表项设置状态。
  2. OnTap更改setState()中的比例值。

以下是工作代码供您参考:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: DemoWidget(),
    );
  }
}

class DemoWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FlutterApp'),
      ),
      body: ListView.builder(
        itemCount: 10,
        itemBuilder: (BuildContext context, int index) {
          double scale = 1;
          return StatefulBuilder(
            builder: (BuildContext context, StateSetter setState) {
              return ListTile(
                title: Transform.scale(
                    scale: scale,
                    child: Container(
                      child: Text(index.toString()),
                      color: Colors.amberAccent,
                    )),
                onTap: () {
                  setState(() {
                    scale = scale == 1 ? 0.9 : 1;
                  });
                },
              );
            },
          );
        },
      ),
    );
  }
}

希望对您有所帮助,如有任何疑问,请发表评论。 如果这对您有用,请接受并对此答案进行投票。