android - 使用参数单击添加小部件
问题描述
我按照这个堆栈帖子在点击时创建小部件。但是,由于我正在创建一个表单,我需要向新小部件发送一个参数,以便将问题标记为 1、2、3 等等。这是代码和执行剪辑:
import 'package:flutter/material.dart';
class CreateForms extends StatefulWidget{
@override
State<StatefulWidget> createState() => _CreateForms();
}
class _CreateForms extends State<CreateForms>{
//final myController = TextEditingController();
int _numQuestions = 1;
@override
Widget build(BuildContext context) {
print("numQuestions first: $_numQuestions");
List<Widget> _questions = new List.generate(_numQuestions, (int i) => new Question(_numQuestions));
return Scaffold(
backgroundColor: Colors.white,
body: Container(
padding: new EdgeInsets.all(30.0),
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(height: 20),
_displayTitle(),
new Container(
height: 200.0,
child: new ListView(
children: _questions,
scrollDirection: Axis.vertical,
),
),
new FlatButton(
onPressed: (){
setState(() {
_numQuestions++;
});
},
child: new Icon(Icons.add),
),
SizedBox(height: 20),
const Divider(
color: Colors.black,
height: 20,
thickness: 1,
indent: 20,
endIndent: 0,
),
Row(
children: <Widget>[
new Expanded(child: FlatButton(
onPressed: () {
//return to prev window
Navigator.pop(context);
},
padding: EdgeInsets.symmetric(vertical: 10),
child: Text('Cancel', style: TextStyle(fontSize: 20.0)),
), flex: 2),
new Expanded(child: RaisedButton(
child: Text('Create form', style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
onPressed: () {
//return to prev window with task text
Navigator.pop(context/*, myController.text*/);
},
), flex: 3)
],
)
],
),
),
);
}
_displayTitle(){
return TextField(
maxLines: null,
autofocus: true,
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'Form title'
),
style: TextStyle(
color: Colors.black,
fontSize: 20,
fontWeight: FontWeight.bold
),
);
}
}
class Question extends StatefulWidget {
int _numQuestions;
Question(int numQuestions){
print("numQuestions: $_numQuestions");
this._numQuestions = _numQuestions;
}
@override
State<StatefulWidget> createState() => new _Question(_numQuestions);
}
class _Question extends State<Question> {
int _numQuestions;
_Question(int numQuestions){
this._numQuestions = _numQuestions;
}
@override
Widget build(BuildContext context) {
return new TextFormField(
maxLines: null,
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'Question title',
isDense: true,
prefixIcon:Text(_CreateForms()._numQuestions.toString() + ". "),
prefixIconConstraints: BoxConstraints(minWidth: 0, minHeight: 0),
),
);
}
}
问题:
我如何正确地用相应的数字标记每个新问题?我尝试删除_CreateForms()
in prefixIcon:Text(_CreateForms()._numQuestions.toString() + ". "),
,但随后显示的数字为“null”
额外的问题:如果我删除,为什么一切都会消失height: 200.0,
?
编辑:要解决这个问题, Question 和 _Question 类的构造函数应该是:
_Question(int numQuestions){
this._numQuestions = numQuestions;
}
并不是
_Question(int numQuestions){
this._numQuestions = _numQuestions;
}
解决方案
你应该
在列表视图List<Widget> _questions = new List.generate(_numQuestions, (int i) => new Question(i));
消失中
完成,Question(_numQuestions));
因为它需要一个固定的高度,也许用 Expanded 而不是 Container 包装列表视图会有所帮助。此外,您可以resizeToAvoidBottomPadding: false
在脚手架内添加以避免打开键盘时出现黄色条带。
推荐阅读
- android - 在 ImaveView 上添加间隔,如图像轮播
- azure-active-directory - MSAL.js - 隐式身份验证 - 回复 url 参数问题
- openssl - 如何使用 Openssl ca 将证书文件名保存在索引文件中
- reactjs - 制作自定义 url /myadmin 以安装和使用 react-admin 应用程序
- python - 如何使用客户端 ID 和 Secret 实现对 FastAPI 的 OAuth
- python-3.x - 如何在 Python 中调用另一个类函数的一个类输出?
- ruby-on-rails - 如何在 Rails 6 中转换时间戳(created_at)?
- c# - 在 tabitem 标题内的按钮单击事件期间发送 Tab
- php - 在 WooCommerce 产品类别页面循环中获取帖子计数
- c++ - 具有父命名空间的嵌套命名空间中的重载解决方案