flutter - Flutter中如何根据需求动态插入和移除widget?
问题描述
这个问题很常见。但是,我尝试通过在点击按钮时将 Container 添加到 Column 来模拟事件。但是,容器未添加到列中或未在屏幕上呈现。除此之外,setState 方法会显示一条警告,指出它没有被引用。
这是代码
import 'package:flutter/material.dart';
import 'package:focus7/Configurations/size_config.dart';
class Demo2 extends StatefulWidget {
@override
_Demo2State createState() => _Demo2State();
}
class _Demo2State extends State<Demo2> {
List<Widget> containersList = [
Container(
color: Colors.amberAccent,
height: 100,
width: 200,
),
Container(
color: Colors.red,
height: 100,
width: 200,
),
Container(
color: Colors.brown,
height: 100,
width: 200,
),
Container(
color: Colors.green,
height: 100,
width: 200,
),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(children: <Widget>[
...containersList,
RaisedButton(
onPressed: () {
setState() => containersList.add(Container(
color: Colors.lightBlue,
height: 100,
width: 200,
));
},
child: Text("click"),
)
]),
));
}
}
这是输出:
解决方案
问题是你正在使用箭头函数,这意味着你在右侧写的任何东西都会返回一些东西,你没有将它分配给任何不是实际要求的变量,这就是它显示错误的原因。
在解决您的问题时,将您的 setState 替换为以下一个。
setState(() {
containersList.add(Container(
color: Colors.lightBlue,
height: 100,
width: 200,
));
});
推荐阅读
- kubernetes - AWS EKS:我是否需要在安装 external-dns 之前删除 kube-dns?
- java - 具有身份验证的 Apache HttpClient Socks5 代理
- apache-kafka - Kafka连接基于密钥的读取值并写入HDFS
- php - 如何使用 MailChimp API 添加/放置地址?
- ionic-framework - Ionic Linking to ionic pro error in "cordova plugin add cordova-plugin-ionic"
- regex - Symfony - 一条消息用于多个断言
- graphql - 如何在多种类型上使用 GraphQL 片段
- sql - Oracle SQL 中的自联接 - 基于 1 个相同列和 1 个不同列选择行
- excel - VB6检查Excel工作簿是否打开
- bash - bash sqlite3 变量不会插入数据库