Flutter集成SDK插件se_flutter_sdk_cn的使用
Flutter集成SDK插件se_flutter_sdk_cn的使用
本项目是一个用于Flutter的新插件项目。它包含Android和/或iOS平台上的特定实现代码。
开始使用
此项目是Flutter的一个插件包的起点。插件包是一种专门的包,包括平台特定的实现代码。
若要开始Flutter开发,请查看官方文档,该文档提供了教程、示例、移动开发指导以及完整的API引用。
示例代码
以下是example/lib/main.dart
文件中的完整示例代码:
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:se_flutter_sdk_cn/solar_engine_core/solar_engine.dart';
import 'package:se_flutter_sdk_cn/solar_engine_core/solar_engine_config.dart';
import 'package:se_flutter_sdk_cn/solar_engine_core/solar_engine_event_data.dart';
import 'package:se_flutter_sdk_cn/solar_engine_remote_config/remote_config.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'SolarEngine Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title, this.initialUri, this.latestUri});
final String title;
final String? initialUri;
final String? latestUri;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
[@override](/user/override)
void initState() {
print("initState+++");
_initDeepLinkListener();
}
Future<void> _initDeepLinkListener() async {
// 获取初始 deep link 链接
// final initialLink = await getInitialLink();
// if (initialLink != null) {
// print("initialLink:" + initialLink);
// }
}
}
typedef ClickCallbackString = void Function(String result);
typedef ClickCallbackString2 = void Function(String result1, String result2);
typedef ClickCallback = void Function();
class SETextButtonItem extends StatelessWidget {
final String title;
final String desc;
final ClickCallbackString tapAction;
var _titleTxt = new TextEditingController();
SETextButtonItem(this.title, this.desc, this.tapAction);
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(12),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
TextField(
controller: _titleTxt, // 把 TextEditingController 对象应用到 TextField 上
decoration: InputDecoration(
filled: true,
fillColor: Colors.grey[200],
hintText: desc,
),
),
SizedBox(height: 8),
TextButton(
onPressed: () {
tapAction!(_titleTxt.text);
},
autofocus: true,
child: Text(
title,
style: TextStyle(fontSize: 18.0),
),
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith((states) {
return Colors.blue[200];
}),
padding: MaterialStateProperty.all(
EdgeInsets.only(left: 50, right: 50)),
),
),
],
),
);
}
}
class SEText2ButtonItem extends StatelessWidget {
final String title;
final String desc1;
final String desc2;
final ClickCallbackString2 tapAction;
var _titleTxt1 = new TextEditingController();
var _titleTxt2 = new TextEditingController();
SEText2ButtonItem(this.title, this.desc1, this.desc2, this.tapAction);
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(12),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: TextField(
controller: _titleTxt1,
decoration: InputDecoration(
filled: true,
fillColor: Colors.grey[200],
hintText: desc1,
),
),
),
SizedBox(width: 8),
Expanded(
child: TextField(
controller: _titleTxt2,
decoration: InputDecoration(
filled: true,
fillColor: Colors.grey[200],
hintText: desc2,
),
),
),
],
),
SizedBox(height: 8),
TextButton(
onPressed: () {
tapAction!(_titleTxt1.text, _titleTxt2.text);
},
autofocus: true,
child: Text(
title,
style: TextStyle(fontSize: 18.0),
),
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith((states) {
return Colors.blue[200];
}),
padding: MaterialStateProperty.all(
EdgeInsets.only(left: 50, right: 50)),
),
),
],
),
);
}
}
class SEButtonItem extends StatelessWidget {
final String title;
final ClickCallback tapAction;
SEButtonItem(this.title, this.tapAction);
[@override](/user/override)
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(12),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
TextButton(
onPressed: () {
tapAction!();
},
autofocus: true,
child: Text(
title,
style: TextStyle(fontSize: 18.0),
),
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith((states) {
return Colors.blue[200];
}),
padding: MaterialStateProperty.all(
EdgeInsets.only(left: 50, right: 50)),
),
),
],
),
);
}
}
class _MyHomePageState extends State<MyHomePage> {
void toast(String text) {
final snackBar = SnackBar(content: Text(text));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
void onReceivedAllData(Map? config) {
if (config != null) {
print('Received remote config data: $config');
// 这里可以处理配置数据
} else {
print('No remote config data received');
}
}
late final String timerEventStr;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Padding(
padding: EdgeInsets.only(left: 0, right: 0),
child: CustomScrollView(
shrinkWrap: true,
slivers: <Widget>[
SliverPadding(
padding: const EdgeInsets.all(0),
sliver: SliverList(
delegate: SliverChildListDelegate(
<Widget>[
SEButtonItem("Init SDK", () {
SolarEngine.onDeepLinkCallback((code, data) {
print("onDeepLinkCallback----");
print(code);
if (code == 0) {
print("deeplink解析成功----");
print(data);
} else {
print("deeplink失败----$code");
}
});
SolarEngine.onDelayDeepLinkCallback((code, data) {
print("onDelayDeepLinkCallback----");
print(code);
if (code == 0) {
print("deeplink解析成功----");
print(data);
} else {
print("deeplink失败----$code");
}
});
String appkey = "e62fe50b80fc6e5c";
SolarEngine.preInitialize(appkey);
SolarEngineConfig config = SolarEngineConfig();
config.logEnabled = true;
config.enable2GReporting = true;
config.enableDelayDeeplink = true;
SERemoteConfigData rcConfig = SERemoteConfigData();
rcConfig.enable = true;
rcConfig.logEnabled = true;
rcConfig.customIDProperties = {
"key": "customID",
"value": "androidID"
};
rcConfig.customIDEventProperties = {
"key": "customEventID",
"value": "_appStart"
};
rcConfig.customIDUserProperties = {
"key": "customUserID",
"value": "Topic"
};
config.remoteConfigData = rcConfig;
config.onAttributionSuccess = (data) {
print("onAttributionSuccess----");
print(data);
toast(data!);
};
config.onAttributionFail = (code) {
print("onAttributionFail----");
print(code);
toast("onAttributionFail$code");
};
SolarEngine.initializeWithCallbacK(
appkey, config,
(int? code) {
if (code == 0) {
print("初始化成功-----");
print(code);
SolarEngine.handleDeepLinkUrl("liongo://lionmobo.com/goods_detail?sedp_urlscheme=xxx&sedp_link=xxx&download=xxx&turl_id=xxx&a=1&b2&se_from=urlscheme");
} else {
print("初始化失败-----");
print(code);
}
},
);
}),
SETextButtonItem("asyncFetchRemoteConfig", "key", (key) {
SERemoteConfig().asyncFetchRemoteConfig(key, (result) {
print("在线参数回调-----");
print(result);
toast("result=${result!}");
});
}),
// 其他按钮省略...
],
),
),
),
],
),
),
),
);
}
}
更多关于Flutter集成SDK插件se_flutter_sdk_cn的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter集成SDK插件se_flutter_sdk_cn的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成并使用第三方SDK插件se_flutter_sdk_cn
,通常涉及以下几个步骤:添加依赖、配置原生代码(如果需要)、初始化SDK以及调用SDK提供的方法。以下是一个详细的代码案例,展示如何在Flutter项目中集成并使用se_flutter_sdk_cn
插件。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加se_flutter_sdk_cn
依赖:
dependencies:
flutter:
sdk: flutter
se_flutter_sdk_cn: ^最新版本号 # 替换为实际的最新版本号
然后运行flutter pub get
命令来安装依赖。
2. 导入SDK并初始化
在你的Flutter项目的入口文件(通常是main.dart
)中导入SDK并初始化:
import 'package:flutter/material.dart';
import 'package:se_flutter_sdk_cn/se_flutter_sdk_cn.dart'; // 导入SDK
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
// 初始化SDK,这里假设SDK需要一个初始化函数,具体根据SDK文档
SeFlutterSdkCn.instance.initSdk('你的初始化参数'); // 替换为你的实际参数
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter 集成 se_flutter_sdk_cn 示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 调用SDK提供的方法,这里假设有一个登录函数
SeFlutterSdkCn.instance.login('用户名', '密码').then((result) {
// 处理登录结果
print('登录结果: $result');
}).catchError((error) {
// 处理错误
print('登录错误: $error');
});
},
child: Text('登录'),
),
),
),
);
}
}
3. 配置原生代码(如果需要)
有些SDK可能需要在原生代码(iOS和Android)中进行额外的配置。由于se_flutter_sdk_cn
的具体配置可能依赖于SDK的具体版本和功能,这里无法给出具体的原生代码配置。通常,SDK的官方文档会提供详细的配置说明。
4. 处理回调和事件
根据SDK的功能,你可能需要处理回调和事件。在上面的代码中,我们通过.then()
和.catchError()
来处理登录的异步结果。
注意事项
- 确保你使用的
se_flutter_sdk_cn
版本与Flutter SDK版本兼容。 - 仔细阅读并遵循SDK的官方文档,因为不同版本的SDK可能有不同的初始化和配置要求。
- 如果SDK提供了更多的功能,如用户注册、数据同步等,你可以参考SDK的API文档来调用相应的方法。
示例总结
上面的代码展示了如何在Flutter项目中集成并使用se_flutter_sdk_cn
插件。实际使用时,你需要根据SDK的具体文档来调整初始化参数和方法调用。如果遇到问题,可以查阅SDK的官方文档或寻求社区的帮助。