0

我想仅在我未来加载数据(ConnectionState.done)之后才显示一个浮动操作按钮。

它只是在等待期间显示,并不酷。我希望它在未来处理后显示(ConnectionState.done)。

有人给小费吗?

我的代码:

 @override
  void initState() {
    _future = getFuture();
    super.initState();
  }

  Future<List<Associated>> getFuture() async {
    return _webClient.findAll();
  }

 //@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder<List<Associated>>(

        future: _future, 

        builder: (context, snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.none:
              break;
            case ConnectionState.waiting:
              return Progress();
              break;
            case ConnectionState.active:
              break;
              case ConnectionState.done:
               if (snapshot.hasData) {
                final List<Associated> associateds = snapshot.data;
                if (associateds.isNotEmpty) {
                  return Container(

                    child: Form(
                      child: SingleChildScrollView(
                        child: associatedWidgets(associateds),
                      ),
                    ),
                  );
                }
              }
              return CenteredMessage(
                'Not found.',
                icon: Icons.warning,
              );
              break;
          }

        },
      ),
      floatingActionButton: Button(
        Icons.save,
        onClick: () {
          _update(context);
        },
      ),
    );
  }
4

1 回答 1

1

据我了解你的问题,我想回答一下。
像这样简单。

此外,我们不应该setState()在 FutureBuilder 内部调用。

所以,考虑到这种情况,我们可以做这样的事情。
定义一个变量bool isLoading = true;

@override
  void initState() {
    getFuture().then((value){
        setState(() { 
          _future = value;
          isLoading = false;
        });
    }).catch((e) {
     // Some Error Handling
    });
    super.initState();
  }

并在分配FloatingActionButton,做这样的事情。

  floatingActionButton: isLoading? null : Button(
        Icons.save,
        onClick: () {
          _update(context);
        },
      ),

但在这种情况下,您必须使用其他小部件FutureBuilder,就像这样。

Scaffold(
   body: isLoading ? Progress(): ListView()
);

提示:您可以只使用FloatingActionButton小部件 withonPressed而不是Button

于 2020-08-16T10:55:34.163 回答