我是新手,但我要在“编辑”按钮上单击“编辑项目”。在“编辑”上,当用户输入文本时,单击“打开带有文本字段的编辑对话框”,我尝试用特定的项目文本替换它,但是我找不到任何解决方案,请帮帮我。在这里,我附上了布局的屏幕截图,还发布了一些代码。
main.dart
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp(
items: List<String>.generate(100, (i) => "List item $i"),
));
}
Future<String> _asyncInputDialog(BuildContext context) async {
String sampleText = '';
return showDialog<String>(
context: context,
barrierDismissible:
false, // dialog is dismissible with a tap on the barrier
builder: (BuildContext context) {
return AlertDialog(
title: Text('Enter Text'),
content: new Row(
children: <Widget>[
new Expanded(
child: new TextField(
autofocus: true,
decoration: new InputDecoration(
labelText: 'Text Here', hintText: 'eg. ABCD'),
onChanged: (value) {
sampleText = value;
},
))
],
),
actions: <Widget>[
FlatButton(
child: Text('Ok'),
onPressed: () {
Navigator.of(context).pop(sampleText);
},
),
],
);
},
);
}
class MyApp extends StatefulWidget {
final List<String> items;
MyApp({Key key, @required this.items}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
final title = 'Long List';
return MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: ListView.builder(
itemCount: widget.items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${widget.items[index]}'),
trailing: RaisedButton(
child: Text('Edit'),
color: Colors.pinkAccent,
onPressed: () async {
final String newText = await _asyncInputDialog(context);
setState(() {
});
Scaffold.of(context).showSnackBar(new SnackBar(content: new Text("$newText"),));
},
),
);
},
),
),
);
}
}
在您的ListTile
中将items[index] = newText;
放在setState((){});
中,所以我看起来像这样。
ListTile(
title: Text('${items[index]}'),
trailing: RaisedButton(
child: Text('Edit'),
color: Colors.pinkAccent,
onPressed: () async {
final String newText = await _asyncInputDialog(context);
setState(() {
items[index] = newText;
});
Scaffold.of(context).showSnackBar(new SnackBar(
content: new Text("$newText"),
));
},
),
);