Мое приложение
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: Scaffold(body: Grid())));
class Grid extends StatefulWidget {
@override
_GridState createState() => _GridState();
}
class _GridState extends State<Grid> {
List<Widget> pieces = [Text('a'), Text('b'), Text('c')];
@override
Widget build(BuildContext context) {
return SafeArea(
child: GestureDetector(
onTap: () => setState(() => pieces[0] = Text('*')),
child: Wrap(children: pieces),
// child: ListView(children: pieces),
// child: GridView.count(crossAxisCount: 3, children: pieces),
),
);
}
}
Проблема
После того, как я коснусь Wrap, на экране появится «*» - как и ожидалось
Когда я заменяю Обтекание либо ListView, либо GridView, «а» не меняется. Почему?
Одинаковое поведение как в 'stable', так и в 'master'
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.12.13+hotfix.9, on Linux, locale en_GB.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[✓] Android Studio (version 3.6)
[✓] IntelliJ IDEA Community Edition (version 2019.3)
[✓] VS Code (version 1.44.0)
[✓] Connected device (1 available)
• No issues found!
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, v1.18.0-5.0.pre.89, on Linux, locale en_GB.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[✓] Android Studio (version 3.6)
[✓] IntelliJ IDEA Community Edition (version 2019.3)
[✓] VS Code (version 1.44.0)
[✓] Connected device (1 available)
• No issues found!
Кажется, что ключи не помогают
Кто-то написал и предложил использовать ключи - но удалил пост, прежде чем я смог поблагодарить их. Использование таких ключей ...
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: Scaffold(body: Grid())));
class Grid extends StatefulWidget {
@override
_GridState createState() => _GridState();
}
class _GridState extends State<Grid> {
List<Widget> pieces = [Text('a', key:UniqueKey()), Text('b', key:UniqueKey()), Text('c', key:UniqueKey())];
@override
Widget build(BuildContext context) {
return SafeArea(
child: GestureDetector(
onTap: () => setState(() => pieces[0] = Text('*', key:UniqueKey())),
child: Wrap(children: pieces),
// child: ListView(children: pieces),
// child: GridView.count(crossAxisCount: 3, children: pieces),
),
);
}
}
... не имеет значения.
Поскольку Wrap сильно отличается?
Согласно документации Flutter наследование:
Объект Diagnosticable DiagnosticableTree Widget RenderObjectWidget MultiChildRenderObjectWidget Обтекание
1032 * Объект Diagnosticable ДиагностическийTree Виджет *
Объект Diagnosticable DiagnosticableTree Widget StatelessWidget ScrollView BoxScrollView GridView
Таким образом, ListView и GridView сильно отличаются от Wrap. Это может объяснить проблему? Если да, то как ее решить?