【发布时间】:2020-09-13 14:10:03
【问题描述】:
我在 NameViewList 中有一个字符串“名称”列表,并尝试将其值传递给另一个类 Basic()。
我尝试了这种方法,但它给了我一个错误: 错误:'names' 是最终的,并且在声明时被赋予了一个值,因此不能将其设置为新值。 (final_initialized_in_declaration_and_constructor at [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)));
},
),
],
),
【问题讨论】:
标签: list flutter dart parameter-passing