Flutter系统级功能访问插件os_basecode的使用
Flutter系统级功能访问插件os_basecode的使用
基本功能
Failur 类
在仓库实现中使用 Failur
类来返回左侧类型。这包括以下几种类型:
ServerFailure
ConnectionFailure
CommonFailure
DatabaseFailure
示例代码:
Future<Either<Failure, List<PriceInfoEntity>>> fetchAllGroup() async {
try {
var result = await alertRemoteDataSource.fetchAllGroup();
return Right(result.map((e) => e.toEntity()).toList());
} on DatabaseException catch (e) {
return Left(DatabaseFailure(e.message));
} on ServerException {
return const Left(ServerFailure("Your message here"));
} on CommonException {
return const Left(CommonFailure("Your message here"));
} catch (e) {
return const Left(DatabaseFailure("Your message here"));
}
}
异常类
在数据源中使用异常类来抛出异常,并在仓库实现中捕获这些异常。
ServerException
DatabaseException
CommonException
示例代码:
Future<List<PriceInfo>> fetchAllGroup() async {
try {
Dio dio = Dio();
var result = await dio.get(priceInfoURL);
return priceInfoFromJson(result.data);
} on DioError {
throw ServerException();
} catch (e) {
throw DatabaseException();
// common exception
throw CommonException();
}
}
客户端类
客户端类是一个自定义的 DIO
实现,可以用于设置 baseURL
、headers
和 showLogging
等属性。
示例代码:
var client = Client(
baseURL: "your_base_url",
showLogging: true,
headers: {},
handleWhenUnauthorized: () {
// 处理您的 401 异常
}
)..init();
在数据源中使用客户端:
class GroupRemoteDataSourceImpl implements GroupRemoteDataSource {
Dio dio;
GroupRemoteDataSourceImpl(this.client);
Future<List<PriceInfo>> fetchAllGroup() async {
try {
var result = await dio.get(priceInfoURL);
return priceInfoFromJson(result.data);
} on DioError {
throw ServerException();
} catch (e) {
throw DatabaseException();
}
}
}
工具方法
抖动(debounce)
在 BLoC 转换器中使用抖动。
示例代码:
on<OnQueryBanner>((event, emit) async {
// 您的 BLoC 代码
}, transformer: debounce(const Duration(milliseconds: 500)));
数字文本格式化器(NumericTextFormatter)
在 TextFormField
中使用 NumericTextFormatter
。
示例代码:
return TextFormField(
controller: nominalController,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
NumericTextFormatter() // 添加此处
],
keyboardType: TextInputType.number,
);
格式化印尼盾(formatRupiah)
将数字转换为货币字符串。
示例代码:
var nominal = 1000;
var formatted = formatRupiah(nominal);
print(formatted); // Rp. 10.000
获取纯数字(getNumberOnly)
从货币字符串中提取纯数字。
示例代码:
var formatted = "Rp. 10.000";
var number = getNumberOnly(formatted);
print(number); // 10000
安装包列表
bloc: ^9.0.0
dartz: ^0.10.1
dio: ^5.7.0
equatable: ^2.0.5
flutter_animate: ^4.5.2
flutter_bloc: ^9.0.0
flutter_screenutil: ^5.9.3
font_awesome_flutter: ^10.8.0
get_it: ^8.0.3
go_router: ^14.6.2
google_fonts: ^6.2.1
path_provider: ^2.1.5
rxdart: ^0.28.0
shared_preferences: ^2.3.3
supercharged: ^2.1.1
intl: ^0.20.1
dio_cache_interceptor: ^3.5.1
dio_cache_interceptor_hive_store: ^4.0.0
pretty_dio_logger: ^1.4.0
fluttertoast: ^8.2.10
从 1.1.12 迁移到 1.1.13
之前版本:
Future<void> initSharedPref() async {
locator.registerSingletonAsync<SharedPreferences>(
() async => await SharedPreferences.getInstance(),
);
}
void initLocator(){
locator.registerFactory<Client>(() => Client(
baseURL: "http://localhost.com",
showLogging: true,
headers: {},
hitCacheOnErrorExcept: [500],
handleOnError: (err, handler) {},
handleOnRequest: (requestOptions) {},
handleOnResponse: (response) {},
handleWhenUnauthorized: () {
print("401 Error From Dio");
}).init());
}
void main(){
await di.initSharedPref();
await di.locator.allReady();
if (!di.locator.allReadySync()) {
throw Exception("There is not enough time to initialize injector");
}
di.initLocator();
}
现在版本:
Future<void> initSharedPref() async {
locator.registerSingletonAsync<SharedPreferences>(
() async => await SharedPreferences.getInstance(),
);
}
void initLocator(){
locator.registerFactory<Client>(() => Client(
baseURL: "http://localhost.com",
showLogging: true,
headers: {},
accessTokenKey: "access_token", // 添加 accessTokenKey
hitCacheOnErrorExcept: [500],
handleOnError: (err, handler) {},
handleOnRequest: (requestOptions) {},
handleOnResponse: (response) {},
handleWhenUnauthorized: () {
print("401 Error From Dio");
});
locator.registerFactory<Dio>(() => locator<Client>().dioService);
}
void main(){
await di.initSharedPref();
await di.locator.allReady();
if (!di.locator.allReadySync()) {
throw Exception("There is not enough time to initialize injector");
}
di.initLocator();
}
// 不要忘记将访问令牌存储到共享首选项
SharedPreferences pref = await SharedPreferences.getInstance();
pref.setString("access_token", value);
更多关于Flutter系统级功能访问插件os_basecode的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter系统级功能访问插件os_basecode的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter应用中,使用os_basecode
插件可以访问系统级功能。以下是一个简单的代码示例,展示了如何使用该插件进行一些常见的系统级功能访问,比如获取设备信息、电池状态等。
首先,确保你已经在pubspec.yaml
文件中添加了os_basecode
依赖:
dependencies:
flutter:
sdk: flutter
os_basecode: ^最新版本号 # 请替换为实际可用的最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,在你的Dart代码中,你可以这样使用os_basecode
插件:
import 'package:flutter/material.dart';
import 'package:os_basecode/os_basecode.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String deviceInfo = "";
String batteryLevel = "";
@override
void initState() {
super.initState();
_getDeviceInfo();
_getBatteryLevel();
}
Future<void> _getDeviceInfo() async {
try {
final deviceInfo = await OSBasecode.deviceInfo();
setState(() {
this.deviceInfo = deviceInfo.toString();
});
} catch (e) {
print("Error getting device info: $e");
}
}
Future<void> _getBatteryLevel() async {
try {
final batteryStatus = await OSBasecode.batteryStatus();
setState(() {
this.batteryLevel = "${batteryStatus.level}%";
});
} catch (e) {
print("Error getting battery level: $e");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('OS Basecode Plugin Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Device Info:", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
Text(deviceInfo, style: TextStyle(fontSize: 16)),
SizedBox(height: 20),
Text("Battery Level:", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
Text(batteryLevel, style: TextStyle(fontSize: 16)),
],
),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 在
pubspec.yaml
中添加了os_basecode
依赖。 - 在
MyApp
组件的initState
方法中,调用了_getDeviceInfo
和_getBatteryLevel
方法来获取设备信息和电池状态。 OSBasecode.deviceInfo()
方法用于获取设备信息,结果存储在deviceInfo
字符串中。OSBasecode.batteryStatus()
方法用于获取电池状态,结果存储在batteryLevel
字符串中,特别是电池电量百分比。- 在UI中使用
Text
组件展示获取到的设备信息和电池电量。
请注意,os_basecode
插件的具体API可能会根据版本有所不同,请参考该插件的官方文档和示例代码,以确保代码的正确性和兼容性。如果插件提供了更多系统级功能,你可以按照类似的方式调用它们。