flutter - 输入'未来' 不是 'Widget' 类型的子类型
问题描述
我是 Flutter 的新手。我在构造函数中调用未来方法时遇到问题。我创建了一个方法,该方法返回一个带有小部件的类,取决于所选项目。问题是我需要多次调用这个方法,第一次构建body,第二次更新body on tap。但是我看到错误“类型'Future'不是'Widget'类型的子类型”如果我添加void类型而不是Future,它将执行一次以创建主体。代码片段:
class DataPageState extends State<DataPage> {
....
_tables() async {
if (selectedValue == "a") {
return DataA();
}
if (selectedValue == "b") {
return DataB();
}
if (selectedValue == "c") {
return DataC();
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(...
body: new Stack(children: <Widget>[
_tables(), //errors this //I need to call method this
... new Stack(children: <Widget>[
AnimatedContainer(...),
InkWell(onTap: () => setState(
() {
_tables(); //and this
},
),)])...}
解决方案
_tables() 不能是异步的。你必须返回Widget
而不是Future<widget>
.
这是如何在点击时添加小部件的演示。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Home(),
);
}
}
class Home extends StatefulWidget {
Home({Key key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
Widget _add = Container();
test() {
_add = Text("datcdsvcdsvsvdjvkjdsvsa");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Demo"),
),
body: Container(
child: Stack(
children: <Widget>[
RaisedButton(
color: Colors.amber,
child: Text("Press"),
onPressed: () {
setState(() {
test();
});
},
),
_add,
],
),
),
);
}
}
推荐阅读
- c# - 使用自定义 Api 作为通知的侦听器的验证请求上的 Microsoft Azure Graph API 订阅错误
- laravel - 嵌套文档上的 where 子句
- wpf - 是否可以在 Windows 7 Embedded 上运行 .NET core 3.1 应用程序?
- javascript - 如何拆分数组中的数字?javascript
- mysql - 如何在mysql数据库中以整数形式进行ipv6?
- javascript - 在所有键值对都是唯一的对象数组中查找对象
- python - 没有从 main 返回的值
- javascript - 如何在特定的 binlog 位置重启?
- deployment - Azure DevOps 发布管道上的 ClickOnce 部署
- html - 为什么我的嵌套网格没有显示在屏幕上?CSS