Flutter架构设计插件codestage_architecture的使用

Flutter架构设计插件codestage_architecture的使用

Features

该包包含了Codestage的Flutter应用架构结构。它包含各种类、功能性工具和实用程序,以帮助组织和结构化您的项目。此包包含以下内容:

  • 一些结构类(包含主颜色方案和尺寸映射)
  • 一些视图应该扩展的类类型(组件类型、列表和增强型枚举类型)
  • 多个枚举,用于表单验证错误检查、字符串操作工具、安全存储实现、系统本地化等。

这些将在下面的描述中详细介绍。


如何使用该包

结构化方法

通常情况下,项目应按功能模块进行组织,例如引导页面、授权流程、用户仪表板、设置、功能模块等。对于每个功能模块,您应该有一个服务类和服务列表类,它们分别继承自CdsServiceCdsListing类型。继续解释时,一个Flutter页面/组件/有状态小部件应该扩展CdsComponent类,如示例所示。

class WidgetClassInterfaceComponent extends CdsComponent<Service, Listing> {
  void someFunction() {
    // 调用列表中的方法
    super.listings?.listing1();
    // 调用服务中的方法
    super.service?.api();
  }
}

// 服务类
class Service extends CdsService {
  Service() : super(baseUrl: 'https://alpha-vantage.p.rapidapi.com');

  Future<http.Response> api() {
    // 配置请求参数
    super.configureServiceForRequest([], 'query');
    // 执行CRUD操作
    return super.request(CrudOperationType.getAll);
  }
}

// 列表类
class Listing extends CdsListing {
  Widget listing1() {
    return const Text('Hello');
  }

  Widget listing2() {
    return const Text('Hello');
  }

  Widget listing3() {
    return const Text('Hello');
  }
}

CdsComponent需要两个参数:

  • 一个服务类,该类必须扩展CdsService
  • 一个列表类,该类必须扩展CdsListing类型。

通过这种方式,您可以直接调用服务的方法,例如:

super.service?.functionToCall()

或者调用列表的方法,例如:

super.listings?.listing1()

包含的实用工具

1. 应用的颜色方案

应用程序的颜色方案应该是一个可以在任何地方访问的类,并通过静态调用方式实现。CdsAppColorScheme实现了三个变量:

  • mainColor:应用程序的主要颜色
  • secondaryColor:应用程序的次要颜色
  • otherColors:一个包含颜色名称及其对应值的映射表

为了实现这一点,可以扩展该类并创建一个静态引用控制器。然后可以通过示例访问它们:

class AppColors extends CdsAppColorScheme {
  AppColors({required super.mainColor, required super.secondaryColor, required super.otherColors});

  // 创建静态实例
  static AppColors scheme = AppColors(
      mainColor: const Color.fromARGB(255, 255, 162, 0), // 主色
      secondaryColor: const Color.fromARGB(255, 0, 0, 0), // 次色
      otherColors: {
        'grey': const Color.fromARGB(255, 255, 0, 0), // 灰色
        'blue': const Color.fromARGB(255, 0, 75, 255) // 蓝色
      });
}

void someFunction() {
  // 访问灰色
  Color textColor = AppColors.scheme.otherColors['grey']!;
  // 访问主要颜色
  Color mainTextColor = AppColors.scheme.mainColor;
}

2. 应用的尺寸和其他相关内容

CdsDimensions类包含一个简单的键值对映射表,其中键是字符串(表示属性名称),值是动态类型,可以放置任何内容。

示例如下:

class Dimensions extends CdsDimensions {
  Dimensions({required super.dimensionsMap});

  // 创建静态实例
  static Dimensions dimensions = Dimensions(dimensionsMap: {'size': '40', 'number': 40});
}

void someFunction() {
  double height = Dimensions.dimensions.dimensionsMap['size']!;
}

3. 错误检查器

当使用表单验证某些内容时,需要一个通用的错误检查类。因此,我们创建了一个名为FieldValidationOutput的类,该类包含一条错误消息以及布尔变量用于其他布尔检查。以下是其使用的示例:

class ErrorChecker {
  // 验证名称字段
  static ErrorValidationError validateName(String name) {
    if (name.trim().isEmpty) {
      return ErrorValidationError(message: 'Please complete this field', isValid: false);
    }
    return ErrorValidationError(message: null, isValid: true);
  }
}

// 错误验证结果类
class ErrorValidationError extends FieldValidationOutput {
  ErrorValidationError({required super.message, required super.isValid});
}

4. 安全数据存储

令牌和其他敏感信息可以通过CdsKeyChainStorageInterface存储,这是由Flutter开发团队创建的SecureStorage接口的接口。

此类通过为其主要方法添加功能调用来丰富第一个类。因此,您可以在其中找到readwritedeletedeleteAll函数。

在您的项目中,您可以设置一个扩展了CdsKeychainStorageInterfaceSecureStorage类,并创建一个简单的静态构造函数,如示例所示。然后,您可以在任何地方通过SecureStorage.storage.FUNCTION_TO_CALL与存储交互。

class SecureStorage extends CdsKeychainStorageInterface {
  SecureStorage();

  // 创建静态实例
  static SecureStorage storage = SecureStorage();
}

更多关于Flutter架构设计插件codestage_architecture的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter架构设计插件codestage_architecture的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


codestage_architecture 是一个用于 Flutter 的架构设计插件,旨在帮助开发者更轻松地实现清晰、可维护的应用程序架构。它通常基于一些常见的架构模式,如 MVVM、Clean Architecture 等,并提供了一些工具和模板来简化开发过程。

安装 codestage_architecture

首先,你需要在 pubspec.yaml 文件中添加 codestage_architecture 依赖:

dependencies:
  flutter:
    sdk: flutter
  codestage_architecture: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

使用 codestage_architecture

codestage_architecture 提供了一些工具和模板来帮助你快速搭建应用程序的架构。以下是一些常见的使用场景:

1. 创建 MVVM 架构

codestage_architecture 提供了 MVVM 架构的模板,你可以使用它来快速创建 View、ViewModel 和 Model。

import 'package:codestage_architecture/codestage_architecture.dart';

class MyViewModel extends ViewModel {
  // ViewModel 逻辑
}

class MyView extends View<MyViewModel> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My View'),
      ),
      body: Center(
        child: Text('Hello, World!'),
      ),
    );
  }
}

2. 使用依赖注入

codestage_architecture 支持依赖注入,你可以使用它来管理应用程序中的依赖关系。

import 'package:codestage_architecture/codestage_architecture.dart';

class MyService {
  void doSomething() {
    print('Doing something...');
  }
}

class MyViewModel extends ViewModel {
  final MyService myService;

  MyViewModel(this.myService);

  void performAction() {
    myService.doSomething();
  }
}

void main() {
  final service = MyService();
  final viewModel = MyViewModel(service);

  runApp(MyApp(viewModel: viewModel));
}

3. 状态管理

codestage_architecture 提供了状态管理工具,帮助你管理应用程序的状态。

import 'package:codestage_architecture/codestage_architecture.dart';

class MyState extends State {
  int counter = 0;
}

class MyViewModel extends ViewModel<MyState> {
  void incrementCounter() {
    state.counter++;
    notifyListeners();
  }
}

class MyView extends View<MyViewModel> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Counter App'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Counter: ${viewModel.state.counter}'),
            ElevatedButton(
              onPressed: viewModel.incrementCounter,
              child: Text('Increment'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 路由管理

codestage_architecture 还提供了路由管理工具,帮助你管理应用程序的导航。

import 'package:codestage_architecture/codestage_architecture.dart';

class MyApp extends StatelessWidget {
  final MyViewModel viewModel;

  MyApp({required this.viewModel});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyView(viewModel: viewModel),
      onGenerateRoute: (settings) {
        // 处理路由逻辑
      },
    );
  }
}
回到顶部