Flutter通用功能库插件agnext_common_library_flutter的使用
Flutter通用功能库插件agnext_common_library_flutter的使用
特性
agnext_common_library_flutter
是一个用于重用各种小部件和功能的通用库。它包含了许多实用的功能,如自定义AppBar、网络图片加载、文本输入框等。
完整示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中使用agnext_common_library_flutter
库。
import 'dart:io';
import 'dart:isolate';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:image_picker/image_picker.dart';
import 'package:agnext_common_library_flutter/agnext_common_library_flutter.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根。
@override
Widget build(BuildContext context) {
// 这里添加了必要的配置,否则所有尺寸将无法工作,并且此包使用了getx管理包,如有需要可以修改。
return ScreenUtilInit(
designSize: const Size(360, 690),
minTextAdapt: true,
splitScreenMode: true,
builder: (_, child) {
return GetMaterialApp(
theme: new ThemeData(
appBarTheme: AppBarTheme(iconTheme: IconThemeData(color: Colors.black)),
),
smartManagement: SmartManagement.onlyBuilder,
debugShowCheckedModeBanner: false,
locale: const Locale('en', 'US'),
defaultTransition: Transition.rightToLeft,
home: MyHomePage(title: "Home page"),
);
},
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
File? image;
void _pickImage() async {
ImagePicker picker = ImagePicker();
final imageTemp = await picker.pickImage(source: ImageSource.gallery, imageQuality: 100);
if (imageTemp != null) {
// 添加水印到图片
await addWaterToImage(imageTemp);
}
}
Future<void> addWaterToImage(XFile imageToAddWatermark) async {
var pickedImage = File(imageToAddWatermark.path);
var decodedImage = await decodeImageFromList(await pickedImage.readAsBytes());
var height = decodedImage.height; // 图像高度
var width = decodedImage.width;
var _watermarkPlugin = WatermarkUnique();
final imageWithWaterMark = await _watermarkPlugin.addTextWatermark(
filePath: imageToAddWatermark.path, // 图片文件路径
text: 'Location:Mohali,punjab', // 水印文本
x: 100, // X位置
y: height - 400, // Y位置
textSize: 90, // 文本大小
quality: 25,
color: Colors.white, // 文本颜色
imageFormat: ImageFormat.jpeg,
);
setState(() {
image = File(imageWithWaterMark!);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CommonWidgets.customAppBar(
title: "自定义AppBar",
actions: [
CommonWidgets.setPadding(
rightPadding: margin_20,
widget: Icon(Icons.favorite, color: CommonColors.white),
),
],
appBarBGColor: CommonColors.primaryColor,
appBarTitleColor: CommonColors.white,
),
body: CommonWidgets.setPaddingAll(
margin: margin_20,
widget: SingleChildScrollView(
child: Column(
children: [
CommonWidgets.commonText("这是公用的小部件", fontSize: font_16, color: CommonColors.primaryColor),
CommonWidgets.sizedBox(height: height_20),
CommonWidgets.networkImages(
"https://fastly.picsum.photos/id/230/200/300.jpg?hmac=pyhlpgJN2oBeEzhJbnJYrCsLoJM6MKd_NUQGIQhVx5k",
height: height_200,
width: width_170,
),
CommonWidgets.setPaddingAll(
margin: margin_20,
widget: CommonTextField.commonTextField(labelText: "用户名"),
),
CommonWidgets.setPaddingAll(
margin: margin_20,
widget: CustomButton.customButton(
buttonText: "打开底部弹窗",
onClick: () {
CommonBottomSheet.commonBottomSheet(
body: CommonWidgets.setPaddingAll(
margin: margin_20,
widget: Container(
width: CommonWidgets.fullWidth(context),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Align(
alignment: Alignment.topLeft,
child: IconButton(
icon: Icon(Icons.close),
onPressed: () {
Get.back();
},
),
),
CommonWidgets.commonText("这是公用底部弹窗", fontSize: font_16, color: CommonColors.primaryColor),
],
),
),
),
);
},
),
),
image != null ? Image.file(File(image!.path)) : Container(),
CommonWidgets.setPaddingAll(
margin: margin_20,
widget: ElevatedButton(
onPressed: _pickImage,
child: Text("选择图片"),
),
),
],
),
),
),
);
}
}
说明
-
导入必要的包:
import 'package:agnext_common_library_flutter/agnext_common_library_flutter.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart';
-
初始化
ScreenUtil
:return ScreenUtilInit( designSize: const Size(360, 690), minTextAdapt: true, splitScreenMode: true, builder: (_, child) { return GetMaterialApp( // 应用的主题和其他配置... ); }, );
-
创建自定义AppBar:
appBar: CommonWidgets.customAppBar( title: "自定义AppBar", actions: [ CommonWidgets.setPadding( rightPadding: margin_20, widget: Icon(Icons.favorite, color: CommonColors.white), ), ], appBarBGColor: CommonColors.primaryColor, appBarTitleColor: CommonColors.white, ),
-
添加文本:
CommonWidgets.commonText("这是公用的小部件", fontSize: font_16, color: CommonColors.primaryColor),
-
添加网络图片:
CommonWidgets.networkImages( "https://fastly.picsum.photos/id/230/200/300.jpg?hmac=pyhlpgJN2oBeEzhJbnJYrCsLoJM6MKd_NUQGIQhVx5k", height: height_200, width: width_170, ),
-
添加底部弹窗:
CommonBottomSheet.commonBottomSheet( body: CommonWidgets.setPaddingAll( margin: margin_20, widget: Container( width: CommonWidgets.fullWidth(context), child: Column( mainAxisSize: MainAxisSize.min, children: [ Align( alignment: Alignment.topLeft, child: IconButton( icon: Icon(Icons.close), onPressed: () { Get.back(); }, ), ), CommonWidgets.commonText("这是公用底部弹窗", fontSize: font_16, color: CommonColors.primaryColor), ], ), ), ), );
更多关于Flutter通用功能库插件agnext_common_library_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter通用功能库插件agnext_common_library_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用agnext_common_library_flutter
插件的详细步骤,包括相关的代码示例。请注意,具体的方法和类名可能会根据插件的实际版本有所不同,因此请务必参考最新的官方文档。
1. 添加依赖
首先,你需要在你的pubspec.yaml
文件中添加对agnext_common_library_flutter
的依赖。
dependencies:
flutter:
sdk: flutter
agnext_common_library_flutter: ^latest_version # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你需要使用该插件的Dart文件中导入它:
import 'package:agnext_common_library_flutter/agnext_common_library_flutter.dart';
3. 初始化插件(如果需要)
某些插件可能需要在应用启动时进行初始化。查阅插件的官方文档以确认是否需要初始化,以及如何进行初始化。以下是一个假设的初始化示例:
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 假设插件有一个初始化方法
AgnextCommonLibraryFlutter.instance.initialize();
runApp(MyApp());
}
4. 使用插件功能
假设agnext_common_library_flutter
插件提供了一些通用功能,如网络请求、本地存储等,以下是如何使用这些功能的示例代码。
网络请求示例
Future<void> fetchData() async {
try {
// 假设插件有一个网络请求方法
var response = await AgnextCommonLibraryFlutter.instance.makeNetworkRequest(
url: 'https://api.example.com/data',
method: 'GET',
headers: <String, String>{
'Content-Type': 'application/json',
},
);
// 处理响应数据
print('Response data: ${response.data}');
} catch (e) {
// 处理错误
print('Error fetching data: $e');
}
}
本地存储示例
Future<void> saveToLocalStorage(String key, String value) async {
try {
// 假设插件有一个本地存储方法
await AgnextCommonLibraryFlutter.instance.saveToLocalStorage(key: key, value: value);
print('Data saved to local storage.');
} catch (e) {
// 处理错误
print('Error saving data: $e');
}
}
Future<String?> readFromLocalStorage(String key) async {
try {
// 假设插件有一个读取本地存储的方法
var value = await AgnextCommonLibraryFlutter.instance.readFromLocalStorage(key: key);
return value;
} catch (e) {
// 处理错误
print('Error reading data: $e');
return null;
}
}
5. 在UI中使用
你可以将上述功能集成到你的UI组件中,例如按钮点击事件:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Agnext Common Library Flutter Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
await fetchData();
},
child: Text('Fetch Data'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
await saveToLocalStorage('testKey', 'testValue');
var value = await readFromLocalStorage('testKey');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Read value: $value')),
);
},
child: Text('Save and Read Data'),
),
],
),
),
),
);
}
}
总结
以上代码展示了如何在Flutter项目中集成和使用agnext_common_library_flutter
插件。请注意,实际使用时你需要根据插件的API文档调整代码。如果你遇到任何问题,查阅官方文档或插件的GitHub仓库通常会有帮助。