首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用本地数据的DropdownButton<List> -不要在屏幕上列出项目,只在热重新加载之后。

使用本地数据的DropdownButton<List> -不要在屏幕上列出项目,只在热重新加载之后。
EN

Stack Overflow用户
提问于 2021-05-29 01:04:44
回答 1查看 102关注 0票数 1

我是新手,我不知道如何解决这个问题。

我有一个等待方法的列表,但是我的屏幕不等待列表加载到列表,只有当我用热重新加载更新时,屏幕才能工作。

我的异步方法

代码语言:javascript
复制
ListaRefeitorio? _selecione;
    List<ListaRefeitorio> _refeitorios = <ListaRefeitorio>[];
    RefeitorioController controller = new RefeitorioController();
  
    @override
    void initState() {
      super.initState();
      _listarRefeitorios();
    }

我的屏幕

代码语言:javascript
复制
@override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBarControleAcessoWidget("Refeitório"),
            body: Column(
              children: [
                SizedBox(height: 30),
                Container(
                  child: Center(
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Container(
                        padding: EdgeInsets.only(left: 16, right: 16),
                        decoration: BoxDecoration(
                          border:
                              Border.all(color: AppColors.chartSecondary, width: 1),
                          borderRadius: BorderRadius.circular(15),
                        ),
                        child: DropdownButton<ListaRefeitorio>(
                          hint: Text("Selecione Refeitório"),
                          dropdownColor: AppColors.white,
                          icon: Icon(Icons.arrow_drop_down),
                          iconSize: 36,
                          isExpanded: true,
                          underline: SizedBox(),
                          style: TextStyle(
                            color: AppColors.black,
                            fontSize: 20,
                          ),
                          value: _selecione,
                          onChanged: (ListaRefeitorio? novoValor) {
                            setState(() {
                              _selecione = novoValor;
                            });
                          },
                          items: _refeitorios.map((ListaRefeitorio valueItem) {
                            return new DropdownMenuItem<ListaRefeitorio>(
                              value: valueItem,
                              child: new Text(valueItem.acessoPontoAcessoDescricao),
                            );
                          }).toList(),
                        ),
                      ),
                    ),
                  ),
                ),
                Container(),
                Expanded(
                  child: GridView.count(
                    crossAxisSpacing: 12,
                    mainAxisSpacing: 12,
                    crossAxisCount: 2,
                    children: [
                      Container(
                        child: SizedBox.expand(
                          child: FlatButton(
                            child: CardsWidget(
                              label: "Ler QR Code",
                              imagem: AppImages.scanQrCode,
                            ),
                            onPressed: () {
                              scanQRCode();
                            },
                          ),
                        ),
                      ),
                      Container(
                        child: SizedBox.expand(
                          child: FlatButton(
                            child: CardsWidget(
                                label: "Sincronizar Dados", imagem: AppImages.sync),
                            onPressed: () {
                              controller.sincronizar();
                              // RefeitorioService.listarRefeitorio();
                            },
                          ),
                        ),
                      ),
                      SizedBox(height: 30),
                      Text("Resultado"),
                      Text(QRCode),
                      Text(DataHora),
                      Text(_selecione.toString()),
                    ],
                  ),
                ),
              ],
            ));
      }

我试过使用未来者,但我不认为这是我的问题。

我不知道该怎么办了

EN

Stack Overflow用户

发布于 2022-02-24 07:12:32

对于DropDownButton列表,我也有同样的问题,因为它刷新了状态。

在使用自定义列表映射时,请记住在使用数据填充列表的方法中使用setState() (在我的示例中,它是从Sqflite中提取的)。

代码语言:javascript
复制
//This populate method would be called in either initstate or afterFirstLayout
populateDataList() {
    await controller.getList().then((list) => 
        setState(() {
            _refeitorios = list;
        })
    );
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67746892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档