gpt4 book ai didi

flutter - TextFormField输入键,在构建过程中调用setState()-错误

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

嗨,我试图在单击Enter键时从TextFormField向ListView添加一些值。
但是在构建过程中获取错误setState()或markNeedsBuild()
我的代码如下。

    class ScanBarcode extends StatefulWidget {
@override
_ScanBarcodeState createState() => _ScanBarcodeState();
}
class _ScanBarcodeState extends State<ScanBarcode> {
List<String> litems = [];
final TextEditingController eCtrl = new TextEditingController();

@override
Widget build(BuildContext ctxt) {
return new Scaffold(
appBar: new AppBar(title: new Text("Dynamic Demo"),),
body: new Column(
children: <Widget>[
new TextFormField(
controller: eCtrl,
maxLines: null,
autovalidate: true,
textInputAction: TextInputAction.none,

// ignore: missing_return
validator: (value) {
if (value.isEmpty==false) {
// if(eCtrl.text.trim()!='') {
if (value.contains('\n')) {
debugPrint(value);
litems.add(value); // Append Text to the list
eCtrl.clear(); // Clear the Text area
setState(() {});
}
}
// }
},
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'Enter a search term'
),

),
new Expanded(
child: new ListView.builder
(
itemCount: litems.length,
itemBuilder: (BuildContext ctxt, int Index) {
return new Text(litems[Index]);
}
)
)
],
)
);
}
}
我正在错误以下。
  setState() or markNeedsBuild() called during build
如果有评论
 setState()
它工作正常,但值未添加到列表 View 中。
任何帮助将不胜感激。

最佳答案

您可以在下面复制粘贴运行完整代码
您可以使用addPostFrameCallback程式码片段

WidgetsBinding.instance.addPostFrameCallback((_) {
setState(() {});
});
工作演示
enter image description here
完整的代码
import 'package:flutter/material.dart';

class ScanBarcode extends StatefulWidget {
@override
_ScanBarcodeState createState() => _ScanBarcodeState();
}

class _ScanBarcodeState extends State<ScanBarcode> {
List<String> litems = [];
final TextEditingController eCtrl = TextEditingController();

@override
Widget build(BuildContext ctxt) {
return Scaffold(
appBar: AppBar(
title: Text("Dynamic Demo"),
),
body: Column(
children: <Widget>[
TextFormField(
controller: eCtrl,
maxLines: null,
autovalidate: true,
textInputAction: TextInputAction.none,

// ignore: missing_return
validator: (value) {
if (value.isEmpty == false) {
// if(eCtrl.text.trim()!='') {
if (value.contains('\n')) {
debugPrint(value);
litems.add(value); // Append Text to the list
eCtrl.clear(); // Clear the Text area
WidgetsBinding.instance.addPostFrameCallback((_) {
setState(() {});
});
}
}
// }
},
decoration: InputDecoration(
border: InputBorder.none, hintText: 'Enter a search term'),
),
Expanded(
child: ListView.builder(
itemCount: litems.length,
itemBuilder: (BuildContext ctxt, int Index) {
return Text(litems[Index]);
}))
],
));
}
}

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: ScanBarcode(),
);
}
}

关于flutter - TextFormField输入键,在构建过程中调用setState()-错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62672014/

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