【问题标题】:ExpansionTile doesn't keep stateExpansionTile 不保持状态
【发布时间】:2017-12-01 21:39:14
【问题描述】:

以下问题: 我有一个ExpansionTiles 的列表,效果很好。我面临的唯一问题是,滚动出视图的扩展 ExpansionTile 在再次滚动到视图后将不再被扩展。这会导致不良的用户体验以及一种“跳跃”的滚动。

文档说明如下:

当与 ListView 等滚动小部件一起使用时,必须指定唯一键,以使 ExpansionTile 在滚动进出视图时能够保存和恢复其展开状态。

但这不起作用。到目前为止,我还没有找到任何方法来完成这项工作。
到目前为止的代码如下:

import 'package:flutter/material.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'ExpansionTile Test',
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Widget> _getChildren() {
    List<Widget> elements = [];
    for (int i = 0; i < 20; i++) {
      elements.add(new ListChild());
    }
    return elements;
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('ExpansionTile Test'),
      ),
      body: new ListView(
        children: _getChildren(),
      ),
    );
  }
}

class ListChild extends StatefulWidget {
  @override
  State createState() => new ListChildState();
}

class ListChildState extends State<ListChild> {
  GlobalKey<ListChildState> _key = new GlobalKey();
  @override
  Widget build(BuildContext context) {
    return new ExpansionTile(
      key: _key,
      title: const Text('Test Tile'),
      children: <Widget>[
        const Text('body'),
      ],
    );
  }
}

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    使用PageStorageKey 而不是GlobalKey

    【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2020-03-21
    • 2012-02-24
    相关资源
    最近更新 更多