folgendes Problem: Ich habe eine Liste von ExpansionTiles, die sehr gut funktioniert. Das einzige Problem, mit dem ich konfrontiert bin, ist, dass eine expandierte ExpansionTile, die aus der Sicht gescrollt wird, nach dem Zurückscrollen nicht mehr erweitert wird. Dies führt zu einer unerwünschten Benutzererfahrung und auch zu einer Art "nervösem" Scrollen.ExpansionTile nicht Zustand halten
In der Dokumentation folgendes:
Wenn mit Scroll-Widgets wie Listview verwendet wird, muss ein eindeutiger Schlüssel angegeben werden, um die ExpansionTile zu ermöglichen, seine ausgedehnten Zustand zu speichern und wiederherzustellen, wenn es in die und aus der Sicht gescrollt .
Dies funktioniert jedoch nicht. Bis jetzt habe ich keine Möglichkeit gefunden, das zu schaffen.
Hier ist der Code so weit:
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'),
],
);
}
}
Danke dafür, funktioniert wie ein Charme. Aber ist das irgendwo dokumentiert? Ich konnte keinen Hinweis auf diese Art von Schlüssel finden ... –
Ich öffnete https://github.com/flutter/flutter/pull/11034, um die Dokumentation zu verbessern. –