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
-
在您的宿主仓库(Android或iOS)中创建一个Flutter模块。
flutter create -t module flutter_module
您可以通过Git或Pub将其他功能从另一个仓库导入。
此项目应包含config/registration,但不应包含功能本身。
-
配置项目的
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_core
、dart_board_core_plugin
和任何您正在使用的功能。 -
配置您的
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内的导航绑定。 -
将Flutter添加到您的主Android项目。
-
(可选/推荐)预热引擎
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
更多关于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'),
),
],
),
),
);
}
}