Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 将自定义小部件动态添加到列表-颤振_Flutter_Dart_Flutter Layout_Custom Widgets - Fatal编程技术网

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()}")
      ],
    );
  }
}