У меня есть список «имен» строк в NameViewList, и я пытаюсь передать его значения другому классу Basi c ().
Я пробовал этот подход, но он дает мне ошибку: error: 'names' является окончательным, и ему было присвоено значение при объявлении, поэтому его нельзя установить на новое значение. (final_initialized_in_declaration_and_constructor в [flutterspinningwheel] lib / nameviewlist.dart: 5)
Я использовал этот способ передачи переменной, и он работал, но когда я передаю список, он не работает
class NameViewList extends StatefulWidget {
NameViewList({Key key, this.names});
final List<String> names = <String>[];
@override
_NameViewListState createState() => _NameViewListState();
}
class _NameViewListState extends State<NameViewList> {
TextEditingController nameController = TextEditingController();
createDialog(BuildContext context){
return showDialog(context: context, builder: (context) {
return AlertDialog(
title: Text('Insert Name'),
content: TextField(
controller: nameController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Contact Name',
),
),
actions: [
MaterialButton(
child: Text('Submit'),
onPressed: (){
addItemToList();
Navigator.of(context).pop();
},
)
],
);
});
}
void addItemToList(){
setState(() {
widget.names.insert(0, nameController.text);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Settings'),
centerTitle: true,
),
body: Column(
children: [
IconButton(
icon: Icon(Icons.queue, color: Colors.green,),
onPressed: (){createDialog(context);},
),
Padding(
padding: EdgeInsets.all(20),
child: TextField(
controller: nameController,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Contact Name',
),
),
),
Row(
children: [
RaisedButton(
child: Text('Clear'),
onPressed: () {
setState(() {
widget.names.clear();
});
},
),
RaisedButton(
child: Text('Submit'),
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context)=> Basic(names: names)));
},
),
],
),