RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1482233
Accepted
edikii
edikii
Asked:2022-12-29 18:45:05 +0000 UTC2022-12-29 18:45:05 +0000 UTC 2022-12-29 18:45:05 +0000 UTC

什么是 Skeleton 架构模式,它在 Flutter 中是如何实现的?

  • 772

请解释骨架架构模式是什么以及它是如何在 Dart/Flutter 应用程序中实现的,或者提供指向解释它的文章的链接。如何在其中管理状态?

архитектура
  • 1 1 个回答
  • 70 Views

1 个回答

  • Voted
  1. Best Answer
    hedgehogues
    2023-01-02T01:11:04Z2023-01-02T01:11:04Z

    架构模式骨架(或“骨架”)定义了应用程序的整体结构,但没有定义其功能。它是一个系统,它创建应用程序的整体结构并确定其中将使用哪些组件,但不确定这些组件将如何相互交互。

    在 Flutter 中,可以使用“StatefulWidget”类来实现 Skeleton 架构模式。此类是一个小部件,用于存储其状态并在状态更改时对其进行更新。要管理小部件内的状态,您可以使用“setState”方法,该方法更新状态并重绘小部件。

    例如,Flutter 中骨架架构模式的实现可能如下所示:

    import 'package:flutter/material.dart';
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      int _counter = 0;
    
      void _incrementCounter() {
        setState(() {
          _counter++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('My App'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text('You have pushed the button this many times:'),
                Text('$_counter', style: Theme.of(context).textTheme.headline4),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        );
      }
    }
    

    在这个例子中,我们正在创建一个“MyApp”小部件,它是骨架架构模式的一个实现。它包含一个状态(变量“_counter”)和一个方法“_incrementCounter”,该方法将此变量递增 1 并调用“setState”来更新状态并重绘小部件。

    “MyApp”小部件将显示“_counter”变量的当前值和一个在单击时递增该值的按钮。因此,我们在 Flutter 中实现了 Skeleton 架构模式,并使用“


    在 Flutter 中,状态可以在不同的抽象层次上进行管理。例如,可以使用“StatefulWidget”类和“setState”方法来管理小部件的状态,正如我们在骨架架构模式的实现示例中看到的那样。

    还有更高级别的抽象——“提供者”库——它允许您在更高级别管理状态并将状态与应用程序中的小部件相关联。有了它,您可以创建状态“提供者”来存储数据并通知消费者数据的更改。这允许您在更高级别管理状态并将其与应用程序中的小部件相关联,而无需继承自“StatefulWidget”。

    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    
    class Counter with ChangeNotifier {
      int _count = 0;
    
      int get count => _count;
    
      void increment() {
        _count++;
        notifyListeners();
      }
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ChangeNotifierProvider(
          create: (context) => Counter(),
          child: Scaffold(
            appBar: AppBar(
              title: Text('My App'),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text('You have pushed the button this many times:'),
                  Consumer<Counter>(
                    builder: (context, counter, child) {
                      return Text(
                        '${counter.count}',
                        style: Theme.of(context).textTheme.headline4,
                      );
                    },
                  ),
                ],
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: () {
                context.read<Counter>().increment();
              },
              tooltip: 'Increment',
              child: Icon(Icons.add),
            ),
          ),
        );
      }
    }
    

    在此示例中,我们创建了一个“Counter”类,它实现了“ChangeNotifier”接口并存储状态——“_count”变量。它还包含一个“增量”方法,该方法将此变量递增 1 并调用“notifyListeners”以通知状态变化。

    然后,我们将“MyApp”小部件包装在“ChangeNotifierProvider”中以实例化“计数器”并使其可供树中的其他小部件使用。


    以下是一些链接,您可以在其中找到有关 Flutter 中状态管理的更多信息:

    • Flutter 官方文档:https ://flutter.dev/docs/development/data-and-backend/state-mgmt/intro
    • “提供者”库:https ://pub.dev/packages/provider
    • 关于 Flutter 中状态管理的博文:https ://www.didierboelens.com/2019/10/managing-state-in-flutter-using-the-provider-package/

    以下是一些链接,您可以在其中找到有关 Dart/Flutter 中骨架架构模式的更多信息:

    • Flutter官方文档:https ://flutter.dev/docs/development/ui/widgets/stateful-widget
    • 关于 Flutter 架构模式的博文:https ://www.didierboelens.com/2019/05/architecture-patterns-with-flutter-bloc-scopedmodel-redux-and-rx/
    • 关于在 Flutter 中实现 Skeleton 架构模式的博文:https ://medium.com/flutter-community/flutter-architecture-patterns-skeleton-screens-f5c20d5edcaf
    • Flutter中Skeleton架构模式的实现视频:https ://www.youtube.com/watch?v=7F_8G4fZQO4
    • 1

相关问题

  • C ++中的内存段“只读”

  • 用户和帐户是独立的实体吗?

  • 进入和退出处理器的信息是什么?

  • 将 API 模块放在单体应用程序中的区别

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5