Flutter核心功能扩展插件dart_board_core_plugin的使用

Flutter核心功能扩展插件dart_board_core_plugin的使用

Dart Board Add2App 示例

目前仅支持Android。

此模块为核心插件,更多参考可以查看: https://github.com/ahammer/dart_board_add2app

对于一个示例。

在您的DartBoard应用中添加Flutter

遵循Google的指南: https://flutter.dev/docs/development/add-to-app

  1. 在您的宿主仓库(Android或iOS)中创建一个Flutter模块。

    flutter create -t module flutter_module
    

    您可以通过Git或Pub将其他功能从另一个仓库导入。

    此项目应包含config/registration,但不应包含功能本身。

  2. 配置项目的pubspec.yaml以导入您的功能。

    dependencies:
      flutter:
        sdk: flutter
    
      dart_board_core:
      dart_board_core_plugin:
      dart_board_spacex_ui:
      dart_board_minesweeper:
      dart_board_spacex_plugin:
        git:
          url: https://github.com/ahammer/dart_board.git
          path: features/dart_board_spacex_feature/dart_board_spacex_plugin
    

    导入dart_board_coredart_board_core_plugin和任何您正在使用的功能。

  3. 配置您的main.dart入口点。

    import 'package:dart_board_core_plugin/dart_board_core_plugin.dart';
    import 'package:dart_board_minesweeper/dart_board_minesweeper.dart';
    import 'package:dart_board_spacex_plugin/spacex_plugin_feature.dart';
    import 'package:dart_board_spacex_ui/spacex_ui_feature.dart';
    import 'package:flutter/material.dart';
    import 'package:dart_board_core/dart_board_core.dart';
    
    void main() {
      runApp(DartBoard(
        features: [
          MinesweeperFeature(),
          SpaceXUIFeature(),
          Add2AppFeature(),
          SpaceXPluginFeature()
        ],
        initialPath: '/minesweep',
      ));
    }
    

    对于add2app,初始路径无关紧要,因为您在启动Flutter屏幕时会请求一个路径。

    但是,在这一点上,您可以直接运行该模块进行测试(例如验证路由是否正常工作)。

    Add2AppFeature()在此过程中至关重要。它提供了DartBoard内的导航绑定。

  4. 将Flutter添加到您的主Android项目。

    推荐方法: https://flutter.dev/docs/development/add-to-app/android/project-setup#option-b---depend-on-the-modules-source-code

  5. (可选/推荐)预热引擎

    Flutter引擎是Flutter运行的地方。将其视为您的手机中的另一部手机或您的应用中的另一个应用。有一些启动成本,但您可以通过预热引擎来隐藏它。这还将允许您在不显示Flutter界面的情况下使用无头Flutter(例如Pigeon调用)。

    class MainApplication : Application() {
        override fun onCreate() {
            super.onCreate()
            DartBoardCorePlugin.warmup(this)
        }
    }
    

    祝贺您,现在您已完全集成。以下提示将解释如何实际使用它。

导航

DartBoardCorePlugin.launchScreen(context, path)

这将启动DartBoardFlutterActivity并将Flutter导航到相应的路径。它将为您提供清晰的导航栈。

如果您想退出(例如通过按钮),可以在任何时候使用SystemNavigator.pop()。例如,在入口点使用返回按钮。

系统后退按钮应该在您的Flutter和原生导航栈之间透明地工作。

Pigeons

Pigeon: https://pub.dev/packages/pigeon

Pigeon是一个库,用于在宿主应用和Flutter之间交换请求。您可以将其视为Flutter版的“Retrofit”。

您指定Pigeon作为类/方法,宿主或Flutter可以调用它们以同步/异步返回数据。

对于Pigeon,您可以在AppDecoration/LifecycleWidget中绑定Flutter端。参见dart_board_spacex_plugin示例。

作为插件的功能

如果您使用Pigeon,还需要使用插件类型的项目。这允许您在功能中捆绑Android和iOS代码。

Dart Board透明地与插件功能类型一起工作,并将自动包括Android/iOS绑定以及注册您的插件。

iOS支持

目前我没有Mac设备可用,但添加支持应该很容易。将来可能会购买新MacBook。

  • 生成Objective-C Pigeons
  • 实现Swift/ObjC插件接口以向信使注册Pigeon接口
  • 在原生端实现任何@HostAPI接口
  • 创建一个FlutterViewController以显示Flutter并导航

我们仅支持通过dart_board_core_plugin的一个Pigeon,因此实现应该相对简单。作为参考,原始插件和设计在Android上大约花费了两天时间。


示例代码

import 'package:dart_board_core_plugin/dart_board_core_plugin.dart';
import 'package:dart_board_minesweeper/dart_board_minesweeper.dart';
import 'package:dart_board_spacex_ui/spacex_ui_feature.dart';
import 'package:flutter/material.dart';
import 'package:dart_board_core/dart_board_core.dart';

void main() {
  runApp(DartBoard(
    features: [
      MinesweeperFeature(),
      SpaceXUIFeature(),
      Add2AppFeature(),
    ],
    initialPath: '/minesweep',
  ));
}

更多关于Flutter核心功能扩展插件dart_board_core_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter核心功能扩展插件dart_board_core_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_board_core_plugin 是 Flutter 中的一个核心功能扩展插件,通常用于在 Flutter 应用中提供一些基础的功能扩展,例如路由管理、依赖注入、状态管理等。以下是如何使用 dart_board_core_plugin 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  dart_board_core_plugin: ^latest_version

然后运行 flutter pub get 来获取依赖。

2. 初始化插件

在你的 Flutter 应用的主文件中(通常是 main.dart),你需要初始化 dart_board_core_plugin

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return DartBoardApp(
      plugins: [
        CorePlugin(), // 初始化核心插件
      ],
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dart Board Core Plugin Example'),
      ),
      body: Center(
        child: Text('Hello, World!'),
      ),
    );
  }
}

3. 使用路由管理

dart_board_core_plugin 提供了路由管理的功能,你可以使用它来导航到不同的页面。

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dart Board Core Plugin Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.of(context).pushNamed('/second'); // 导航到第二个页面
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.of(context).pop(); // 返回上一页
          },
          child: Text('Go Back'),
        ),
      ),
    );
  }
}

4. 使用依赖注入

dart_board_core_plugin 也提供了依赖注入的功能,你可以使用它来管理你的服务或数据模型。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return DartBoardApp(
      plugins: [
        CorePlugin(),
      ],
      home: MyHomePage(),
      services: [
        ServiceDescriptor(
          builder: (context) => MyService(),
        ),
      ],
    );
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final myService = context.read<MyService>();
    return Scaffold(
      appBar: AppBar(
        title: Text('Dart Board Core Plugin Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            myService.doSomething();
          },
          child: Text('Do Something'),
        ),
      ),
    );
  }
}

5. 状态管理

dart_board_core_plugin 还支持状态管理,你可以使用它来管理应用的状态。

class CounterModel extends ChangeNotifier {
  int _count = 0;

  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }
}

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return DartBoardApp(
      plugins: [
        CorePlugin(),
      ],
      home: MyHomePage(),
      services: [
        ServiceDescriptor(
          builder: (context) => CounterModel(),
        ),
      ],
    );
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final counter = context.watch<CounterModel>();
    return Scaffold(
      appBar: AppBar(
        title: Text('Dart Board Core Plugin Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Count: ${counter.count}'),
            ElevatedButton(
              onPressed: () {
                counter.increment();
              },
              child: Text('Increment'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部