Meu objetivo é conseguir uma caixa de texto, que tenha uma seta suspensa, com um histórico para que o usuário possa selecionar uma entrada anterior. No entanto... Cheguei a um ponto em que queria encolher essa caixa de texto, porque ela estava ocupando espaço desnecessário. O problema é que, quando um valor de histórico ocorre, ele ocupa todo o espaço da caixa de texto e os itens dentro do menu suspenso parecem muito grandes.
É assim que aparece antes de ter um valor dentro dos dados do histórico:
O que eu quero alcançar é ter a largura do campo de texto de um endereço IP, o da segunda foto funciona e o menu suspenso para ter elementos menores de entradas anteriores, para que o usuário possa selecioná-los.
Aqui está o HistoryTextField
código:
import 'package:flutter/material.dart';
class HistoryTextField extends StatefulWidget {
const HistoryTextField({super.key});
@override
State<HistoryTextField> createState() => _HistoryTextFieldState();
}
class _HistoryTextFieldState extends State<HistoryTextField> {
final TextEditingController _controller = TextEditingController();
final List<String> _history = [];
String? _selectedHistory;
@override
void initState() {
super.initState();
// Load history from storage (if applicable)
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
void _addToHistory(String text) {
if (text.isNotEmpty && !_history.contains(text)) {
_history.insert(0, text);
// Save history to storage (if applicable)
}
}
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
child: TextField(
controller: _controller,
onChanged: (value) {
setState(() {
_selectedHistory = null;
});
},
onSubmitted: (value) {
_addToHistory(value);
_controller.clear();
},
),
),
DropdownButton<String>(
value: _selectedHistory,
onChanged: (String? newValue) {
setState(() {
_selectedHistory = newValue;
_controller.text = newValue!;
});
},
items: _history.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
),
],
);
}
}
E como tenho usado o widget em si:
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Text("IP Address: "),
SizedBox(width: 200, child: HistoryTextField())
],
)