Flutter 颤振-嵌套OnTap不';我不能在瓷砖上工作

Flutter 颤振-嵌套OnTap不';我不能在瓷砖上工作,flutter,listview,dart,Flutter,Listview,Dart,我不完全确定getx如何处理对话框(即,Get.defaultDialog如何工作),但假设它与showDialog类似,那么如果不在对话框内部使用独立的状态管理或StreamBuilder 基本上你必须 将tappendex转换为StreamController,例如BehaviorSubjectfromrxdart 将Get.defaultDialog的content参数与StreamBuilder(或者在您的情况下,应根据值更改重建依赖的子项之一,ListView) 在新创建的Strea


我不完全确定getx如何处理对话框(即,
Get.defaultDialog
如何工作),但假设它与
showDialog
类似,那么如果不在对话框内部使用独立的状态管理或
StreamBuilder

基本上你必须

  • tappendex
    转换为
    StreamController
    ,例如
    BehaviorSubject
    from
    rxdart
  • Get.defaultDialog
    content
    参数与
    StreamBuilder
    (或者在您的情况下,应根据值更改重建依赖的子项之一,
    ListView
  • 在新创建的
    StreamBuilder
或者创建一个
StatefulWidget
,放置在对话框内部,一旦状态发生变化,它也会更新对话框外部
StatefulWidget
索引值


就个人而言,我认为使用
s的解决方案是可行的。

您是否尝试过为
列表视图
创建不同的
状态小部件
?因此,当调用
setState(…)
时,它将只关注重建
列表视图。
child: TextField(
            readOnly: true,
            decoration: InputDecoration(
              icon: Icon(Icons.arrow_drop_down),
            ),
            onTap: () {
              // var dialog = AlertDialog(
              Get.defaultDialog(
                title: '',
                // shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),

                content: Container(
                    width: MediaQuery.of(context).size.width / 1.5,
                    height: MediaQuery.of(context).size.height / 3,
                    child: Scrollbar(
                      isAlwaysShown: true,
                      child: ListView.builder(
                          shrinkWrap: true,
                          itemCount: _list.length,
                          itemBuilder: (context, index) {
                            return new Container(
                                color: this.tappedIndex == index ? Colors.grey : Colors.white,
                                child: ListTile(
                                  title: Text(_list[index]),
                                  onTap: () {
                                    setState(() {
                                      this.tappedIndex = index;
                                      // dropdownValue = _list[index];
                                    });
                                  },
                                )
                            );
                          })
                    ),
                  ),
)