#flutter
#flutter
Вопрос:
Я новичок в Flutter, и я не могу понять, почему я не вижу данные внутри DropDownButton, даже если в списках, которые я использую для создания DropDownButton, есть данные внутри них. Кто-нибудь может объяснить мне, почему это происходит? Единственная подсказка, которая у меня есть, заключается в том, что DropDownButton запускает создание до того, как я создам список, из которого берутся данные.
Проблема в том, что мой выпадающий список пуст.
Я предоставляю весь код ниже.
Код :
import 'package:flutter/material.dart';
import 'ListOfClienti.dart';
class CreateClient extends StatefulWidget {
@override
_CreateClientState createState() => _CreateClientState();
}
class _CreateClientState extends State<CreateClient> {
String ClientCod = '';
String currentClient = '';
List<String> listNameOfClients = [];
List<DropdownMenuItem<String>> actualList2 = [];
void getClientsName() {
for (var i = 0; i <= ListDatabase.length - 1; i ) {
var name = ListDatabase[i].nome;
print(name);
listNameOfClients.add(name);
}
}
void createListWithClientName() {
for (String oneByOneClient in listNameOfClients) {
var VariableToInsert2 = DropdownMenuItem(
child: Text(oneByOneClient),
value: oneByOneClient,
);
actualList2.add(VariableToInsert2);
}
}
//Method that allows me to create the DropDownButton
DropdownButton<String> createNameMachine() {
return DropdownButton(
items: actualList2,
style: TextStyle(
color: Colors.black,
fontFamily: 'Keqima',
fontSize: 15,
),
value: currentClient,
onChanged: (clientSelected) {
setState(() {
currentClient = clientSelected;
});
},
);
}
@override
Widget build(BuildContext context) {
return Container(
color: Color(0xff757575),
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: EdgeInsets.all(16),
child: TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Inserisci il codice cliente',
),
onChanged: (textInsideTheField) {
ClientCod = textInsideTheField;
},
),
),
Padding(
padding: EdgeInsets.all(16),
child: Row(
children: <Widget>[
FlatButton(
onPressed: () {
getClientsName();
createListWithClientName();
print(actualList2.length);
},
child: Text(
'Clienti : ',
style: TextStyle(
fontSize: 20,
fontFamily: 'Keqima',
),
),
),
SizedBox(
width: 20,
),
createNameMachine(),
],
),
),
],
),
),
);
}
}
Комментарии:
1. Во-первых, в вашем
getClientsName
методе они есть так,var name = ListDatabase[i].nome
как и должно быть.name
2. Кроме того, вы, похоже, не
ListDatabase
создали, если это не где-то еще в коде, который не показан3. Нет, это нормально, это должно быть .nome, поскольку в списке<Клиенты> есть поле » .nome » . Проблема не в этом.
4. Да, как вы можете видеть, я импортировал ListOfClients, и внутри него у меня есть база данных ListDatabase
5. 2 метода выполняют свою работу очень хорошо, 3 метода, который создает раскрывающуюся кнопку, является проблемой
Ответ №1:
Чтобы решить эту проблему, мне пришлось изменить на things :
-
Дело в том, что мне пришлось изменить список из этого списка listNameOfClients = []; в этот список listNameOfClients = [«];
-
Мне пришлось интегрировать setState и inside для вызова функций.
setState(() { getClientsName(); createListWithClientName(); });