Dart 使用文本和按钮动态制作卡片
我正在做笔记应用程序。我用文本和按钮动态制作卡片(通过单击按钮创建)。但我在更改当前卡上的文本时遇到问题。例如,我有3张有自己文本和按钮的卡片,我想更改第二张卡片上的文本,但第三张卡片上的文本正在更改。我怎样才能解决这个问题 在过去,我试着制作列表来收集短信,但我不知道如何识别当前的卡 全主飞镖Dart 使用文本和按钮动态制作卡片,dart,flutter,Dart,Flutter,我正在做笔记应用程序。我用文本和按钮动态制作卡片(通过单击按钮创建)。但我在更改当前卡上的文本时遇到问题。例如,我有3张有自己文本和按钮的卡片,我想更改第二张卡片上的文本,但第三张卡片上的文本正在更改。我怎样才能解决这个问题 在过去,我试着制作列表来收集短信,但我不知道如何识别当前的卡 全主飞镖 import 'package:flutter/material.dart'; import './changeTextPage.dart'; int count = 0
import 'package:flutter/material.dart';
import './changeTextPage.dart';
int count = 0;
String titlecard = '';
String textcard = '';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Notes',
theme: ThemeData(
primarySwatch: Colors.deepPurple
),
home: HomePage(title: 'Notes',),
);
}
}
class HomePage extends StatefulWidget {
HomePage({Key key, this.title}) : super(key: key);
final title;
@override
HomePageState createState() => HomePageState();
}
class HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
List<Widget> cards = new List.generate(count, (int i) => new MyCard());
return Scaffold(
appBar: AppBar(
title: Text('Notes'),
),
body: LayoutBuilder(
builder: (context, constraint) {
return Column(
children: <Widget>[
Container(
height: 650.0,
child: new ListView(
children: cards,
scrollDirection: Axis.vertical,
),
),
],
);
}
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
setState(() {
Navigator.push(context, MaterialPageRoute(
builder: (context) => changeText())
);
});
},
),
);
}
}
class MyCard extends StatefulWidget {
@override
myCard createState() => myCard();
}
class myCard extends State<MyCard> {
int myCount = count;
void click() {
setState(() {
Navigator.push(context, MaterialPageRoute(
builder: (context) => setNewText())
);
});
}
@override
Widget build(BuildContext context) {
return Center(
child: Card(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
ListTile(
leading: Icon(Icons.album),
title: Text(titlecard),
subtitle: Text(textcard),
),
ButtonTheme.bar( // make buttons use the appropriate styles for cards
child: ButtonBar(
children: <Widget>[
FlatButton(
child: const Text('Change Text'),
onPressed: click,
),
FlatButton(
child: const Text('LISTEN'),
onPressed: () { /* ... */ },
),
],
),
),
],
),
),
);
}
}
class setNewText extends StatefulWidget {
@override
SetNewText createState() => SetNewText();
}
class SetNewText extends State<setNewText> {
final titleController = TextEditingController();
final textController = TextEditingController();
final formkey = GlobalKey<FormState>();
void _submit() {
setState(() {
if (formkey.currentState.validate()) {
formkey.currentState.save();
Navigator.pop(context);
titlecard = titleController.text;
textcard = textController.text;
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Change Title'),
),
body: Column(
children: <Widget>[
Card(
child: Padding(
padding: EdgeInsets.all(2.0),
child: Form(
key: formkey,
child: Column(
children: <Widget>[
TextFormField(
controller: titleController,
decoration: InputDecoration(
labelText: 'Title'
),
validator: (value) => value.length < 1 ? 'Invalid Title' : null,
onSaved: (value) => value = titleController.text,
),
TextFormField(
controller: textController,
decoration: InputDecoration(
labelText: 'Text'
),
validator: (text) => text.length < 1 ? 'Invalid Text' : null,
onSaved: (text) => text = textController.text,
)
],
),
),
),
),
FlatButton(
textColor: Colors.deepPurple,
child: Text('SUBMIT'),
onPressed: _submit,
),
],
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“./changeTextPage.dart”;
整数计数=0;
字符串标题卡=“”;
字符串textcard='';
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:‘注释’,
主题:主题数据(
原始样本:颜色。深紫色
),
主页:主页(标题:“注释”),
);
}
}
类主页扩展了StatefulWidget{
主页({Key,this.title}):超级(Key:Key);
最终标题;
@凌驾
HomePageState createState()=>HomePageState();
}
类HomePageState扩展了状态{
@凌驾
小部件构建(构建上下文){
列表卡=新列表。生成(计数,(int i)=>new MyCard());
返回脚手架(
appBar:appBar(
标题:文本(“注释”),
),
正文:布局生成器(
生成器:(上下文,约束){
返回列(
儿童:[
容器(
身高:650.0,
子:新列表视图(
孩子们:卡片,
滚动方向:轴垂直,
),
),
],
);
}
),
浮动操作按钮:浮动操作按钮(
子:图标(Icons.add),
已按下:(){
设置状态(){
Navigator.push(上下文、MaterialPage路由)(
生成器:(上下文)=>changeText()
);
});
},
),
);
}
}
类MyCard扩展了StatefulWidget{
@凌驾
myCard createState()=>myCard();
}
类myCard扩展状态{
int myCount=计数;
无效单击(){
设置状态(){
Navigator.push(上下文、MaterialPage路由)(
生成器:(上下文)=>setNewText()
);
});
}
@凌驾
小部件构建(构建上下文){
返回中心(
孩子:卡片(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
列表砖(
前导:图标(Icons.album),
标题:文本(标题卡),
字幕:文本(文本卡),
),
ButtonTheme.bar(//使按钮对卡片使用适当的样式
孩子:巴顿巴(
儿童:[
扁平按钮(
子项:常量文本(“更改文本”),
按下:单击,
),
扁平按钮(
child:const Text('LISTEN'),
按下:(){/*…*/},
),
],
),
),
],
),
),
);
}
}
类setNewText扩展StatefulWidget{
@凌驾
SetNewText createState()=>SetNewText();
}
类SetNewText扩展了状态{
最终标题控制器=文本编辑控制器();
final textController=TextEditingController();
final formkey=GlobalKey();
作废(提交){
设置状态(){
if(formkey.currentState.validate()){
formkey.currentState.save();
Navigator.pop(上下文);
titlecard=titleController.text;
textcard=textController.text;
}
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“更改标题”),
),
正文:专栏(
儿童:[
卡片(
孩子:填充(
填充:所有边缘设置(2.0),
孩子:表格(
key:formkey,
子:列(
儿童:[
TextFormField(
控制器:标题控制器,
装饰:输入装饰(
标签文字:“标题”
),
验证程序:(value)=>value.length<1?“无效标题”:null,
onSaved:(value)=>value=titleController.text,
),
TextFormField(
控制器:textController,
装饰:输入装饰(
labelText:“文本”
),
验证程序:(text)=>text.length<1?“无效文本”:null,
onSaved:(text)=>text=textController.text,
)
],
),
),
),
),
扁平按钮(
textColor:Colors.deepPurple,
子项:文本('SUBMIT'),
按下按钮:_提交,
),
],
)
);
}
}
changeTextPage.dart
import 'package:flutter/material.dart';
import './main.dart';
class changeText extends StatefulWidget {
@override
ChangeText createState() => ChangeText();
}
class ChangeText extends State<changeText> {
myCard s = myCard();
final titleController = TextEditingController();
final textController = TextEditingController();
final formkey = GlobalKey<FormState>();
void _submit() {
setState(() {
if (formkey.currentState.validate()) {
formkey.currentState.save();
Navigator.pop(context);
count++;
titlecard = titleController.text;
textcard = textController.text;
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Change Title'),
),
body: Column(
children: <Widget>[
Card(
child: Padding(
padding: EdgeInsets.all(2.0),
child: Form(
key: formkey,
child: Column(
children: <Widget>[
TextFormField(
controller: titleController,
decoration: InputDecoration(
labelText: 'Title'
),
validator: (value) => value.length < 1 ? 'Invalid Title' : null,
onSaved: (value) => value = titleController.text,
),
TextFormField(
controller: textController,
decoration: InputDecoration(
labelText: 'Text'
),
validator: (text) => text.length < 1 ? 'Invalid Text' : null,
onSaved: (text) => text = textController.text,
)
],
),
),
),
),
FlatButton(
textColor: Colors.deepPurple,
child: Text('SUBMIT'),
onPressed: _submit,
),
],
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“/main.dart”;
类changeText扩展Stat
class Note {
String title;
String text;
Note(this.title, this.text);
}
class HomePageState extends State<HomePage> {
List<Note> _notes = [Note('Test', 'Some test note')];
@override
Widget build(BuildContext context) {
ListView cards = ListView.builder(
itemCount: _notes.length,
itemBuilder: (context, index) => MyCard(
title: _notes[index].title,
text: _notes[index].text,
onEdit: (title, text) => setState(() { // We'll get back to that later
_notes[index].title = title;
_notes[index].text = text;
})
));
// (...)