Open royacodes opened 6 months ago
This pull request adds a new feature to the epub_view library, allowing users to open books directly from a URL.
import 'package:epub_view/epub_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show SystemChrome, SystemUiOverlayStyle; void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> with WidgetsBindingObserver { @override void initState() { WidgetsBinding.instance.addObserver(this); super.initState(); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangePlatformBrightness() { _setSystemUIOverlayStyle(); } Brightness get platformBrightness => MediaQueryData.fromView(WidgetsBinding.instance.window) .platformBrightness; void _setSystemUIOverlayStyle() { if (platformBrightness == Brightness.light) { SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( statusBarBrightness: Brightness.light, statusBarIconBrightness: Brightness.dark, systemNavigationBarColor: Colors.grey[50], systemNavigationBarIconBrightness: Brightness.dark, )); } else { SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( statusBarBrightness: Brightness.dark, statusBarIconBrightness: Brightness.light, systemNavigationBarColor: Colors.grey[850], systemNavigationBarIconBrightness: Brightness.light, )); } } @override Widget build(BuildContext context) => MaterialApp( title: 'Epub demo', theme: ThemeData( primarySwatch: Colors.blue, brightness: Brightness.light, ), darkTheme: ThemeData( primarySwatch: Colors.blue, brightness: Brightness.dark, ), debugShowCheckedModeBanner: false, home: const MyHomePage(), ); } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key}) : super(key: key); @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { late EpubController _epubReaderController; @override void initState() { _epubReaderController = EpubController( document: EpubDocument.openUrl('https://www.gutenberg.org/ebooks/11.epub.images'), ); super.initState(); } @override void dispose() { _epubReaderController.dispose(); super.dispose(); } @override Widget build(BuildContext context) => Scaffold( appBar: AppBar( title: EpubViewActualChapter( controller: _epubReaderController, builder: (chapterValue) => Text( chapterValue?.chapter?.Title?.replaceAll('\n', '').trim() ?? '', textAlign: TextAlign.start, ), ), actions: <Widget>[ IconButton( icon: const Icon(Icons.save_alt), color: Colors.white, onPressed: () => _showCurrentEpubCfi(context), ), ], ), drawer: Drawer( child: EpubViewTableOfContents(controller: _epubReaderController), ), body: EpubView( builders: EpubViewBuilders<DefaultBuilderOptions>( options: const DefaultBuilderOptions(), chapterDividerBuilder: (_) => const Divider(), ), controller: _epubReaderController, ), ); void _showCurrentEpubCfi(context) { final cfi = _epubReaderController.generateEpubCfi(); if (cfi != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(cfi), action: SnackBarAction( label: 'GO', onPressed: () { _epubReaderController.gotoEpubCfi(cfi); }, ), ), ); } } }
This pull request adds a new feature to the epub_view library, allowing users to open books directly from a URL.
Changes Made
Usage Example