Flutter 类型';未来<;动态>';不是类型为';小部件';

Flutter 类型';未来<;动态>';不是类型为';小部件';,flutter,Flutter,我是个新手。 我在构造函数中调用future方法时遇到问题。我创建了一个方法,该方法返回一个类,其中包含所选项目的小部件。问题是我需要多次调用这个方法,第一次构建主体,第二次在点击时更新主体。但我看到错误“type‘Future’不是type‘Widget’的子类型”。如果我添加void而不是Future,它将执行一次以创建一个主体。 代码片段: class DataPageState extends State<DataPage> { .... _tables() asyn

我是个新手。 我在构造函数中调用future方法时遇到问题。我创建了一个方法,该方法返回一个类,其中包含所选项目的小部件。问题是我需要多次调用这个方法,第一次构建主体,第二次在点击时更新主体。但我看到错误“type‘Future’不是type‘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
                      },
                    ),)])...}
类DataPageState扩展状态{
....
_表()异步{
如果(selectedValue==“a”){
返回DataA();
}
如果(selectedValue==“b”){
返回DataB();
}
如果(selectedValue==“c”){
返回DataC();
}
}
@凌驾
小部件构建(构建上下文){
返回材料PP(。。。
正文:新堆栈(子项:[
_tables(),//错误this//我需要调用此方法
…新堆栈(子项:[
动画容器(…),
墨水池(onTap:()=>设置状态(
() {
_tables();//和这个
},
),)])...}
您的
\u tables()
函数应该返回一些小部件。如果您想使用一些异步调用来构建小部件,您可以使用。

\u tables()不能是异步的。您必须返回
小部件
,而不是
未来的

下面是如何在单击时添加小部件的演示

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,
          ],
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:主题数据(
主样本:颜色。蓝色,
),
home:home(),
);
}
}
类Home扩展了StatefulWidget{
主({Key}):超级(Key:Key);
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
小部件_add=Container();
测试(){
_add=文本(“datcdsvsvsvdjvkjdsva”);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“演示”),
),
主体:容器(
子:堆栈(
儿童:[
升起的按钮(
颜色:颜色。琥珀色,
子:文本(“按”),
已按下:(){
设置状态(){
test();
});
},
),
_加上,
],
),
),
);
}
}

但如何在“OnTap”事件中再次调用它?是否要在单击时添加小部件?