gpt4 book ai didi

list - 通过列表到Flutter中的另一个类(class)

转载 作者:行者123 更新时间:2023-12-03 03:22:03 25 4
gpt4 key购买 nike

我在NameViewList中有一个字符串列表“名称”,并试图将其值传递给另一个类Basic()。

我尝试了这种方法,但它给了我一个错误:
错误:“名称”是最终的,在声明时被赋予了值,因此无法将其设置为新值。 (位于[flutterspinningwheel] lib / nameviewlist.dart:5的final_initialized_in_declaration_and_constructor)

我用这种方式传递变量,它正在工作,但是当我传递列表时,它不起作用

     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)));
},
),
],
),

最佳答案

更改以下行:

  NameViewList({Key key, this.names});
final List<String> names = <String>[];

至:
  NameViewList({List<String> names}) : this.names = names ?? [];
final List<String> names;

您的问题是您要为 final变量设置两次值。首先,将其设置为空字符串列表。然后,如果要使用可选参数,则要重新设置它(如果没有可选参数,则该值设置为null)。

相反,我的解决方案对其进行了更改,因此我们仅通过首先询问可选参数是否为null(未设置)来设置 names变量一次,如果是这种情况,则将值设置为空列表。否则,我们使用可选参数。

关于list - 通过列表到Flutter中的另一个类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62027803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com