微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

展开 ExpansionTile 时如何自动向下滚动

如何解决展开 ExpansionTile 时如何自动向下滚动

我正在制作我的第一个 Flutter 应用程序;到目前为止享受它。我无法完全理解的一件烦人的事情是,我有一些 ExpandedTiles,如下所示:

Layout of Screen,with lists not expanded

然而,当tile被展开时,屏幕停留在同一位置;像这样:

After expanding

我想要的是,当展开 ExpandedView 时,应用程序是否向下滚动一点。

Desired placement after Expanding.

我发现了上一个问题,How to scroll an ExpansionTile / Listview when a tile is expanded?,但这有点不同,因为它每次只创建相同项目的列表。我想要相同的功能,但需要 3 或 4 个唯一列表。

 Widget build(BuildContext context) {
final title = 'Lunch Menu';

return MaterialApp(
  title: title,home: Scaffold(
    appBar: AppBar(
      title: Text(title),),body:
    ListView(
      children:
    <Widget>[
        ListTile(
          subtitle: Image.asset('assets/images/lunch-logo.jpg'),title:  ElevatedButton(
            child: Text('Back'),onpressed: () {
              Navigator.push(
                context,MaterialPageRoute(builder: (context) => HomeRoute()),);
            },ListTile(
          //leading: Image.asset('assets/images/lunch-logo.jpg'),subtitle: Text('Enjoy our Lunch Options!',style: TextStyle(
              fontSize: 18.0,color: Colors.blue,fontWeight: FontWeight.w600,textAlign: TextAlign.center,ExpansionTile(
          leading: Text(
            'Starters',style: TextStyle(
            fontSize: 18.0,children:<Widget>[ ListTile(
            leading: Image.asset('assets/images/food/image1.png'),title: Text('Title1'),isThreeLine: true,subtitle: Text('Description 1'),ListTile(
            leading: Image.asset('assets/images/food/image2.png'),title: Text('Title2'),subtitle: Text('Description2'),

如果有人能给我一个关于如何正确实现滚动控制器的指针,我将不胜感激。

解决方法

您可以创建自己的 ScrollController 并将其传递给 ListView,然后当 ExpansionTile 展开时,使用 onExpansionChanged 为控制器设置动画并向下滚动一点

class ListViewExample extends StatefulWidget {
  ListViewExample({Key key}) : super(key: key);

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

class _ListViewExampleState extends State<ListViewExample> {
  final ScrollController scroll = ScrollController();

  @override
  void dispose() {
    scroll.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return ListView(
      controller: scroll,children: [
        ListTile(
          subtitle: Image.asset('assets/images/lunch-logo.jpg'),title:  ElevatedButton(
            child: Text('Back'),onPressed: () {
              Navigator.push(
                context,MaterialPageRoute(builder: (context) => HomeRoute()),);
            },),ListTile(
          //leading: Image.asset('assets/images/lunch-logo.jpg'),subtitle: Text('Enjoy our Lunch Options!',style: TextStyle(
              fontSize: 18.0,color: Colors.blue,fontWeight: FontWeight.w600,textAlign: TextAlign.center,ExpansionTile(
          leading: Text(
              'Starters',onExpansionChanged: (value) {
            if (value)
              scroll.animateTo(120,//this is a hardcoded value,would need some tweaking
                duration: const Duration(milliseconds: 300),curve: Curves.linear);
          },children: [
            ... //Your widgets
          ],)
      ],);
  }
}

onExpansionChanged 在展开时返回 true,在折叠时返回 false,您可以使用这些值并检查滚动偏移量以了解是否需要为滚动设置动画以向下移动

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?