#flutter #flutter-layout
Вопрос:
Добрый вечер ),
итак, у меня есть экспансионист внутри экспансиониста. Я хочу, чтобы заголовок менялся при открытии панели списка расширения, но как это сделать?
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: isExpanded == null?
Text('No position found') //code if above statement is true
:Text("N"),
);
},
Я понял, что мне нужно что-то подобное, но проверенное условие должно быть неправильным, потому что, когда я открываю панель расширения в части ExpansionPanelList, ничего не происходит.
Так что в целом моя структура выглядит так:
ExpansionTile -Панель расширения-Панель расширения
и мне интересно, как я могу узнать, открыта ли панель расширения в списке расширения, и когда у меня будет эта информация, я смогу просто передать ее в условие
Если вы хотите воссоздать: (строка 55 начинается с кода, который я опубликовал выше)
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: SingleChildScrollView(
child: ExpansionTile(
title: Text("Generelles Vorgehen"),
children: [ExpansionList()],
),
),
),
);
}
}
class ExpansionList extends StatefulWidget {
final Info info;
const ExpansionList({
Key key,
this.info,
}) : super(key: key);
@override
_ExpansionListState createState() => _ExpansionListState();
}
class _ExpansionListState extends State<ExpansionList> {
Widget _buildListPanel() {
return ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
infos[index].isExpanded = !isExpanded;
});
},
children: infos.map<ExpansionPanel>((Info info) {
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: isExpanded == null?
Text('No position found') //code if above statement is true
:Text("N"),
);
},
body:ListView.builder(
shrinkWrap: true,
itemCount: info.expandedValueData.length,
itemBuilder: (context, index) {
return CheckboxListTile(
title: Text(info.expandedValueData[index].title,
style: TextStyle(
decoration:
info.expandedValueData[index].completed
? TextDecoration.lineThrough
: null)),
value: info.expandedValueData[index].completed,
onChanged: (value) {
setState(() {
// Here you toggle the checked item state
infos.firstWhere(
(currentInfo) => info == currentInfo)
..expandedValueData[index].completed = value;
});
});
}),
isExpanded: info.isExpanded);
}).toList(),
);
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Container(
child: _buildListPanel(),
),
);
}
}
class expandedValue {
int id;
String title;
bool completed;
expandedValue({
this.id,
this.title,
this.completed = false,
});
}
class Info {
String headerValue;
bool isExpanded;
final List<expandedValue> expandedValueData;
Info({this.headerValue, this.isExpanded = false, this.expandedValueData});
}
List<Info> infos = [
Info(
headerValue: "Außenansicht",
expandedValueData: <expandedValue>[
expandedValue(id: 1, title: "Roststellen"),
expandedValue(
id: 2,
title:
"Farbunterschiede im Lack, Unregelmäßigkeiten [Problemstellen übermalt]"),
expandedValue(
id: 3,
title: "kleine Kratzer [hinter Karosserie größere Folgeschäden?]"),
expandedValue(
id: 4,
title: "Dichtungen an Scheiben amp; Türen [porös, rissig]"),
expandedValue(
id: 5,
title:
"Vorallem Windschutzscheibe auf Kratzer untersuchen [Gefahr größerer Rissbildung ]"),
expandedValue(
id: 6,
title:
"Lampen untersuchen, funktionsfähig? Innen beschlagene Scheinwerfer [Gefahr durch Wasserschaden]"),
expandedValue(
id: 7,
title: "Reifen [Risse o. abgefahrenes Profil?]"),
],
),
Info(
headerValue: "Innenraum",
expandedValueData: <expandedValue>[
expandedValue(
id: 1,
title: "klappern Türen oder deren Seitenverkleidung beim Schließen?"),
expandedValue(id: 2, title: "funktionierende Elektrik"),
expandedValue(id: 3, title: "Sitze"),
expandedValue(id: 4, title: "Rest"),
],
),
Info(
headerValue: "Motorraum",
expandedValueData: <expandedValue>[
expandedValue(
id: 1,
title:
"Motor schon vom Verkäufer warmgelaufen? [eventuell sollen Startprobleme vertuscht werden]"),
expandedValue(
id: 2,
title: "Batteriepole angerostet? [Gefahr vorzeitiger Entladung]"),
expandedValue(
id: 3,
title: "Gibt es Öl oder Bremsflüssigkeitsspuren an:"),
expandedValue(
id: 4,
title:
"Sprudelt Kühlswasser bei laufendem Motor [eventuell Zylinderkopfdichtung defekt]"),
expandedValue(id: 5, title: "Ölstand prüfen"),
],
),
Info(
headerValue: "Unterboden",
expandedValueData: <expandedValue>[
expandedValue(id: 1, title: "Roststellen?"),
expandedValue(
id: 2,
title:
"neuer Unterbodenschutz? [möglicher Versuch Problemstellen zu verdecken (z.B Schweißnähte etc.)]"),
expandedValue(
id: 3,
title: "sitzt der Auspuff fest, arbeitet der Motor leise?"),
],
),
Info(
headerValue: "Dokumenten- amp; Zahlencheck",
expandedValueData: <expandedValue>[
expandedValue(
id: 1, title: "Reperaturenabrechnungen vorhanden?"),
expandedValue(
id: 2,
title:
"macht Laufleistung Sinn? Mögliche Lufleistungen im Bereich von über 150 000 km, wenn:"),
expandedValue(
id: 3, title: "Zulassungsbescheinigung Teil 1amp;2 "),
expandedValue(id: 4, title: "Wartungen amp; Rechnungen"),
],
),
Info(
headerValue: "Probefahrt",
expandedValueData: <expandedValue>[
expandedValue(id: 1, title: "vor der Fahrt:"),
expandedValue(id: 2, title: "bei der Fahrt"),
expandedValue(id: 3, title: "nach der Fahrt"),
],
),
Info(
headerValue: "Garantie, Gewehrleistung und Vertrag ",
expandedValueData: <expandedValue>[
expandedValue(
id: 1,
title:
"auf Rechmäßigkeit prüfen, wegen Haftungsgründen verweisen wir hier auf andere Seiten, wie die der Allianz oder Cosmosdirekt o. ä. "),
],
),
];
Ответ №1:
Вместо isExpanded == null
использования !isExpanded
в троичном условии.
Комментарии:
1. Вы имеете в виду -> название: !IsExpanded == null?, это сработало для вас?
2.
title: !isExpanded ? Text('No position found') : Text('N'),
3. Да, я имел в виду только первую строку, я попробовал ее, и поведение для меня не изменилось, вы проверили это?
4. Я ничего не говорю
!isExpanded == null
. Используйте!isExapnded
только.5. О, я так заблудился, мне пора ложиться спать, спасибо за ответ