ella_saas_flutter 0.0.2 copy "ella_saas_flutter: ^0.0.2" to clipboard
ella_saas_flutter: ^0.0.2 copied to clipboard

outdated

咿啦看书的 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),
                ],
              ),
            )));
  }
}
1
likes
0
points
14
downloads

Publisher

unverified uploader

Weekly Downloads

咿啦看书的 flutter 插件

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on ella_saas_flutter

Packages that implement ella_saas_flutter