Flutter Laravel SDK集成插件sharara_laravel_sdk的使用
Flutter Laravel SDK集成插件sharara_laravel_sdk的使用
Api Package for flutter apps to handle general laravel requests and responses
在本教程中,我们将展示如何在Flutter应用程序中集成sharara_laravel_sdk插件,并通过一个完整的示例演示其使用方法。sharara_laravel_sdk 是一个强大的插件,可以帮助开发者轻松处理与Laravel后端的API请求和响应。
使用步骤
1. 添加依赖
首先,在您的pubspec.yaml文件中添加sharara_laravel_sdk依赖:
dependencies:
sharara_laravel_sdk: ^版本号
然后运行以下命令安装依赖:
flutter pub get
2. 初始化SDK
在应用程序启动时,调用LaravelSDKInitializer初始化SDK。以下是初始化代码示例:
import 'package:sharara_laravel_sdk/sharara_laravel_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Hive数据库(如果使用)
await Hive.initFlutter();
// 初始化SDK
await LaravelSDKInitializer.initialize(
configurations: () => LaravelConfigurations(
logoPath: "",
appName: "MyApp",
appLogo: () => RoyalShadowContainer(
backgroundColor: RoyalColors.mainAppColor,
child: const Text("LOGO", style: TextStyle(color: RoyalColors.white)),
),
mainApiUrl: "http://your-laravel-api-url.com/api",
),
);
// 设置默认HTTP头
ShararaHttp.defaultHeaders = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer your_api_token",
};
runApp(
LaravelAppBuilder(
builder: (_) => const FirstScreen(),
),
);
}
3. 创建数据模型
创建一个继承自GeneralLaravelModel的数据模型类。例如,定义一个CategoryModel类来表示分类数据:
class CategoryModel extends GeneralLaravelModel {
String? name;
CategoryModel.fromJson(super.parsed) : super.fromJson();
[@override](/user/override)
void buildModelProperties() {
name = get("name"); // 从JSON解析出字段
}
}
4. 分页数据获取
使用LaravelPaginationProvider获取分页数据。例如,从后端获取分类列表并展示在UI中:
class CategoryPaginationProvider extends LaravelPaginationProvider<CategoryModel> {
CategoryPaginationProvider()
: super(
builder: CategoryModel.fromJson,
url: "categories", // API路由
mixFiltersResults: true,
filters: [
LaravelFilter(
name: "按时间排序(升序)",
query: LaravelQueryBuilder.create.orderBy("created_at", value: "ASC"),
),
LaravelFilter(
name: "按时间排序(降序)",
query: LaravelQueryBuilder.create.orderBy("created_at", value: "DESC"),
),
],
searchByFilters: [
LaravelSearchFilter(
column: "name",
filter: LaravelFilter(name: "按名称搜索", query: LaravelQueryBuilder.create),
),
LaravelSearchFilter(
column: "status",
filter: LaravelFilter(name: "按状态搜索", query: LaravelQueryBuilder.create),
),
],
);
}
5. 构建UI
使用LaravelIterableBuilder构建分页列表,并结合RoyalShadowContainer美化UI:
class FirstScreen extends StatefulWidget {
const FirstScreen({super.key});
[@override](/user/override)
State<FirstScreen> createState() => _FirstScreenState();
}
class _FirstScreenState extends State<FirstScreen> {
final CategoryPaginationProvider provider = CategoryPaginationProvider();
[@override](/user/override)
void initState() {
provider.init(); // 初始化分页数据
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: ElevatedButton(
onPressed: () => FunctionHelpers.jumpTo(context, const ShararaThemePicker()),
child: const Text("设置"),
),
actions: [
ElevatedButton(
onPressed: () => LaravelFiltersUiBuilder.showFilter(context, provider),
child: const Text("筛选"),
),
ElevatedButton(
onPressed: () => FunctionHelpers.jumpTo(
context,
RequiredAuthScreen<AuthUser>(
userBuilder: (context, user) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Center(child: Text(user.name ?? "")),
const SizedBox(height: 16),
RoyalRoundedButton(
title: "登出",
onPressed: () => AuthProvider.instance.logout(),
),
],
);
},
),
),
child: const Text("注册"),
),
],
),
body: LaravelIterableBuilder(
provider: provider,
showLoadMoreOnTheEndOfItemBuilder: true,
builder: (context, CategoryModel model, _) {
return RoyalShadowContainer(
key: UniqueKey(),
margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 8),
child: Text(model.name ?? ""),
);
},
),
);
}
}
完整示例代码
以下是完整的示例代码:
import 'package:example/api.dart';
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:sharara_laravel_sdk/sharara_laravel_sdk.dart';
import 'package:sharara_laravel_sdk/http.dart';
import 'package:sharara_laravel_sdk/ui.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
await LaravelSDKInitializer.initialize(
configurations: () => LaravelConfigurations(
logoPath: "",
appName: "test",
appLogo: () => RoyalShadowContainer(
backgroundColor: RoyalColors.mainAppColor,
child: const Text("LOGO", style: TextStyle(color: RoyalColors.white)),
),
mainApiUrl: "http://192.168.0.190/dev/general/public",
),
);
ShararaHttp.defaultHeaders = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer your_api_token",
};
runApp(
LaravelAppBuilder(
builder: (_) => const FirstScreen(),
),
);
}
class FirstScreen extends StatefulWidget {
const FirstScreen({super.key});
[@override](/user/override)
State<FirstScreen> createState() => _FirstScreenState();
}
class _FirstScreenState extends State<FirstScreen> {
final CategoryPaginationProvider provider = CategoryPaginationProvider();
[@override](/user/override)
void initState() {
provider.init();
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: ElevatedButton(
onPressed: () => FunctionHelpers.jumpTo(context, const ShararaThemePicker()),
child: const Text("设置"),
),
actions: [
ElevatedButton(
onPressed: () => LaravelFiltersUiBuilder.showFilter(context, provider),
child: const Text("筛选"),
),
ElevatedButton(
onPressed: () => FunctionHelpers.jumpTo(
context,
RequiredAuthScreen<AuthUser>(
userBuilder: (context, user) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Center(child: Text(user.name ?? "")),
const SizedBox(height: 16),
RoyalRoundedButton(
title: "登出",
onPressed: () => AuthProvider.instance.logout(),
),
],
);
},
),
),
child: const Text("注册"),
),
],
),
body: LaravelIterableBuilder(
provider: provider,
showLoadMoreOnTheEndOfItemBuilder: true,
builder: (context, CategoryModel model, _) {
return RoyalShadowContainer(
key: UniqueKey(),
margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 8),
child: Text(model.name ?? ""),
);
},
),
);
}
}
class CategoryModel extends GeneralLaravelModel {
String? name;
CategoryModel.fromJson(super.parsed) : super.fromJson();
[@override](/user/override)
void buildModelProperties() {
name = get("name");
}
}
class CategoryPaginationProvider extends LaravelPaginationProvider<CategoryModel> {
CategoryPaginationProvider()
: super(
builder: CategoryModel.fromJson,
url: "categories",
mixFiltersResults: true,
filters: [
LaravelFilter(
name: "按时间排序(升序)",
query: LaravelQueryBuilder.create.orderBy("created_at", value: "ASC"),
),
LaravelFilter(
name: "按时间排序(降序)",
query: LaravelQueryBuilder.create.orderBy("created_at", value: "DESC"),
),
],
searchByFilters: [
LaravelSearchFilter(
column: "name",
filter: LaravelFilter(name: "按名称搜索", query: LaravelQueryBuilder.create),
),
LaravelSearchFilter(
column: "status",
filter: LaravelFilter(name: "按状态搜索", query: LaravelQueryBuilder.create),
),
],
);
}
更多关于Flutter Laravel SDK集成插件sharara_laravel_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Laravel SDK集成插件sharara_laravel_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sharara_laravel_sdk 是一个用于在 Flutter 应用中与 Laravel 后端进行集成的 SDK 插件。它提供了一些便捷的方法来处理身份验证、API 请求等常见的后端交互任务。
以下是如何在 Flutter 项目中集成和使用 sharara_laravel_sdk 插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 sharara_laravel_sdk 插件的依赖。
dependencies:
flutter:
sdk: flutter
sharara_laravel_sdk: ^1.0.0 # 使用最新的版本号
然后运行 flutter pub get 来安装依赖。
2. 初始化 SDK
在你的 Flutter 应用中,你需要在应用启动时初始化 sharara_laravel_sdk。
import 'package:sharara_laravel_sdk/sharara_laravel_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 SDK
ShararaLaravelSdk.initialize(
baseUrl: 'https://your-laravel-backend.com', // 你的 Laravel 后端地址
);
runApp(MyApp());
}
3. 进行身份验证
sharara_laravel_sdk 提供了简单的方法来处理用户登录和注册。
用户登录
try {
final response = await ShararaLaravelSdk.instance.auth.login(
email: 'user@example.com',
password: 'password',
);
print('Login successful: ${response.user.name}');
} catch (e) {
print('Login failed: $e');
}
用户注册
try {
final response = await ShararaLaravelSdk.instance.auth.register(
name: 'John Doe',
email: 'john@example.com',
password: 'password',
);
print('Registration successful: ${response.user.name}');
} catch (e) {
print('Registration failed: $e');
}
4. 发送 API 请求
sharara_laravel_sdk 还提供了一个 HttpClient 类来发送自定义的 API 请求。
try {
final response = await ShararaLaravelSdk.instance.httpClient.get('/api/posts');
print('Posts: ${response.data}');
} catch (e) {
print('Failed to fetch posts: $e');
}
5. 处理错误
sharara_laravel_sdk 会自动处理常见的错误,例如网络错误、身份验证错误等。你可以通过 try-catch 块来捕获这些错误并进行处理。
try {
final response = await ShararaLaravelSdk.instance.auth.login(
email: 'user@example.com',
password: 'wrongpassword',
);
} on ApiException catch (e) {
print('API error: ${e.message}');
} on NetworkException catch (e) {
print('Network error: ${e.message}');
} catch (e) {
print('Unknown error: $e');
}
6. 注销用户
你可以使用 logout 方法来注销当前用户。
await ShararaLaravelSdk.instance.auth.logout();
7. 获取当前用户
你可以通过 currentUser 属性来获取当前登录的用户。
final user = ShararaLaravelSdk.instance.auth.currentUser;
if (user != null) {
print('Logged in as: ${user.name}');
} else {
print('No user is logged in.');
}
8. 刷新 Token
如果你的应用使用 JWT 进行身份验证,你可以使用 refreshToken 方法来刷新过期的 Token。
try {
await ShararaLaravelSdk.instance.auth.refreshToken();
} catch (e) {
print('Failed to refresh token: $e');
}
9. 使用 Interceptors
sharara_laravel_sdk 允许你添加自定义的拦截器来处理请求和响应。
ShararaLaravelSdk.instance.httpClient.addInterceptor((request) async {
request.headers['Custom-Header'] = 'CustomValue';
return request;
});
ShararaLaravelSdk.instance.httpClient.addResponseInterceptor((response) async {
print('Response received: ${response.statusCode}');
return response;
});
10. 配置 SDK
你可以在初始化时配置一些 SDK 的选项,例如超时时间、是否启用调试模式等。
ShararaLaravelSdk.initialize(
baseUrl: 'https://your-laravel-backend.com',
timeout: Duration(seconds: 30),
debug: true,
);

