ella_saas_flutter 0.0.6 copy "ella_saas_flutter: ^0.0.6" to clipboard
ella_saas_flutter: ^0.0.6 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 = "";

  @override
  void initState() {
    _ellaSaasFlutterPlugin.initConfig(
        androidAppKey: "",
        androidAppSecret: "");

    _ellaSaasFlutterPlugin.addEventHandler(
        // 接收通知回调方法。
        onStart: (Map<String, dynamic> message) async {
      String bookCode = message[Constants.bookCode];
      setState(() {
        _downloadTips = "图书 $bookCode 开始下载";
      });
    }, onProgress: (Map<String, dynamic> message) async {
      double progress = message[Constants.progress];
      String bookCode = message[Constants.bookCode];
      setState(() {
        _downloadTips = "图书 $bookCode 下载中,进度${progress.toInt()}%";
      });
    }, onFinish: (Map<String, dynamic> message) async {
      print("onFinish");
      String bookCode = message[Constants.bookCode];
      setState(() {
        _downloadTips = "图书 $bookCode 下载完成";
      });
      _ellaSaasFlutterPlugin.openBook(
          isTry: _isTryMode,
          bookCode: bookCode,
          bookPlayMode: readModeValues[_selectedOption]);
    }, onDownloadError: (Map<String, dynamic> message) async {
      String bookCode = message[Constants.bookCode];
      int errorCode = message['errorCode'];
      String msg = message['msg'];
      setState(() {
        _downloadTips = "图书 $bookCode 下载出错,错误码:$errorCode,错误信息:$msg";
      });
    }, onBookError: (Map<String, dynamic> message) async {
      int errorCode = message['errorCode'];
      String msg = message['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 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: () {
                      _ellaSaasFlutterPlugin.downloadBook(
                          isTry: _isTryMode,
                          bookCode: bookCodeController.text,
                          isSplit: _downloadSplit);
                    },
                  ),
                  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: () {
                                _ellaSaasFlutterPlugin.openBook(
                                    isTry: _isTryMode,
                                    bookCode: bookCodeController.text,
                                    bookPlayMode:
                                        readModeValues[_selectedOption],
                                    startPage: startPageController.text.isEmpty
                                        ? '1'
                                        : startPageController.text);
                              },
                            )),
                      ],
                    ),
                  ),
                  ElevatedButton(
                    child: const Text("删除图书"),
                    onPressed: () async {
                      final result = await _ellaSaasFlutterPlugin
                          .deleteBook(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
12
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