ella_saas_flutter 0.0.2
ella_saas_flutter: ^0.0.2 copied to clipboard
咿啦看书的 flutter 插件
example/lib/main.dart
import 'package:ella_saas_flutter/const.dart';
import 'package:flutter/material.dart';
import 'package:ella_saas_flutter/ella_saas_flutter.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'control_view.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(routes: {
'com.ellabook/controlView': (context) => const ControlView(),
}, home: MyHomePage());
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<StatefulWidget> createState() => _MyHomePageState();
}
enum ReadModeOptions { manual, auto, education }
final readModeValues = {
ReadModeOptions.manual: 0,
ReadModeOptions.auto: 1,
ReadModeOptions.education: 3,
};
class _MyHomePageState extends State<MyHomePage> {
final _ellaSaasFlutterPlugin = EllaSaasFlutter();
ReadModeOptions _selectedOption = ReadModeOptions.manual;
// 创建 TextEditingController 实例
final bookCodeController = TextEditingController();
final startPageController = TextEditingController();
bool _isTryMode = false;
bool _downloadSplit = false;
String _downloadTips = "";
void _receiveFromNative(call) {
if (call.method == Constants.downloadListener) {
Map<dynamic, dynamic> data = call.arguments as Map;
String downloadEvent = data[Constants.downloadEvent];
String bookCode = data[Constants.bookCode];
if (downloadEvent == Constants.onStart) {
setState(() {
_downloadTips = "图书 $bookCode 开始下载";
});
} else if (downloadEvent == Constants.onFinish) {
setState(() {
_downloadTips = "图书 $bookCode 下载完成";
});
_ellaSaasFlutterPlugin
.openBook({"isTry": _isTryMode, "bookCode": bookCode});
} else if (downloadEvent == Constants.onProgress) {
double progress = data[Constants.progress];
setState(() {
_downloadTips = "图书 $bookCode 下载中,进度${progress.toInt()}%";
});
} else if (downloadEvent == Constants.onError) {
int errorCode = data['errorCode'];
String msg = data['msg'];
setState(() {
_downloadTips = "图书 $bookCode 下载出错,错误码:$errorCode,错误信息:$msg";
});
}
} else if (call.method == Constants.onError) {
Map<dynamic, dynamic> data = call.arguments as Map;
int errorCode = data['errorCode'];
String msg = data['msg'];
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('错误'),
content: Text("错误码:$errorCode,错误信息:$msg"),
actions: <Widget>[
TextButton(
child: const Text('确定'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
@override
void initState() {
_ellaSaasFlutterPlugin.initConfig({
"androidAppKey": "kx0r5h5ekdnwxcei",
"androidAppSecret": "788f00d9bb961ef6fe82cceda1c6f135"
});
_ellaSaasFlutterPlugin.receiveFromNative(_receiveFromNative);
}
@override
void dispose() {
// 清理控制器资源
bookCodeController.dispose();
startPageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('咿啦看书 Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const Text(
"正式 or 试读",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Checkbox(
value: !_isTryMode,
onChanged: (bool? value) {
setState(() {
_isTryMode = !value!;
});
},
),
const Text("正式阅读"),
Checkbox(
value: _isTryMode,
onChanged: (bool? value) {
setState(() {
_isTryMode = value!;
});
},
),
const Text("试读模式")
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"选择阅读模式",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
SizedBox(
width: 200,
height: 40,
child: RadioListTile<ReadModeOptions>(
title: const Text('精读模式'),
value: ReadModeOptions.manual,
groupValue: _selectedOption,
onChanged: (value) {
setState(() {
_selectedOption = value!;
});
},
),
),
SizedBox(
width: 200,
height: 40,
child: RadioListTile<ReadModeOptions>(
title: const Text('泛读模式'),
value: ReadModeOptions.auto,
groupValue: _selectedOption,
onChanged: (value) {
setState(() {
_selectedOption = value!;
});
},
)),
SizedBox(
width: 200,
height: 40,
child: RadioListTile<ReadModeOptions>(
title: const Text('伴读模式'),
value: ReadModeOptions.education,
groupValue: _selectedOption,
onChanged: (value) {
setState(() {
_selectedOption = value!;
});
},
)),
],
),
Padding(
padding: const EdgeInsets.only(
left: 0, top: 16, right: 0, bottom: 0),
child: TextField(
controller: bookCodeController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: '输入图书编号',
),
),
),
const Padding(
padding:
EdgeInsets.only(left: 0, top: 16, right: 0, bottom: 0),
child: Text(
"下载模式",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Checkbox(
value: !_downloadSplit,
onChanged: (bool? value) {
setState(() {
_downloadSplit = !value!;
});
},
),
const Text("整包下载"),
Checkbox(
value: _downloadSplit,
onChanged: (bool? value) {
setState(() {
_downloadSplit = value!;
});
},
),
const Text("分包下载")
],
),
ElevatedButton(
child: const Text("下载图书"),
onPressed: () async {
await _ellaSaasFlutterPlugin.downloadBook({
"isTry": _isTryMode,
"bookCode": bookCodeController.text,
"downloadZipMode": _downloadSplit ? 0 : 1
});
},
),
Padding(
padding:
const EdgeInsets.only(left: 0, top: 16, right: 0, bottom: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
width: 200,
height: 50,
child: TextField(
controller: startPageController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: '输入起始页码',
),
),
),
Padding(
padding: const EdgeInsets.only(
left: 16, top: 0, right: 0, bottom: 0),
child: ElevatedButton(
child: const Text("打开阅读器"),
onPressed: () async {
await _ellaSaasFlutterPlugin.openBook({
"isTry": _isTryMode,
"bookCode": bookCodeController.text,
"bookPlayMode":
readModeValues[_selectedOption],
"startPage": startPageController.text
});
},
)),
],
),
),
ElevatedButton(
child: const Text("删除图书"),
onPressed: () async {
final result = await _ellaSaasFlutterPlugin
.deleteBook({"bookCode": bookCodeController.text});
Fluttertoast.showToast(
msg: "$result",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
timeInSecForIosWeb: 1,
backgroundColor: Colors.red,
textColor: Colors.white,
fontSize: 16.0);
},
),
if (_downloadTips.isNotEmpty) Text(_downloadTips),
],
),
)));
}
}