【问题标题】:Adding a Progress Indicator when changing Tabs in Flutter在 Flutter 中更改选项卡时添加进度指示器
【发布时间】:2021-07-25 07:28:58
【问题描述】:

在我的一个屏幕上,我使用了 TAB BAR。每个选项卡对应于应显示项目列表的一种方式。它是一个单词列表(英语和法语翻译)。第一个 Tab 对应于字母顺序。第二个到语法类别(名词,副词......),第三个按难度显示单词。 我生成列表等没有问题...但是当有很多单词时,当您滑动屏幕或单击选项卡时,屏幕会延迟更改... 有没有办法添加进度指示器来向用户显示应用正在计算并准备好屏幕?

我需要的是一种检测用户何时点击标签或滑动屏幕的方法。选项卡的功能似乎与其他按钮不同。

以下是部分代码:

          bottom: TabBar(
              controller: _controller,
              indicatorWeight: 10,
              indicatorColor: Colors.green[800],
              tabs: [
                Tab(
                  child: Text(
                    'Ordre alphabétique',
                    textAlign: TextAlign.center,
                    style: TextStyle(color: Colors.red[800]),
                  ),
                ),
                Tab(
                  child: Text(
                    'Catégorie grammaticale',
                    textAlign: TextAlign.center,
                    style: TextStyle(color: Colors.red[800]),
                  ),
                ),
                Tab(
                  child: Text(
                    'Niveau',
                    textAlign: TextAlign.center,
                    style: TextStyle(color: Colors.red[800]),
                  ),
                ),
              ]),
        ),
        body: TabBarView(
          controller: _controller,
          children: [
            // Ecran par ordre alphabétique
            ListView(children: [
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: WordListCard(
                  taille: lP.generatedList.length,
                  titre: lP.selectedTheme != ''
                      ? lP.selectedTheme.toUpperCase()
                      : lP.selectedSubtheme.toUpperCase(),
                  mots: ListView.builder(
                   
                      itemCount: lP.generatedList.length,
                      itemBuilder: (context, index2) {
                        return ListTile(
                          contentPadding: EdgeInsets.all(0),
                          title: DicoListViewWordCard(
                            number: index2 + 1,
                            main: lP.dicoLanguage == Language.english
                                ? wordBank[lP.generatedList[index2]].main
                                : wordBank[lP.generatedList[index2]].mainFr,
                            trad: lP.dicoLanguage == Language.english
                                ? wordBank[lP.generatedList[index2]].mainFr
                                : wordBank[lP.generatedList[index2]].main,
                            onPress: null,
                          ),
                        );
                      }),
                ),
              ),
            ]),

            // ECRAN par catégorie grammaticale

            ListView(
              children: [
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: DicoListGrammarCard(
                    taille: lP.generatedList.length,
                    tailleNouns: lP.nounList.length,
                    tailleAdj: lP.adjectiveList.length,
                    tailleVerbs: lP.verbList.length,
                    tailleAdv: lP.adverbList.length,
                    taillePrep: lP.prepList.length,
                    titre: lP.selectedTheme != ''
                        ? lP.selectedTheme.toUpperCase()
                        : lP.selectedSubtheme.toUpperCase(),
                    nouns: ListView.builder(
                        physics: NeverScrollableScrollPhysics(),
                        shrinkWrap: true,
                        itemCount: lP.nounList.length,
                        itemBuilder: (context, index1) {
                          return ListTile(
                            contentPadding: EdgeInsets.all(0),
                            title: DicoListViewWordCard(
                              number: index1 + 1,
                              main: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.nounList[index1]].main
                                  : wordBank[lP.nounList[index1]].mainFr,
                              trad: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.nounList[index1]].mainFr
                                  : wordBank[lP.nounList[index1]].main,
                            ),
                          );
                        }),
                    adj: ListView.builder(
                        shrinkWrap: true,
                        physics: NeverScrollableScrollPhysics(),
                        itemCount: lP.adjectiveList.length,
                        itemBuilder: (context2, index2) {
                          return ListTile(
                            contentPadding: EdgeInsets.all(0),
                            title: DicoListViewWordCard(
                              number: index2 + 1,
                              main: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.adjectiveList[index2]].main
                                  : wordBank[lP.adjectiveList[index2]].mainFr,
                              trad: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.adjectiveList[index2]].mainFr
                                  : wordBank[lP.adjectiveList[index2]].main,
                            ),
                          );
                        }),
                    verbs: ListView.builder(
                        physics: NeverScrollableScrollPhysics(),
                        shrinkWrap: true,
                        itemCount: lP.verbList.length,
                        itemBuilder: (context3, index3) {
                          return ListTile(
                            contentPadding: EdgeInsets.all(0),
                            title: DicoListViewWordCard(
                              number: index3 + 1,
                              main: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.verbList[index3]].main
                                  : wordBank[lP.verbList[index3]].mainFr,
                              trad: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.verbList[index3]].mainFr
                                  : wordBank[lP.verbList[index3]].main,
                            ),
                          );
                        }),
                    adv: ListView.builder(
                        physics: NeverScrollableScrollPhysics(),
                        shrinkWrap: true,
                        itemCount: lP.adverbList.length,
                        itemBuilder: (context, index2) {
                          return ListTile(
                            contentPadding: EdgeInsets.all(0),
                            title: DicoListViewWordCard(
                              number: index2 + 1,
                              main: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.adverbList[index2]].main
                                  : wordBank[lP.adverbList[index2]].mainFr,
                              trad: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.adverbList[index2]].mainFr
                                  : wordBank[lP.adverbList[index2]].main,
                            ),
                          );
                        }),
                    prep: ListView.builder(
                        physics: NeverScrollableScrollPhysics(),
                        shrinkWrap: true,
                        itemCount: lP.prepList.length,
                        itemBuilder: (context, index2) {
                          return ListTile(
                            contentPadding: EdgeInsets.all(0),
                            title: DicoListViewWordCard(
                              number: index2 + 1,
                              main: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.prepList[index2]].main
                                  : wordBank[lP.prepList[index2]].mainFr,
                              trad: lP.dicoLanguage == Language.english
                                  ? wordBank[lP.prepList[index2]].mainFr
                                  : wordBank[lP.prepList[index2]].main,
                            ),
                          );
                        }),
                  ),
                ),
              ],
            ),

【问题讨论】:

    标签: flutter tabs


    【解决方案1】:
    class Home extends StatefulWidget {
      @override
      _HomeState createState() => _HomeState();
    }
    
    class _HomeState extends State<Home> {
     bool _load = false;
    
     void onClick() {
       setState(() {
         _load = true;
       });
    
       yourFunctionCode;
    
       setState(() {
         _load = false;
       });
     }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: _load
            ? Center(
              child: CircularProgressIndicator(),
            )
            : Container()
        );
      }
    }
    
    

    【讨论】:

    • 问题出在标签栏上:我找不到检测“onclick”的方法...
    • 我可以看到你有 2 个标签。打破不同小部件中的代码是一种很好的做法。创建 2 个新文件并创建 statefulwidgets。在两个小部件中使用上述方法。
    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多