Flutter macOS UI适配插件reactive_macos_ui的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter macOS UI适配插件 reactive_macos_ui 的使用

reactive_macos_ui 是一个用于与 reactive_forms 集成的插件,它封装了 macos_ui 库,以便在 Flutter 应用程序中创建符合 macOS 风格的用户界面。本文将介绍如何使用该插件,并提供一个完整的示例 Demo。

1. 安装依赖

首先,在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  reactive_forms: ^12.0.0 # 请根据最新版本进行调整
  reactive_macos_ui: ^1.0.0 # 请根据最新版本进行调整
  macos_ui: ^0.5.0 # 请根据最新版本进行调整

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

2. 创建主应用

接下来,我们将创建一个简单的应用程序,展示如何使用 reactive_macos_ui 插件来构建 macOS 风格的表单。

示例代码

import 'package:flutter/material.dart';
import 'package:reactive_forms/reactive_forms.dart';
import 'package:reactive_macos_ui/reactive_macos_ui.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  FormGroup buildForm() => fb.group({
        'ratingIndicator': FormControl<double>(
          value: 0,
          validators: [Validators.min(1)],
        ),
        'capacityIndicator': FormControl<double>(
          value: 0,
          validators: [Validators.min(50)],
        ),
        'textField': FormControl<String>(
          value: null,
          validators: [Validators.required],
        ),
        'checkbox': FormControl<bool>(
          value: null,
          // disabled: true,
        ),
        'radio': FormControl<bool>(
          value: null,
        ),
        'switch': FormControl<bool>(
          value: true,
        ),
        'popupButton': FormControl<String>(
          value: 'One',
        ),
      });

  @override
  Widget build(BuildContext context) {
    return MacosApp(
      title: 'macos_ui example',
      theme: MacosThemeData.light().copyWith(
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      darkTheme: MacosThemeData.dark().copyWith(
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: SafeArea(
          child: SingleChildScrollView(
            physics: const BouncingScrollPhysics(),
            padding: const EdgeInsets.symmetric(
              horizontal: 20.0,
              vertical: 20.0,
            ),
            child: ReactiveFormBuilder(
              form: buildForm,
              builder: (context, form, child) {
                return Column(
                  children: [
                    ReactiveRatingIndicator<double>(
                      formControlName: 'ratingIndicator',
                      validationMessages: {
                        'min': (_) => 'Please select more than 1',
                      },
                    ),
                    const SizedBox(height: 16),
                    ReactiveCapacityIndicator<double>(
                      formControlName: 'capacityIndicator',
                      validationMessages: {
                        'min': (_) => 'Please select',
                      },
                    ),
                    const SizedBox(height: 16),
                    ReactiveCapacityIndicator<double>(
                      formControlName: 'capacityIndicator',
                      discrete: true,
                      validationMessages: {
                        'min': (_) => 'Please select more than half',
                      },
                    ),
                    const SizedBox(height: 16),
                    ReactiveMacosTextField<String>(
                      formControlName: 'textField',
                    ),
                    const SizedBox(height: 16),
                    ReactiveMacosCheckbox<bool>(
                      formControlName: 'checkbox',
                    ),
                    const SizedBox(height: 16),
                    ReactiveMacosRadioButton<bool, bool>(
                      formControlName: 'radio',
                      value: true,
                    ),
                    ReactiveMacosRadioButton<bool, bool>(
                      formControlName: 'radio',
                      value: false,
                    ),
                    const SizedBox(height: 16),
                    ReactiveMacosSwitch<bool>(
                      formControlName: 'switch',
                    ),
                    const SizedBox(height: 16),
                    ReactiveMacosPopupButton<String, String>(
                      formControlName: 'popupButton',
                      items: <String>['One', 'Two', 'Three', 'Four']
                          .map<MacosPopupMenuItem<String>>((String value) {
                        return MacosPopupMenuItem<String>(
                          value: value,
                          child: Text(value),
                        );
                      }).toList(),
                    ),
                    const SizedBox(height: 16),
                    ElevatedButton(
                      child: const Text('Sign Up'),
                      onPressed: () {
                        if (form.valid) {
                          // ignore: avoid_print
                          print(form.value);
                        } else {
                          form.markAllAsTouched();
                        }
                      },
                    ),
                  ],
                );
              },
            ),
          ),
        ),
      ),
    );
  }
}

3. 关键组件说明

  • ReactiveRatingIndicator: 用于显示评分指示器。
  • ReactiveCapacityIndicator: 用于显示容量指示器。
  • ReactiveMacosTextField: macOS 样式的文本输入框。
  • ReactiveMacosCheckbox: macOS 样式的复选框。
  • ReactiveMacosRadioButton: macOS 样式的单选按钮。
  • ReactiveMacosSwitch: macOS 样式的开关。
  • ReactiveMacosPopupButton: macOS 样式的下拉菜单。

4. 运行项目

确保你已经安装了 macOS 开发环境,并且在 macOS 目标上运行你的 Flutter 项目:

flutter run -d macos

这样,你就可以在 macOS 上看到一个符合 macOS 风格的表单界面了。

5. 参考资料

通过以上步骤,你应该能够成功地在你的 Flutter macOS 应用程序中集成 reactive_macos_ui 插件,并创建出符合 macOS 设计规范的用户界面。


更多关于Flutter macOS UI适配插件reactive_macos_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter macOS UI适配插件reactive_macos_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用reactive_macos_ui插件来实现macOS UI适配的代码案例。reactive_macos_ui 是一个帮助开发者在Flutter中更轻松地创建和适配macOS UI风格的插件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  reactive_macos_ui: ^最新版本号  # 请替换为实际的最新版本号

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

2. 导入插件

在你的Dart文件中导入reactive_macos_ui

import 'package:reactive_macos_ui/reactive_macos_ui.dart';

3. 使用插件组件

reactive_macos_ui 提供了一些预定义的macOS风格的组件,你可以在你的Flutter应用中直接使用它们。以下是一个简单的示例,展示了如何使用这些组件。

示例代码

import 'package:flutter/material.dart';
import 'package:reactive_macos_ui/reactive_macos_ui.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        // 使用MacOS主题
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MacOSAppBar(
        title: Text('Reactive MacOS UI Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(20.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            MacOSButton(
              title: 'Click Me',
              onPressed: () {
                // 按钮点击事件
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Button clicked!')),
                );
              },
            ),
            SizedBox(height: 20),
            MacOSTextField(
              label: 'Enter text',
              onChanged: (value) {
                // 文本变化回调
                print('Text changed to: $value');
              },
            ),
            SizedBox(height: 20),
            MacOSSegmentedControl(
              segments: ['Option 1', 'Option 2', 'Option 3'],
              selectedSegment: 0,
              onValueChanged: (index) {
                // 选项变化回调
                print('Selected segment: $index');
              },
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

确保你的开发环境已经配置好Flutter和Dart,并且已经连接了一个macOS设备或者模拟器。然后运行flutter run来启动你的应用。

注意事项

  • 确保你使用的reactive_macos_ui版本与你的Flutter SDK版本兼容。
  • reactive_macos_ui 提供的组件可能随着版本更新而有所变化,请参考官方文档获取最新的使用指南和API变化。

通过以上步骤,你应该能够在你的Flutter应用中成功集成并使用reactive_macos_ui插件来实现macOS风格的UI适配。

回到顶部