【问题标题】:Updating the list view items inside drawer更新抽屉内的列表视图项目
【发布时间】:2023-02-03 20:43:03
【问题描述】:

这是一个单页应用程序。

我在主页的脚手架中创建了一个抽屉。标题下方的列表视图中有三个列表磁贴项。

当我单击列表磁贴时,我能够通过 onTap 方法更改抽屉的标题。

但是,如何在单击任何现有列表图块项目后用新列表图块项目替换当前列表图块项目。

一般来说,按下抽屉中的任何项目后如何更新列表图块项目

单击项目之前

点击更改字体后,列表没有变化

单击更改字体后我想要什么

我尝试制作一个返回列表视图的新函数,并在 onTap 内的 setState 中调用它,并在 setState 外部但在 onTap 内调用它

【问题讨论】:

  • 你能附上你想要达到的目标的图片吗?
  • 你好,我已经编辑了问题
  • 请考虑包括最小代码-sn-p
  • 嗨@siddhesh-kumbhar,欢迎来到stackoverflow.com。请在提问之前阅读本指南。您的请求没有重现代码,您将收到更少的回复。 stackoverflow.com/help/how-to-ask

标签: flutter dart state


【解决方案1】:

我这里做了一个简单的例子,如果满足你的需要,你可以看看。Simple Drawer

你也可以在飞镖垫上运行它 Dart pad

    import 'package:flutter/material.dart';

    const Color darkBlue = Color.fromARGB(255, 18, 32, 47);

    void main() {
      runApp(MyApp());
    }

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData.dark().copyWith(
            scaffoldBackgroundColor: darkBlue,
          ),
          debugShowCheckedModeBanner: false,
          home: Scaffold(
            appBar: AppBar(),
            drawer: const Drawer(child: MyDrawer()),
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }

    enum MenuItem {
      font("Change Font",
          ['Commic Sans', 'Product Sans', 'Monserrat', 'ubuntu', 'unbounded']),
      theme("Change Theme", ['dark', 'light']),
      metrics("Change Metrics", ['small', 'medium', 'large']);

      final String label;
      final List<String> items;

      const MenuItem(this.label, this.items);
    }

    class MyDrawer extends StatefulWidget {
      const MyDrawer({super.key});

      @override
      State<MyDrawer> createState() => _MyDrawerState();
    }

    class _MyDrawerState extends State<MyDrawer> {
      MenuItem? selectedMenu;
      @override
      Widget build(BuildContext context) {
        return SafeArea(
            child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 20),
                child:
                    Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
                  const SizedBox(height: 20),
                  Text(
                    'Settings',
                    style: Theme.of(context).textTheme.headlineMedium,
                  ),
                  const SizedBox(height: 60),
                  Container(height: 1.0, color: Colors.grey),
                  const SizedBox(height: 60),
                  // if a menu item is selected, display its sub items
                  if (selectedMenu != null)
                  Column(
                    crossAxisAlignment: CrossAxisAlignment.start, 
                  children: [
                    BackButton(onPressed: (){
                        setState(() {
                              selectedMenu = null;
                            });
                    },),
                    
                      for (var item in selectedMenu!.items)
                      InkWell(
                          onTap: () {
                            print(item);
                          },
                          child: Padding(
                              padding: const EdgeInsets.all(10),
                              child: Text(
                                item,
                                style: Theme.of(context).textTheme.bodySmall,
                              )))
                  ])
                  else
                    for (var item in MenuItem.values)
                      InkWell(
                          onTap: () {
                            setState(() {
                              selectedMenu = item;
                            });
                          },
                          child: Padding(
                              padding: const EdgeInsets.all(10),
                              child: Text(
                                item.label,
                                style: Theme.of(context).textTheme.bodySmall,
                              )))
                ])));
      }
    }

    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Text(
          'Hello, World!',
          style: Theme.of(context).textTheme.headlineSmall,
        );
      }
    }

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多