Flutter 将自定义小部件动态添加到列表-颤振
我有一个简单的自定义小部件Flutter 将自定义小部件动态添加到列表-颤振,flutter,dart,flutter-layout,custom-widgets,Flutter,Dart,Flutter Layout,Custom Widgets,我有一个简单的自定义小部件trans()(transaction的缩写),它只接受一个数字和一个布尔值并显示一行,我有一个列表: List<trans> transactions=[ trans(false, 20), trans(true, -50), trans(false, 110), trans(false, 35.5), ]; 但是如何使用按钮向列表中添加新的小部件并动态更新屏幕?试试看 List<Wid
trans()
(transaction的缩写),它只接受一个数字和一个布尔值并显示一行,我有一个列表:
List<trans> transactions=[
trans(false, 20),
trans(true, -50),
trans(false, 110),
trans(false, 35.5),
];
但是如何使用按钮向列表中添加新的小部件并动态更新屏幕?试试看
List<Widget> transactions=[
trans(false, 20),
trans(true, -50),
trans(false, 110),
trans(false, 35.5),
Button(child:Text('This is button in the list')),
];
列出事务=[
trans(错误,20),
trans(true,-50),
trans(错误,110),
trans(错误,35.5),
按钮(子项:文本(“这是列表中的按钮”),
];
您可以尝试以下代码:
import 'package:flutter/material.dart';
import 'dart:math' as math;
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
extension Ex on double {
double toPrecision(int n) => double.parse(toStringAsFixed(n));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text("Flutter Demo App"),
),
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
final List<Trans> transactions = [
const Trans(myBool: false, myDouble: 20),
const Trans(myBool: true, myDouble: -50),
const Trans(myBool: false, myDouble: 110),
const Trans(myBool: false, myDouble: 35.5),
];
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
height: MediaQuery.of(context).size.height * .7,
child: Scrollbar(
showTrackOnHover: true,
child: ListView.builder(
itemCount: transactions.length,
itemBuilder: (context, index) {
return ListTile(
title: transactions[index],
);
},
),
),
),
RaisedButton(
onPressed: () {
final rnd = math.Random();
setState(
() {
transactions.add(
Trans(
myBool: rnd.nextBool(),
myDouble:
rnd.nextDouble().toPrecision(2) + rnd.nextInt(100),
),
);
},
);
},
child: const Text("Add Transaction"),
),
],
);
}
}
class Trans extends StatelessWidget {
final myBool;
final myDouble;
const Trans({Key key, this.myBool, this.myDouble}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
children: [
Text("Transaction: ${myBool.toString()} ${myDouble.toString()}")
],
);
}
}
导入“包装:颤振/材料.省道”;
导入'dart:math'作为数学;
最终颜色深蓝色=颜色。来自argb(255,18,32,47);
void main(){
runApp(MyApp());
}
双分机上的分机{
double-toPrecision(int n)=>double.parse(toStringAsFixed(n));
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:脚手架(
appBar:appBar(
标题:常量文本(“颤振演示应用程序”),
),
正文:中(
子项:MyWidget(),
),
),
);
}
}
类MyWidget扩展了StatefulWidget{
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
最终列表事务=[
常量转换(myBool:false,myDouble:20),
常量转换(myBool:true,myDouble:-50),
常量转换(myBool:false,myDouble:110),
常量转换(myBool:false,myDouble:35.5),
];
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
容器(
高度:MediaQuery.of(context).size.height*.7,
子:滚动条(
showtrackonhaver:true,
子项:ListView.builder(
itemCount:transactions.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:交易[索引],
);
},
),
),
),
升起的按钮(
已按下:(){
最终rnd=math.Random();
设定状态(
() {
交易记录。添加(
反式(
myBool:rnd.nextBool(),
myDouble:
rnd.nextDouble().toPrecision(2)+rnd.nextDouble(100),
),
);
},
);
},
子项:常量文本(“添加事务”),
),
],
);
}
}
类Trans扩展了无状态小部件{
最终myBool;
最后的我的双倍;
const Trans({Key-Key,this.myBool,this.myDouble}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回行(
儿童:[
文本(“事务:${myBool.toString()}${myDouble.toString()}”)
],
);
}
}
请先理解问题,然后再回答。
import 'package:flutter/material.dart';
import 'dart:math' as math;
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
extension Ex on double {
double toPrecision(int n) => double.parse(toStringAsFixed(n));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text("Flutter Demo App"),
),
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
final List<Trans> transactions = [
const Trans(myBool: false, myDouble: 20),
const Trans(myBool: true, myDouble: -50),
const Trans(myBool: false, myDouble: 110),
const Trans(myBool: false, myDouble: 35.5),
];
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
height: MediaQuery.of(context).size.height * .7,
child: Scrollbar(
showTrackOnHover: true,
child: ListView.builder(
itemCount: transactions.length,
itemBuilder: (context, index) {
return ListTile(
title: transactions[index],
);
},
),
),
),
RaisedButton(
onPressed: () {
final rnd = math.Random();
setState(
() {
transactions.add(
Trans(
myBool: rnd.nextBool(),
myDouble:
rnd.nextDouble().toPrecision(2) + rnd.nextInt(100),
),
);
},
);
},
child: const Text("Add Transaction"),
),
],
);
}
}
class Trans extends StatelessWidget {
final myBool;
final myDouble;
const Trans({Key key, this.myBool, this.myDouble}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
children: [
Text("Transaction: ${myBool.toString()} ${myDouble.toString()}")
],
);
}
}