diff --git a/lib/screens/components/ImageReader.dart b/lib/screens/components/ImageReader.dart index 48f3a55..d87b961 100644 --- a/lib/screens/components/ImageReader.dart +++ b/lib/screens/components/ImageReader.dart @@ -6,6 +6,7 @@ import 'package:event/event.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; import 'package:photo_view/photo_view_gallery.dart'; import 'package:pikapika/basic/Common.dart'; import 'package:pikapika/basic/Cross.dart'; @@ -287,6 +288,18 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { ); } + /* + IconButton( + onPressed: _onSelectDirection, + icon: Icon(Icons.grid_goldenratio), + ), + IconButton( + onPressed: _onSelectReaderType, + icon: Icon(Icons.view_day_outlined), + ), + + */ + Widget _buildBar() { return Column( children: [ @@ -296,12 +309,12 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { backgroundColor: readerAppbarColor2, actions: [ IconButton( - onPressed: _onSelectDirection, - icon: Icon(Icons.grid_goldenratio), + onPressed: _onChooseEp, + icon: Icon(Icons.menu_open), ), IconButton( - onPressed: _onSelectReaderType, - icon: Icon(Icons.view_day_outlined), + onPressed: _onMoreSetting, + icon: Icon(Icons.more_horiz), ), ], ), @@ -530,6 +543,27 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { } } + Future _onChooseEp() async { + // todo + var mq = MediaQuery.of(context); + showMaterialModalBottomSheet( + context: context, + backgroundColor: Color(0xFF20253B), + builder: (context) => Container( + height: mq.size.height / 2, + child: _EpChooser( + widget.struct.epNameMap, + widget.struct.epOrder, + widget.struct.onChangeEp, + ), + ), + ); + } + + Future _onMoreSetting() async { + // todo + } + // Future _onNextAction() async { @@ -552,6 +586,53 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { } } +class _EpChooser extends StatefulWidget { + final Map epNameMap; + final int epOrder; + final FutureOr Function(int) onChangeEp; + + _EpChooser(this.epNameMap, this.epOrder, this.onChangeEp); + + @override + State createState() => _EpChooserState(); +} + +class _EpChooserState extends State<_EpChooser> { + @override + Widget build(BuildContext context) { + var entries = widget.epNameMap.entries.toList(); + entries.sort((a, b) => a.key - b.key); + var widgets = [ + Container(height: 20), + ...entries.map((e) { + return Container( + margin: EdgeInsets.only(left: 15, right: 15, top: 5, bottom: 5), + decoration: BoxDecoration( + color: widget.epOrder == e.key ? Colors.grey.withAlpha(35) : null, + border: Border.all( + color: Color(0xff484c60), + style: BorderStyle.solid, + width: .5, + ), + ), + child: MaterialButton( + onPressed: () { + widget.onChangeEp(e.key); + }, + textColor: Colors.white, + child: Text('${e.value}'), + ), + ); + }) + ]; + return ScrollablePositionedList.builder( + initialScrollIndex: widget.epOrder < 2 ? 0 : widget.epOrder - 2, + itemCount: widgets.length, + itemBuilder: (BuildContext context, int index) => widgets[index], + ); + } +} + /////////////////////////////////////////////////////////////////////////////// class _WebToonReaderState extends _ImageReaderContentState { diff --git a/pubspec.lock b/pubspec.lock index a89db6a..949a426 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -168,6 +168,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.0" + modal_bottom_sheet: + dependency: "direct main" + description: + name: modal_bottom_sheet + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" multi_select_flutter: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 66594d6..f2c2719 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,6 +42,7 @@ dependencies: photo_view: ^0.12.0 multi_select_flutter: ^4.0.0 flutter_datetime_picker: ^1.5.1 + modal_bottom_sheet: ^2.0.0 dev_dependencies: flutter_test: