2017-06-28 19 views
1

の次の問題を解決しません: 私はExpansionTilesのリストを持っています。私が直面している唯一の問題は、ビューからスクロールされた拡張されたExpansionTileが、ビューにスクロールした後で、もはや展開されないことです。これにより、望ましくないユーザーエクスペリエンスや、一種の「不安定な」スクロールが発生します。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'), 
     ], 
    ); 
    } 
} 

答えて

0

ではなくGlobalKeyPageStorageKeyを使用してください。

+0

ありがとうございます、魅力のように動作します。しかし、これはどこかで文書化されていますか?私はこの種のキーへの参照を見つけることができませんでした。 –

+0

ドキュメントを改善するためにhttps://github.com/flutter/flutter/pull/11034をオープンしました。 –