Flutter基础架构插件bedrock的使用
Flutter基础架构插件bedrock的使用
bedrock
是一个简化 Flutter 应用构建过程的插件。通过它,你可以更轻松地处理屏幕常亮等功能,并且可以简化 UI 更新。
功能
BedrockWidgetBuilder
(基于Get
)
使用方法
屏幕常亮功能
要设置屏幕不睡眠,可以使用以下代码:
await Bedrock.instance.wakelock.enable();
使用 BedrockWidgetBuilder
简化 UI 更新
创建控制器
class Controller extends BedrockController {
static Controller get instance => Get.find();
int _count = 0;
int get count => _count;
void increase() {
_count++;
update(); // 触发更新
}
}
创建一个 widget
class Counter extends BedrockWidget<Controller> {
const Counter({super.key, required super.controller});
[@override](/user/override)
Widget build(BuildContext context) {
return Text('${controller.count}');
}
}
创建一个 builder
class CounterBuilder extends BedrockWidgetBuilder<Controller, Counter> {
const CounterBuilder({super.key, super.group, required super.child});
}
在需要的地方插入控制器并添加 builder
Get.lazyPut<Controller>(() => Controller());
CounterBuilder(
child: (Controller controller) => Counter(controller: controller),
)
在任何地方操作控制器
final Controller controller => Get.find();
controller.increase();
完整示例
以下是完整的示例代码,展示了如何使用 bedrock
插件来管理屏幕常亮状态和更新 UI。
import 'dart:async';
import 'package:bedrock/bedrock.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final Native _native = Get.put(Native());
[@override](/user/override)
void initState() {
super.initState();
_native.updateWakelockStatus();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Bedrock Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
NativeWidgetBuilder(
child: (Native controller) =>
WakelockStatus(controller: controller)),
NativeWidgetBuilder(
child: (Native controller) =>
ChangeWakelockButton(controller: controller)),
],
),
),
),
);
}
}
class Native extends BedrockController {
bool? _wakelockStatus;
bool? get wakelockStatus => _wakelockStatus;
Future<bool?> updateWakelockStatus() async {
try {
_wakelockStatus = await Bedrock.instance.wakelock.status();
update();
} on PlatformException catch (_) {
// do nothing
}
}
Future<void> changeWakelock(bool enable) async {
try {
await Bedrock.instance.wakelock.enable(enable);
_wakelockStatus = enable;
update();
} on PlatformException catch (_) {
// do nothing
}
}
}
abstract class NativeWidget extends BedrockWidget<Native> {
const NativeWidget({super.key, required super.controller});
}
class WakelockStatus extends NativeWidget {
const WakelockStatus({super.key, required super.controller});
[@override](/user/override)
Widget build(BuildContext context) {
return Text('Wakelock status is: ${controller.wakelockStatus}\n');
}
}
class ChangeWakelockButton extends NativeWidget {
const ChangeWakelockButton({super.key, required super.controller});
[@override](/user/override)
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () =>
controller.changeWakelock(!(controller.wakelockStatus ?? false)),
child: Text(controller.wakelockStatus ?? false ? '禁用' : '启用'),
);
}
}
class NativeWidgetBuilder extends BedrockWidgetBuilder<Native, NativeWidget> {
const NativeWidgetBuilder({super.key, super.group, required super.child});
}
更多关于Flutter基础架构插件bedrock的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter基础架构插件bedrock的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
bedrock
是 Flutter 中的一个基础架构插件,旨在帮助开发者构建更加模块化、可维护和可扩展的 Flutter 应用。它通常用于提供一些常见的应用架构模式,如状态管理、依赖注入、路由管理等,以简化开发流程并提高代码质量。
主要功能
bedrock
插件通常包括以下功能:
- 状态管理:提供基于
Provider
或Riverpod
的状态管理解决方案,帮助开发者更好地管理应用的状态。 - 依赖注入:通过依赖注入机制,简化对象之间的依赖关系管理,提高代码的可测试性和可维护性。
- 路由管理:提供便捷的路由管理功能,支持页面跳转、参数传递等常见路由操作。
- 网络请求:封装了常见的网络请求库(如
Dio
或http
),提供统一的网络请求接口。 - 数据持久化:提供本地数据存储方案,如
SharedPreferences
或Hive
,方便开发者进行数据持久化操作。 - 工具类:提供一些常用的工具类,如日志记录、设备信息获取等,帮助开发者快速实现常见功能。
基本使用
安装
首先,在 pubspec.yaml
中添加 bedrock
插件的依赖:
dependencies:
flutter:
sdk: flutter
bedrock: ^1.0.0 # 请根据实际情况使用最新版本
然后运行 flutter pub get
来安装依赖。
使用示例
1. 状态管理
假设我们使用 Provider
进行状态管理:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class CounterModel extends ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => CounterModel(),
child: MaterialApp(
home: HomeScreen(),
),
);
}
}
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
var counter = Provider.of<CounterModel>(context);
return Scaffold(
appBar: AppBar(title: Text('Counter App')),
body: Center(
child: Text('Count: ${counter.count}'),
),
floatingActionButton: FloatingActionButton(
onPressed: () => counter.increment(),
child: Icon(Icons.add),
),
);
}
}
void main() => runApp(MyApp());
2. 依赖注入
bedrock
可能提供了依赖注入的机制,类似:
import 'package:bedrock/bedrock.dart';
class ApiService {
void fetchData() {
print('Fetching data...');
}
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Injector(
providers: [
Provider<ApiService>.value(ApiService()),
],
child: MaterialApp(
home: HomeScreen(),
),
);
}
}
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
var apiService = Injector.of<ApiService>(context);
return Scaffold(
appBar: AppBar(title: Text('Dependency Injection')),
body: Center(
child: ElevatedButton(
onPressed: () => apiService.fetchData(),
child: Text('Fetch Data'),
),
),
);
}
}
void main() => runApp(MyApp());
3. 路由管理
bedrock
可能提供了便捷的路由管理功能:
import 'package:flutter/material.dart';
import 'package:bedrock/bedrock.dart';
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
onGenerateRoute: Router.generateRoute,
initialRoute: '/',
);
}
}
class Router {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (_) => HomeScreen());
case '/details':
return MaterialPageRoute(builder: (_) => DetailsScreen());
default:
return MaterialPageRoute(builder: (_) => NotFoundScreen());
}
}
}
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Home')),
body: Center(
child: ElevatedButton(
onPressed: () => Navigator.pushNamed(context, '/details'),
child: Text('Go to Details'),
),
),
);
}
}
class DetailsScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Details')),
body: Center(
child: Text('This is the details screen'),
),
);
}
}
class NotFoundScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Not Found')),
body: Center(
child: Text('Page not found'),
),
);
}
}
void main() => runApp(MyApp());