From 348565ccd0838264d8eb416e4db0c89560641bfe Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Sat, 27 Mar 2021 16:38:32 +0800 Subject: [PATCH] =?UTF-8?q?macos=E7=89=88=E5=8D=87=E7=BA=A7=E5=88=B0flutte?= =?UTF-8?q?r2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable-v21/launch_background.xml | 12 + .../app/src/main/res/values-night/styles.xml | 18 + lib/app/convert.dart | 2 +- lib/app/res/cons.dart | 4 +- lib/app/res/style/shape/techno_shape.dart | 1 - lib/app/res/style/unit_text_style.dart | 2 - lib/app/router.dart | 32 +- lib/app/utils/color_utils.dart | 1 - lib/app/utils/stream_ext/backpressure.dart | 356 ++++++++++++++++++ lib/app/utils/stream_ext/ext.dart | 84 +++++ .../utils/stream_ext/forwarding_stream.dart | 82 ++++ lib/app/utils/stream_ext/timer_stream.dart | 56 +++ lib/blocs/category/category_bloc.dart | 12 +- lib/blocs/category/category_state.dart | 4 +- .../category_widget/category_widget_bloc.dart | 10 +- .../category_widget_event.dart | 2 - .../category_widget_state.dart | 4 +- lib/blocs/collect/collect_bloc.dart | 8 +- lib/blocs/collect/collect_event.dart | 2 +- lib/blocs/collect/collect_state.dart | 2 +- lib/blocs/detail/detail_bloc.dart | 8 +- lib/blocs/detail/detail_event.dart | 2 +- lib/blocs/detail/detail_state.dart | 4 +- lib/blocs/global/global_bloc.dart | 10 +- lib/blocs/home/home_bloc.dart | 13 +- lib/blocs/home/home_event.dart | 6 +- lib/blocs/home/home_state.dart | 2 +- lib/blocs/search/search_bloc.dart | 17 +- lib/blocs/search/search_event.dart | 2 +- lib/blocs/search/search_state.dart | 2 +- lib/main.dart | 2 +- lib/model/category_model.dart | 4 +- lib/model/widget_model.dart | 8 +- .../impl/catagory_db_repository.dart | 14 +- .../impl/widget_db_repository.dart | 16 +- lib/repositories/itf/category_repository.dart | 6 +- lib/repositories/itf/widget_repository.dart | 8 +- lib/storage/app_storage.dart | 6 +- lib/storage/dao/category_dao.dart | 8 +- lib/storage/dao/node_dao.dart | 2 +- lib/storage/dao/widget_dao.dart | 4 +- lib/views/app/bloc_wrapper.dart | 10 +- lib/views/app/flutter_app.dart | 10 +- lib/views/app/navigation/unit_navigation.dart | 30 +- lib/views/app/splash/unit_splash.dart | 2 +- .../components/project/color_chooser.dart | 4 +- .../dialogs/delete_category_dialog.dart | 2 +- .../project/dialogs/dialog_about.dart | 2 +- .../components/project/widget_node_panel.dart | 10 +- lib/views/items/category_list_item.dart | 6 +- lib/views/items/collect_widget_list_item.dart | 12 +- lib/views/items/coupon_widget_list_item.dart | 16 +- lib/views/items/home_item_support.dart | 4 +- lib/views/items/techno_widget_list_item.dart | 16 +- lib/views/pages/about/about_app_page.dart | 10 +- lib/views/pages/about/about_me_page.dart | 6 +- lib/views/pages/category/category_page.dart | 20 +- lib/views/pages/category/category_show.dart | 24 +- lib/views/pages/category/collect_page.dart | 10 +- .../pages/category/edit_category_panel.dart | 16 +- .../pages/category/home_right_drawer.dart | 4 +- .../pages/detail/category_end_drawer.dart | 20 +- .../pages/detail/widget_detail_page.dart | 36 +- lib/views/pages/home/home_drawer.dart | 8 +- lib/views/pages/home/home_page.dart | 20 +- lib/views/pages/home/toly_app_bar.dart | 4 +- lib/views/pages/search/app_search_bar.dart | 6 +- lib/views/pages/search/serach_page.dart | 24 +- lib/views/pages/search/start_filter.dart | 6 +- .../pages/setting/code_style_setting.dart | 16 +- lib/views/pages/setting/font_setting.dart | 12 +- .../pages/setting/item_style_setting.dart | 12 +- lib/views/pages/setting/setting_page.dart | 10 +- .../pages/setting/theme_color_setting.dart | 12 +- lib/views/pages/unit_todo/attr_unit_page.dart | 22 +- lib/views/pages/unit_todo/bug_unit_page.dart | 22 +- .../pages/unit_todo/layout_unit_page.dart | 16 +- .../pages/unit_todo/paint_unit_page.dart | 22 +- .../CustomMultiChildLayout/node1_base.dart | 2 - .../ListBody/node1_base.dart | 1 - .../NestedScrollViewViewport/node1_base.dart | 39 ++ .../ShrinkWrappingViewport/node1_base.dart | 36 ++ .../ListWheelViewport/node2_perspective.dart | 2 - .../ListWheelViewport/node3_magnifier.dart | 2 - .../ListWheelViewport/node4_opacity.dart | 2 - .../ProxyWidget/LayoutId/node1_base.dart | 2 - .../ParentDataWidget/node1_base.dart | 31 ++ .../ProxyWidget/SliderTheme/node1_base.dart | 2 - .../ColorFiltered/node1_base.dart | 1 - .../CustomPaint/node2_bezier.dart | 2 +- .../RepaintBoundary/main.dart | 24 ++ .../RepaintBoundary/node1_base.dart | 2 +- .../Sliver/SliverAnimatedList/node1_base.dart | 2 - .../SliverLayoutBuilder/node1_base.dart | 4 +- .../SliverPrototypeExtentList.dart | 105 ++++++ .../DraggableScrollableSheet/node1_base.dart | 4 - .../node1_base.dart | 4 - .../InteractiveViewer/node3_controller.dart | 1 - .../NestedScrollView/node1_base.dart | 3 +- .../RawKeyboardListener/node1_base.dart | 1 - .../StatefulBuilder/node1_base.dart | 1 - .../StatusTransitionWidget/node1_base.dart | 78 ++++ .../StatefulWidget/TextField/node1_base.dart | 1 - .../TextField/node2_cursor.dart | 1 - .../UniqueWidget/node1_base.dart | 32 ++ .../CupertinoDialogAction/no_node1_base.dart | 128 +++++++ .../CupertinoDialogAction/node1_base.dart | 3 - .../node1_base.dart | 4 - .../SimpleDialog/node1_base.dart | 1 - .../StatelessWidget/Theme/node1_base.dart | 4 +- lib/views/widgets/exp/proxy_unit.dart | 1 + lib/views/widgets/exp/render_object_unit.dart | 2 + lib/views/widgets/exp/stateful_unit.dart | 2 + lib/views/widgets/widgets_map.dart | 20 + macos/Flutter/Flutter-Debug.xcconfig | 2 +- macos/Flutter/Flutter-Release.xcconfig | 2 +- macos/Podfile | 80 +--- macos/Podfile.lock | 35 +- macos/Runner.xcodeproj/project.pbxproj | 68 ++-- .../xcshareddata/xcschemes/Runner.xcscheme | 14 +- macos/Runner/Configs/AppInfo.xcconfig | 2 +- pubspec.lock | 167 ++++---- pubspec.yaml | 24 +- 123 files changed, 1595 insertions(+), 669 deletions(-) create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 android/app/src/main/res/values-night/styles.xml create mode 100755 lib/app/utils/stream_ext/backpressure.dart create mode 100644 lib/app/utils/stream_ext/ext.dart create mode 100755 lib/app/utils/stream_ext/forwarding_stream.dart create mode 100644 lib/app/utils/stream_ext/timer_stream.dart create mode 100644 lib/views/widgets/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart create mode 100644 lib/views/widgets/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart create mode 100644 lib/views/widgets/ProxyWidget/ParentDataWidget/node1_base.dart create mode 100644 lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart create mode 100644 lib/views/widgets/Sliver/SliverPrototypeExtentList/SliverPrototypeExtentList.dart create mode 100644 lib/views/widgets/StatefulWidget/StatusTransitionWidget/node1_base.dart create mode 100644 lib/views/widgets/StatefulWidget/UniqueWidget/node1_base.dart create mode 100644 lib/views/widgets/StatelessWidget/CupertinoDialogAction/no_node1_base.dart diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..449a9f9 --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/lib/app/convert.dart b/lib/app/convert.dart index fc45ebd..d52c8bf 100644 --- a/lib/app/convert.dart +++ b/lib/app/convert.dart @@ -1,4 +1,4 @@ -import 'package:flutter_unit_mac/app/enums.dart'; +import 'package:flutter_unit/app/enums.dart'; /// create by 张风捷特烈 on 2020-03-07 /// contact me by email 1981462002@qq.com diff --git a/lib/app/res/cons.dart b/lib/app/res/cons.dart index 2931b5e..3c0ab93 100644 --- a/lib/app/res/cons.dart +++ b/lib/app/res/cons.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/views/components/permanent/code/highlighter_style.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/views/components/permanent/code/highlighter_style.dart'; class Cons { static String version = 'V1.1.0'; diff --git a/lib/app/res/style/shape/techno_shape.dart b/lib/app/res/style/shape/techno_shape.dart index 656f5bb..f42199e 100644 --- a/lib/app/res/style/shape/techno_shape.dart +++ b/lib/app/res/style/shape/techno_shape.dart @@ -1,4 +1,3 @@ -import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/lib/app/res/style/unit_text_style.dart b/lib/app/res/style/unit_text_style.dart index 596d070..76fc58e 100644 --- a/lib/app/res/style/unit_text_style.dart +++ b/lib/app/res/style/unit_text_style.dart @@ -1,5 +1,3 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; /// create by 张风捷特烈 on 2020-04-19 /// contact me by email 1981462002@qq.com diff --git a/lib/app/router.dart b/lib/app/router.dart index 31abcbf..5ae8da3 100644 --- a/lib/app/router.dart +++ b/lib/app/router.dart @@ -1,21 +1,21 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/views/app/navigation/unit_navigation.dart'; -import 'package:flutter_unit_mac/views/pages/about/about_me_page.dart'; -import 'package:flutter_unit_mac/views/pages/about/about_app_page.dart'; -import 'package:flutter_unit_mac/views/pages/category/category_show.dart'; -import 'package:flutter_unit_mac/views/pages/category/collect_page.dart'; -import 'package:flutter_unit_mac/views/pages/search/serach_page.dart'; -import 'package:flutter_unit_mac/views/pages/setting/code_style_setting.dart'; -import 'package:flutter_unit_mac/views/pages/setting/font_setting.dart'; -import 'package:flutter_unit_mac/views/pages/setting/item_style_setting.dart'; -import 'package:flutter_unit_mac/views/pages/setting/theme_color_setting.dart'; -import 'package:flutter_unit_mac/views/pages/unit_todo/attr_unit_page.dart'; -import 'package:flutter_unit_mac/views/pages/unit_todo/bug_unit_page.dart'; +import 'package:flutter_unit/views/app/navigation/unit_navigation.dart'; +import 'package:flutter_unit/views/pages/about/about_me_page.dart'; +import 'package:flutter_unit/views/pages/about/about_app_page.dart'; +import 'package:flutter_unit/views/pages/category/category_show.dart'; +import 'package:flutter_unit/views/pages/category/collect_page.dart'; +import 'package:flutter_unit/views/pages/search/serach_page.dart'; +import 'package:flutter_unit/views/pages/setting/code_style_setting.dart'; +import 'package:flutter_unit/views/pages/setting/font_setting.dart'; +import 'package:flutter_unit/views/pages/setting/item_style_setting.dart'; +import 'package:flutter_unit/views/pages/setting/theme_color_setting.dart'; +import 'package:flutter_unit/views/pages/unit_todo/attr_unit_page.dart'; +import 'package:flutter_unit/views/pages/unit_todo/bug_unit_page.dart'; -import 'package:flutter_unit_mac/views/pages/detail/widget_detail_page.dart'; -import 'package:flutter_unit_mac/views/pages/unit_todo/layout_unit_page.dart'; -import 'package:flutter_unit_mac/views/pages/unit_todo/paint_unit_page.dart'; -import 'package:flutter_unit_mac/views/pages/setting/setting_page.dart'; +import 'package:flutter_unit/views/pages/detail/widget_detail_page.dart'; +import 'package:flutter_unit/views/pages/unit_todo/layout_unit_page.dart'; +import 'package:flutter_unit/views/pages/unit_todo/paint_unit_page.dart'; +import 'package:flutter_unit/views/pages/setting/setting_page.dart'; import 'utils/router_utils.dart'; diff --git a/lib/app/utils/color_utils.dart b/lib/app/utils/color_utils.dart index 8040587..951d080 100644 --- a/lib/app/utils/color_utils.dart +++ b/lib/app/utils/color_utils.dart @@ -1,4 +1,3 @@ -import 'dart:math'; import 'package:flutter/material.dart'; diff --git a/lib/app/utils/stream_ext/backpressure.dart b/lib/app/utils/stream_ext/backpressure.dart new file mode 100755 index 0000000..29bebe9 --- /dev/null +++ b/lib/app/utils/stream_ext/backpressure.dart @@ -0,0 +1,356 @@ +import 'dart:async'; +import 'dart:collection'; + +import 'forwarding_stream.dart'; + + +/// A [Sink] that supports event hooks. +/// +/// This makes it suitable for certain rx transformers that need to +/// take action after onListen, onPause, onResume or onCancel. +/// +/// The [ForwardingSink] has been designed to handle asynchronous events from +/// [Stream]s. See, for example, [Stream.eventTransformed] which uses +/// `EventSink`s to transform events. +abstract class ForwardingSink { + /// Handle data event + void add(EventSink sink, T data); + + /// Handle error event + void addError(EventSink sink, dynamic error, [StackTrace st]); + + /// Handle close event + void close(EventSink sink); + + /// Fires when a listener subscribes on the underlying [Stream]. + void onListen(EventSink sink); + + /// Fires when a subscriber pauses. + void onPause(EventSink sink, [Future resumeSignal]); + + /// Fires when a subscriber resumes after a pause. + void onResume(EventSink sink); + + /// Fires when a subscriber cancels. + FutureOr onCancel(EventSink sink); +} + + +// import 'package:rxdart/src/utils/forwarding_sink.dart'; +// import 'package:rxdart/src/utils/forwarding_stream.dart'; + +/// The strategy that is used to determine how and when a new window is created. +enum WindowStrategy { + /// cancels the open window (if any) and immediately opens a fresh one. + everyEvent, + + /// waits until the current open window completes, then when the + /// source [Stream] emits a next event, it opens a new window. + eventAfterLastWindow, + + /// opens a recurring window right after the very first event on + /// the source [Stream] is emitted. + firstEventOnly, + + /// does not open any windows, rather all events are buffered and emitted + /// whenever the handler triggers, after this trigger, the buffer is cleared. + onHandler +} + +class _BackpressureStreamSink implements ForwardingSink { + final WindowStrategy _strategy; + final Stream Function(S event) _windowStreamFactory; + final T Function(S event) _onWindowStart; + final T Function(List queue) _onWindowEnd; + final int _startBufferEvery; + final bool Function(List queue) _closeWindowWhen; + final bool _ignoreEmptyWindows; + final bool _dispatchOnClose; + final queue = []; + var skip = 0; + var _hasData = false; + StreamSubscription _windowSubscription; + + _BackpressureStreamSink( + this._strategy, + this._windowStreamFactory, + this._onWindowStart, + this._onWindowEnd, + this._startBufferEvery, + this._closeWindowWhen, + this._ignoreEmptyWindows, + this._dispatchOnClose); + + @override + void add(EventSink sink, S data) { + _hasData = true; + maybeCreateWindow(data, sink); + + if (skip == 0) { + queue.add(data); + } + + if (skip > 0) { + skip--; + } + + maybeCloseWindow(sink); + } + + @override + void addError(EventSink sink, dynamic e, [st]) => sink.addError(e, st); + + @override + void close(EventSink sink) { + // treat the final event as a Window that opens + // and immediately closes again + if (_dispatchOnClose && queue.isNotEmpty) { + resolveWindowStart(queue.last, sink); + } + + resolveWindowEnd(sink, true); + + queue.clear(); + + _windowSubscription?.cancel(); + sink.close(); + } + + @override + FutureOr onCancel(EventSink sink) => _windowSubscription?.cancel(); + + @override + void onListen(EventSink sink) {} + + @override + void onPause(EventSink sink, [Future resumeSignal]) => + _windowSubscription?.pause(resumeSignal); + + @override + void onResume(EventSink sink) => _windowSubscription?.resume(); + + void maybeCreateWindow(S event, EventSink sink) { + switch (_strategy) { + // for example throttle + case WindowStrategy.eventAfterLastWindow: + if (_windowSubscription != null) return; + + _windowSubscription = singleWindow(event, sink); + + resolveWindowStart(event, sink); + + break; + // for example scan + case WindowStrategy.firstEventOnly: + if (_windowSubscription != null) return; + + _windowSubscription = multiWindow(event, sink); + + resolveWindowStart(event, sink); + + break; + // for example debounce + case WindowStrategy.everyEvent: + _windowSubscription?.cancel(); + + _windowSubscription = singleWindow(event, sink); + + resolveWindowStart(event, sink); + + break; + case WindowStrategy.onHandler: + break; + } + } + + void maybeCloseWindow(EventSink sink) { + if (_closeWindowWhen != null && + _closeWindowWhen(UnmodifiableListView(queue))) { + resolveWindowEnd(sink); + } + } + + StreamSubscription singleWindow(S event, EventSink sink) => + buildStream(event, sink).take(1).listen( + null, + onError: sink.addError, + onDone: () => resolveWindowEnd(sink), + ); + + // opens a new Window which is kept open until the main Stream + // closes. + StreamSubscription multiWindow(S event, EventSink sink) => + buildStream(event, sink).listen( + (dynamic _) => resolveWindowEnd(sink), + onError: sink.addError, + onDone: () => resolveWindowEnd(sink), + ); + + Stream buildStream(S event, EventSink sink) { + Stream stream; + + _windowSubscription?.cancel(); + + stream = _windowStreamFactory(event); + + if (stream == null) { + sink.addError(ArgumentError.notNull('windowStreamFactory')); + } + + return stream; + } + + void resolveWindowStart(S event, EventSink sink) { + if (_onWindowStart != null) { + sink.add(_onWindowStart(event)); + } + } + + void resolveWindowEnd(EventSink sink, [bool isControllerClosing = false]) { + if (isControllerClosing || + _strategy == WindowStrategy.eventAfterLastWindow || + _strategy == WindowStrategy.everyEvent) { + _windowSubscription?.cancel(); + _windowSubscription = null; + } + + if (isControllerClosing && !_dispatchOnClose) { + return; + } + + if (_hasData && (queue.isNotEmpty || !_ignoreEmptyWindows)) { + if (_onWindowEnd != null) { + sink.add(_onWindowEnd(List.unmodifiable(queue))); + } + + // prepare the buffer for the next window. + // by default, this is just a cleared buffer + if (!isControllerClosing && _startBufferEvery > 0) { + // ...unless startBufferEvery is provided. + // here we backtrack to the first event of the last buffer + // and count forward using startBufferEvery until we reach + // the next event. + // + // if the next event is found inside the current buffer, + // then this event and any later events in the buffer + // become the starting values of the next buffer. + // if the next event is not yet available, then a skip + // count is calculated. + // this count will skip the next Future n-events. + // when skip is reset to 0, then we start adding events + // again into the new buffer. + // + // example: + // startBufferEvery = 2 + // last buffer: [0, 1, 2, 3, 4] + // 0 is the first event, + // 2 is the n-th event + // new buffer starts with [2, 3, 4] + // + // example: + // startBufferEvery = 3 + // last buffer: [0, 1] + // 0 is the first event, + // the n-the event is not yet dispatched at this point + // skip becomes 1 + // event 2 is skipped, skip becomes 0 + // event 3 is now added to the buffer + final startWith = (_startBufferEvery < queue.length) + ? queue.sublist(_startBufferEvery) + : []; + + skip = _startBufferEvery > queue.length + ? _startBufferEvery - queue.length + : 0; + + queue + ..clear() + ..addAll(startWith); + } else { + queue.clear(); + } + } + } +} + +/// A highly customizable [StreamTransformer] which can be configured +/// to serve any of the common rx backpressure operators. +/// +/// The [StreamTransformer] works by creating windows, during which it +/// buffers events to a [Queue]. +/// +/// The [StreamTransformer] works by creating windows, during which it +/// buffers events to a [Queue]. It uses a [WindowStrategy] to determine +/// how and when a new window is created. +/// +/// onWindowStart and onWindowEnd are handlers that fire when a window +/// opens and closes, right before emitting the transformed event. +/// +/// startBufferEvery allows to skip events coming from the source [Stream]. +/// +/// ignoreEmptyWindows can be set to true, to allow events to be emitted +/// at the end of a window, even if the current buffer is empty. +/// If the buffer is empty, then an empty [List] will be emitted. +/// If false, then nothing is emitted on an empty buffer. +/// +/// dispatchOnClose will cause the remaining values in the buffer to be +/// emitted when the source [Stream] closes. +/// When false, the remaining buffer is discarded on close. +class BackpressureStreamTransformer extends StreamTransformerBase { + /// Determines how the window is created + final WindowStrategy strategy; + + /// Factory method used to create the [Stream] which will be buffered + final Stream Function(S event) windowStreamFactory; + + /// Handler which fires when the window opens + final T Function(S event) onWindowStart; + + /// Handler which fires when the window closes + final T Function(List queue) onWindowEnd; + + /// Used to skip an amount of events + final int startBufferEvery; + + /// Predicate which determines when the current window should close + final bool Function(List queue) closeWindowWhen; + + /// Toggle to prevent, or allow windows that contain + /// no events to be dispatched + final bool ignoreEmptyWindows; + + /// Toggle to prevent, or allow the final set of events to be dispatched + /// when the source [Stream] closes + final bool dispatchOnClose; + + /// Constructs a [StreamTransformer] which buffers events emitted by the + /// [Stream] that is created by [windowStreamFactory]. + /// + /// Use the various optional parameters to precisely determine how and when + /// this buffer should be created. + /// + /// For more info on the parameters, see [BackpressureStreamTransformer], + /// or see the various back pressure [StreamTransformer]s for examples. + BackpressureStreamTransformer(this.strategy, this.windowStreamFactory, + {this.onWindowStart, + this.onWindowEnd, + this.startBufferEvery = 0, + this.closeWindowWhen, + this.ignoreEmptyWindows = true, + this.dispatchOnClose = true}); + + @override + Stream bind(Stream stream) { + var sink = _BackpressureStreamSink( + strategy, + windowStreamFactory, + onWindowStart, + onWindowEnd, + startBufferEvery, + closeWindowWhen, + ignoreEmptyWindows, + dispatchOnClose, + ); + return forwardStream(stream, sink); + } +} diff --git a/lib/app/utils/stream_ext/ext.dart b/lib/app/utils/stream_ext/ext.dart new file mode 100644 index 0000000..deb1cf9 --- /dev/null +++ b/lib/app/utils/stream_ext/ext.dart @@ -0,0 +1,84 @@ +import 'backpressure.dart'; +import 'timer_stream.dart'; + +/// create by 张风捷特烈 on 2020/11/17 +/// contact me by email 1981462002@qq.com +/// 说明: + +/// Transforms a [Stream] so that will only emit items from the source sequence +/// if a window has completed, without the source sequence emitting +/// another item. +/// +/// This window is created after the last debounced event was emitted. +/// You can use the value of the last debounced event to determine +/// the length of the next window. +/// +/// A window is open until the first window event emits. +/// +/// The debounce [StreamTransformer] filters out items emitted by the source +/// Stream that are rapidly followed by another emitted item. +/// +/// [Interactive marble diagram](http://rxmarbles.com/#debounce) +/// +/// ### Example +/// +/// Stream.fromIterable([1, 2, 3, 4]) +/// .debounceTime(Duration(seconds: 1)) +/// .listen(print); // prints 4 +class DebounceStreamTransformer extends BackpressureStreamTransformer { + /// Constructs a [StreamTransformer] which buffers events into a [List] and + /// emits this [List] whenever the current [window] fires. + /// + /// The [window] is reset whenever the [Stream] that is being transformed + /// emits an event. + DebounceStreamTransformer(Stream Function(T event) window) + : super(WindowStrategy.everyEvent, window, + onWindowEnd: (Iterable queue) => queue.last) { + assert(window != null, 'window stream factory cannot be null'); + } +} + +/// Extends the Stream class with the ability to debounce events in various ways +extension DebounceExtensions on Stream { + /// Transforms a [Stream] so that will only emit items from the source sequence + /// if a [window] has completed, without the source sequence emitting + /// another item. + /// + /// This [window] is created after the last debounced event was emitted. + /// You can use the value of the last debounced event to determine + /// the length of the next [window]. + /// + /// A [window] is open until the first [window] event emits. + /// + /// debounce filters out items emitted by the source [Stream] + /// that are rapidly followed by another emitted item. + /// + /// [Interactive marble diagram](http://rxmarbles.com/#debounce) + /// + /// ### Example + /// + /// Stream.fromIterable([1, 2, 3, 4]) + /// .debounce((_) => TimerStream(true, Duration(seconds: 1))) + /// .listen(print); // prints 4 + Stream debounce(Stream Function(T event) window) => + transform(DebounceStreamTransformer(window)); + + /// Transforms a [Stream] so that will only emit items from the source + /// sequence whenever the time span defined by [duration] passes, without the + /// source sequence emitting another item. + /// + /// This time span start after the last debounced event was emitted. + /// + /// debounceTime filters out items emitted by the source [Stream] that are + /// rapidly followed by another emitted item. + /// + /// [Interactive marble diagram](http://rxmarbles.com/#debounceTime) + /// + /// ### Example + /// + /// Stream.fromIterable([1, 2, 3, 4]) + /// .debounceTime(Duration(seconds: 1)) + /// .listen(print); // prints 4 + Stream debounceTime(Duration duration) => transform( + DebounceStreamTransformer((_) => TimerStream(true, duration))); +} diff --git a/lib/app/utils/stream_ext/forwarding_stream.dart b/lib/app/utils/stream_ext/forwarding_stream.dart new file mode 100755 index 0000000..6c46812 --- /dev/null +++ b/lib/app/utils/stream_ext/forwarding_stream.dart @@ -0,0 +1,82 @@ +import 'dart:async'; + +import 'backpressure.dart'; + +// import 'package:rxdart/src/utils/forwarding_sink.dart'; + +// import 'forwarding_sink.dart'; + +/// @private +/// Helper method which forwards the events from an incoming [Stream] +/// to a new [StreamController]. +/// It captures events such as onListen, onPause, onResume and onCancel, +/// which can be used in pair with a [ForwardingSink] +Stream forwardStream( + Stream stream, + ForwardingSink connectedSink, +) { + ArgumentError.checkNotNull(stream, 'stream'); + ArgumentError.checkNotNull(connectedSink, 'connectedSink'); + + StreamController controller; + StreamSubscription subscription; + + void runCatching(void Function() block) { + try { + block(); + } catch (e, s) { + connectedSink.addError(controller, e, s); + } + } + + final onListen = () { + runCatching(() => connectedSink.onListen(controller)); + + subscription = stream.listen( + (data) => runCatching(() => connectedSink.add(controller, data)), + onError: (dynamic e, StackTrace st) => + runCatching(() => connectedSink.addError(controller, e, st)), + onDone: () => runCatching(() => connectedSink.close(controller)), + ); + }; + + final onCancel = () { + final onCancelSelfFuture = subscription.cancel(); + final onCancelConnectedFuture = connectedSink.onCancel(controller); + final futures = [ + if (onCancelSelfFuture is Future) onCancelSelfFuture, + if (onCancelConnectedFuture is Future) onCancelConnectedFuture, + ]; + return Future.wait(futures); + }; + + final onPause = ([Future resumeSignal]) { + subscription.pause(resumeSignal); + runCatching(() => connectedSink.onPause(controller, resumeSignal)); + }; + + final onResume = () { + subscription.resume(); + runCatching(() => connectedSink.onResume(controller)); + }; + + // Create a new Controller, which will serve as a trampoline for + // forwarded events. + if (stream.isBroadcast) { + controller = StreamController.broadcast( + onListen: onListen, + onCancel: onCancel, + sync: true, + ); + } else { + controller = StreamController( + onListen: onListen, + onPause: onPause, + onResume: onResume, + onCancel: onCancel, + sync: true, + ); + } + + return controller.stream; +} diff --git a/lib/app/utils/stream_ext/timer_stream.dart b/lib/app/utils/stream_ext/timer_stream.dart new file mode 100644 index 0000000..be2ea0b --- /dev/null +++ b/lib/app/utils/stream_ext/timer_stream.dart @@ -0,0 +1,56 @@ +import 'dart:async'; + +/// Emits the given value after a specified amount of time. +/// +/// ### Example +/// +/// TimerStream('hi', Duration(minutes: 1)) +/// .listen((i) => print(i)); // print 'hi' after 1 minute +class TimerStream extends Stream { + final StreamController _controller; + + /// Constructs a [Stream] which emits [value] after the specified [Duration]. + TimerStream(T value, Duration duration) + : _controller = _buildController(value, duration); + + @override + StreamSubscription listen(void Function(T event) onData, + {Function onError, void Function() onDone, bool cancelOnError}) { + return _controller.stream.listen( + onData, + onError: onError, + onDone: onDone, + cancelOnError: cancelOnError, + ); + } + + static StreamController _buildController(T value, Duration duration) { + if (duration == null) { + throw ArgumentError('duration cannot be null'); + } + + StreamSubscription subscription; + StreamController controller; + + controller = StreamController( + sync: true, + onListen: () { + subscription = + Stream.fromFuture(Future.delayed(duration, () => value)).listen( + controller.add, + onError: controller.addError, + onDone: () { + if (!controller.isClosed) { + controller.close(); + } + }, + ); + }, + onPause: ([Future resumeSignal]) => + subscription.pause(resumeSignal), + onResume: () => subscription.resume(), + onCancel: () => subscription.cancel(), + ); + return controller; + } +} diff --git a/lib/blocs/category/category_bloc.dart b/lib/blocs/category/category_bloc.dart index 6b0d117..021f664 100644 --- a/lib/blocs/category/category_bloc.dart +++ b/lib/blocs/category/category_bloc.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/style/unit_color.dart'; -import 'package:flutter_unit_mac/app/utils/color_utils.dart'; -import 'package:flutter_unit_mac/repositories/itf/category_repository.dart'; -import 'package:flutter_unit_mac/storage/po/category_po.dart'; +import 'package:flutter_unit/app/res/style/unit_color.dart'; +import 'package:flutter_unit/app/utils/color_utils.dart'; +import 'package:flutter_unit/repositories/itf/category_repository.dart'; +import 'package:flutter_unit/storage/po/category_po.dart'; import 'category_event.dart'; import 'category_state.dart'; @@ -15,10 +15,8 @@ import 'category_state.dart'; class CategoryBloc extends Bloc { final CategoryRepository repository; - CategoryBloc({@required this.repository}); + CategoryBloc({@required this.repository}) : super(CategoryEmptyState()); - @override - CategoryState get initialState => CategoryEmptyState(); //初始状态 @override Stream mapEventToState(CategoryEvent event) async* { diff --git a/lib/blocs/category/category_state.dart b/lib/blocs/category/category_state.dart index 5d38536..4f7ca4c 100644 --- a/lib/blocs/category/category_state.dart +++ b/lib/blocs/category/category_state.dart @@ -1,6 +1,6 @@ import 'package:equatable/equatable.dart'; -import 'package:flutter_unit_mac/model/category_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/category_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com diff --git a/lib/blocs/category_widget/category_widget_bloc.dart b/lib/blocs/category_widget/category_widget_bloc.dart index dc53004..3c53d26 100644 --- a/lib/blocs/category_widget/category_widget_bloc.dart +++ b/lib/blocs/category_widget/category_widget_bloc.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category/category_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category/category_event.dart'; -import 'package:flutter_unit_mac/repositories/itf/category_repository.dart'; +import 'package:flutter_unit/blocs/category/category_bloc.dart'; +import 'package:flutter_unit/blocs/category/category_event.dart'; +import 'package:flutter_unit/repositories/itf/category_repository.dart'; import 'category_widget_event.dart'; import 'category_widget_state.dart'; @@ -15,12 +15,10 @@ class CategoryWidgetBloc extends Bloc { final CategoryBloc categoryBloc; - CategoryWidgetBloc({@required this.categoryBloc}); + CategoryWidgetBloc({@required this.categoryBloc}) : super(CategoryWidgetEmptyState()); CategoryRepository get repository => categoryBloc.repository; - @override - CategoryWidgetState get initialState => CategoryWidgetEmptyState(); //初始状态 @override Stream mapEventToState( diff --git a/lib/blocs/category_widget/category_widget_event.dart b/lib/blocs/category_widget/category_widget_event.dart index 9233ef8..c0843af 100644 --- a/lib/blocs/category_widget/category_widget_event.dart +++ b/lib/blocs/category_widget/category_widget_event.dart @@ -1,6 +1,4 @@ import 'package:equatable/equatable.dart'; -import 'package:flutter/material.dart'; - /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com /// 说明: diff --git a/lib/blocs/category_widget/category_widget_state.dart b/lib/blocs/category_widget/category_widget_state.dart index 29dc61c..6b2677b 100644 --- a/lib/blocs/category_widget/category_widget_state.dart +++ b/lib/blocs/category_widget/category_widget_state.dart @@ -1,6 +1,6 @@ import 'package:equatable/equatable.dart'; -import 'package:flutter_unit_mac/model/category_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/category_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com diff --git a/lib/blocs/collect/collect_bloc.dart b/lib/blocs/collect/collect_bloc.dart index 73dcb50..928a4ea 100644 --- a/lib/blocs/collect/collect_bloc.dart +++ b/lib/blocs/collect/collect_bloc.dart @@ -1,8 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; -import 'package:flutter_unit_mac/repositories/itf/widget_repository.dart'; +import 'package:flutter_unit/storage/dao/widget_dao.dart'; +import 'package:flutter_unit/repositories/itf/widget_repository.dart'; import 'collect_event.dart'; import 'collect_state.dart'; @@ -14,10 +14,8 @@ import 'collect_state.dart'; class CollectBloc extends Bloc { final WidgetRepository repository; - CollectBloc({@required this.repository}); + CollectBloc({@required this.repository}) : super(CollectState(widgets: [])); - @override - CollectState get initialState => CollectState(widgets: []); //初始状态 @override Stream mapEventToState( diff --git a/lib/blocs/collect/collect_event.dart b/lib/blocs/collect/collect_event.dart index 0fda95a..f351d4d 100644 --- a/lib/blocs/collect/collect_event.dart +++ b/lib/blocs/collect/collect_event.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-04-09 /// contact me by email 1981462002@qq.com diff --git a/lib/blocs/collect/collect_state.dart b/lib/blocs/collect/collect_state.dart index 45e6194..4c699fd 100644 --- a/lib/blocs/collect/collect_state.dart +++ b/lib/blocs/collect/collect_state.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-04-09 /// contact me by email 1981462002@qq.com diff --git a/lib/blocs/detail/detail_bloc.dart b/lib/blocs/detail/detail_bloc.dart index 222db29..1cdb0a8 100644 --- a/lib/blocs/detail/detail_bloc.dart +++ b/lib/blocs/detail/detail_bloc.dart @@ -1,7 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/repositories/itf/widget_repository.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/repositories/itf/widget_repository.dart'; import 'detail_event.dart'; import 'detail_state.dart'; @@ -13,10 +13,8 @@ import 'detail_state.dart'; class DetailBloc extends Bloc { final WidgetRepository repository; - DetailBloc({@required this.repository}); + DetailBloc({@required this.repository}) : super( DetailLoading()); - @override - DetailState get initialState => DetailLoading(); @override Stream mapEventToState(DetailEvent event) async* { diff --git a/lib/blocs/detail/detail_event.dart b/lib/blocs/detail/detail_event.dart index a5a75c9..9229b87 100644 --- a/lib/blocs/detail/detail_event.dart +++ b/lib/blocs/detail/detail_event.dart @@ -1,5 +1,5 @@ import 'package:equatable/equatable.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-03-03 diff --git a/lib/blocs/detail/detail_state.dart b/lib/blocs/detail/detail_state.dart index f66c351..5681c31 100644 --- a/lib/blocs/detail/detail_state.dart +++ b/lib/blocs/detail/detail_state.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/model/node_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/node_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-03-03 diff --git a/lib/blocs/global/global_bloc.dart b/lib/blocs/global/global_bloc.dart index f4a3121..1bddbce 100644 --- a/lib/blocs/global/global_bloc.dart +++ b/lib/blocs/global/global_bloc.dart @@ -1,7 +1,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/storage/app_storage.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/res/sp.dart'; +import 'package:flutter_unit/storage/app_storage.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/res/sp.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'global_event.dart'; @@ -12,13 +12,11 @@ import 'global_state.dart'; /// 说明: 全局信息的bloc class GlobalBloc extends Bloc { - @override - GlobalState get initialState => GlobalState(); final AppStorage storage ; - GlobalBloc(this.storage); + GlobalBloc(this.storage) : super(GlobalState()); Future get sp => storage.sp; diff --git a/lib/blocs/home/home_bloc.dart b/lib/blocs/home/home_bloc.dart index 053d457..93ac076 100644 --- a/lib/blocs/home/home_bloc.dart +++ b/lib/blocs/home/home_bloc.dart @@ -3,9 +3,9 @@ import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/enums.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/repositories/itf/widget_repository.dart'; +import 'package:flutter_unit/app/enums.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/repositories/itf/widget_repository.dart'; import 'home_event.dart'; import 'home_state.dart'; @@ -17,11 +17,8 @@ import 'home_state.dart'; class HomeBloc extends Bloc { final WidgetRepository repository; - HomeBloc({@required this.repository}); - - @override - HomeState get initialState => WidgetsLoading( - homeColor: Color(Cons.tabColors[0])); + HomeBloc({@required this.repository}) : super(WidgetsLoading( + homeColor: Color(Cons.tabColors[0]))); @override Stream mapEventToState(HomeEvent event) async* { diff --git a/lib/blocs/home/home_event.dart b/lib/blocs/home/home_event.dart index 3dbc1bb..690565b 100644 --- a/lib/blocs/home/home_event.dart +++ b/lib/blocs/home/home_event.dart @@ -1,8 +1,8 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/enums.dart'; -import 'package:flutter_unit_mac/storage/po/widget_po.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/app/enums.dart'; +import 'package:flutter_unit/storage/po/widget_po.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-03-03 diff --git a/lib/blocs/home/home_state.dart b/lib/blocs/home/home_state.dart index c14007c..45edb67 100644 --- a/lib/blocs/home/home_state.dart +++ b/lib/blocs/home/home_state.dart @@ -1,6 +1,6 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-03-03 /// contact me by email 1981462002@qq.com diff --git a/lib/blocs/search/search_bloc.dart b/lib/blocs/search/search_bloc.dart index aa5ef6a..a068a87 100644 --- a/lib/blocs/search/search_bloc.dart +++ b/lib/blocs/search/search_bloc.dart @@ -1,28 +1,25 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/repositories/itf/widget_repository.dart'; +import 'package:flutter_unit/repositories/itf/widget_repository.dart'; import 'search_event.dart'; import 'search_state.dart'; import 'package:bloc/bloc.dart'; -import 'package:rxdart/rxdart.dart'; +import 'package:flutter_unit/app/utils/stream_ext/ext.dart'; class SearchBloc extends Bloc { final WidgetRepository repository; - SearchBloc({@required this.repository}); - @override - SearchState get initialState => SearchStateNoSearch();//初始状态 + SearchBloc({@required this.repository}) : super( SearchStateNoSearch()); @override - Stream transformEvents( - Stream events, - Stream Function(SearchEvent event) next,) { + Stream> transformEvents( + Stream events, TransitionFunction transitionFn) { return super.transformEvents(events - .debounceTime(Duration(milliseconds: 500),), - next, + .debounceTime(const Duration(milliseconds: 500),), + transitionFn, ); } diff --git a/lib/blocs/search/search_event.dart b/lib/blocs/search/search_event.dart index 1dee7db..9738098 100644 --- a/lib/blocs/search/search_event.dart +++ b/lib/blocs/search/search_event.dart @@ -1,6 +1,6 @@ -import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; +import 'package:flutter_unit/storage/dao/widget_dao.dart'; abstract class SearchEvent{//事件基 const SearchEvent(); diff --git a/lib/blocs/search/search_state.dart b/lib/blocs/search/search_state.dart index 06c735b..60254a3 100644 --- a/lib/blocs/search/search_state.dart +++ b/lib/blocs/search/search_state.dart @@ -1,6 +1,6 @@ -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; abstract class SearchState {//基态 const SearchState(); diff --git a/lib/main.dart b/lib/main.dart index 39ad8b2..6104b80 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/views/app/bloc_wrapper.dart'; +import 'package:flutter_unit/views/app/bloc_wrapper.dart'; import 'views/app/flutter_app.dart'; void main() { diff --git a/lib/model/category_model.dart b/lib/model/category_model.dart index 7634e9c..f0d79c9 100644 --- a/lib/model/category_model.dart +++ b/lib/model/category_model.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/utils/color_utils.dart'; -import 'package:flutter_unit_mac/storage/po/category_po.dart'; +import 'package:flutter_unit/app/utils/color_utils.dart'; +import 'package:flutter_unit/storage/po/category_po.dart'; import 'package:intl/intl.dart'; /// create by 张风捷特烈 on 2020-04-21 diff --git a/lib/model/widget_model.dart b/lib/model/widget_model.dart index bcf5489..16c36a0 100644 --- a/lib/model/widget_model.dart +++ b/lib/model/widget_model.dart @@ -1,9 +1,9 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/cupertino.dart'; -import 'package:flutter_unit_mac/app/convert.dart'; -import 'package:flutter_unit_mac/app/enums.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/storage/po/widget_po.dart'; +import 'package:flutter_unit/app/convert.dart'; +import 'package:flutter_unit/app/enums.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/storage/po/widget_po.dart'; /// create by 张风捷特烈 on 2020-03-04 /// contact me by email 1981462002@qq.com diff --git a/lib/repositories/impl/catagory_db_repository.dart b/lib/repositories/impl/catagory_db_repository.dart index 82ff1cf..14114f5 100644 --- a/lib/repositories/impl/catagory_db_repository.dart +++ b/lib/repositories/impl/catagory_db_repository.dart @@ -1,10 +1,10 @@ -import 'package:flutter_unit_mac/model/category_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/repositories/itf/category_repository.dart'; -import 'package:flutter_unit_mac/storage/app_storage.dart'; -import 'package:flutter_unit_mac/storage/dao/category_dao.dart'; -import 'package:flutter_unit_mac/storage/po/category_po.dart'; -import 'package:flutter_unit_mac/storage/po/widget_po.dart'; +import 'package:flutter_unit/model/category_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/repositories/itf/category_repository.dart'; +import 'package:flutter_unit/storage/app_storage.dart'; +import 'package:flutter_unit/storage/dao/category_dao.dart'; +import 'package:flutter_unit/storage/po/category_po.dart'; +import 'package:flutter_unit/storage/po/widget_po.dart'; /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com diff --git a/lib/repositories/impl/widget_db_repository.dart b/lib/repositories/impl/widget_db_repository.dart index 027cf59..2ea218b 100644 --- a/lib/repositories/impl/widget_db_repository.dart +++ b/lib/repositories/impl/widget_db_repository.dart @@ -1,13 +1,13 @@ -import 'package:flutter_unit_mac/storage/app_storage.dart'; -import 'package:flutter_unit_mac/app/enums.dart'; -import 'package:flutter_unit_mac/storage/dao/node_dao.dart'; +import 'package:flutter_unit/storage/app_storage.dart'; +import 'package:flutter_unit/app/enums.dart'; +import 'package:flutter_unit/storage/dao/node_dao.dart'; -import 'package:flutter_unit_mac/storage/po/widget_po.dart'; -import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; -import 'package:flutter_unit_mac/model/node_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/repositories/itf/widget_repository.dart'; +import 'package:flutter_unit/storage/po/widget_po.dart'; +import 'package:flutter_unit/storage/dao/widget_dao.dart'; +import 'package:flutter_unit/model/node_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/repositories/itf/widget_repository.dart'; /// create by 张风捷特烈 on 2020-03-03 /// contact me by email 1981462002@qq.com diff --git a/lib/repositories/itf/category_repository.dart b/lib/repositories/itf/category_repository.dart index 526ed8b..fb30e56 100644 --- a/lib/repositories/itf/category_repository.dart +++ b/lib/repositories/itf/category_repository.dart @@ -1,6 +1,6 @@ -import 'package:flutter_unit_mac/model/category_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/storage/po/category_po.dart'; +import 'package:flutter_unit/model/category_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/storage/po/category_po.dart'; /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com diff --git a/lib/repositories/itf/widget_repository.dart b/lib/repositories/itf/widget_repository.dart index 73e0c28..f93fb05 100644 --- a/lib/repositories/itf/widget_repository.dart +++ b/lib/repositories/itf/widget_repository.dart @@ -1,9 +1,9 @@ -import 'package:flutter_unit_mac/app/enums.dart'; -import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; -import 'package:flutter_unit_mac/model/node_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/app/enums.dart'; +import 'package:flutter_unit/storage/dao/widget_dao.dart'; +import 'package:flutter_unit/model/node_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; /// create by 张风捷特烈 on 2020-03-03 /// contact me by email 1981462002@qq.com diff --git a/lib/storage/app_storage.dart b/lib/storage/app_storage.dart index c4fc7aa..fbc5f69 100644 --- a/lib/storage/app_storage.dart +++ b/lib/storage/app_storage.dart @@ -3,9 +3,9 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/services.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/res/sp.dart'; -import 'package:flutter_unit_mac/blocs/global/global_state.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/res/sp.dart'; +import 'package:flutter_unit/blocs/global/global_state.dart'; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:path/path.dart' as path; diff --git a/lib/storage/dao/category_dao.dart b/lib/storage/dao/category_dao.dart index 2900616..e8e4806 100644 --- a/lib/storage/dao/category_dao.dart +++ b/lib/storage/dao/category_dao.dart @@ -85,7 +85,9 @@ class CategoryDao { "WHERE name = ?"; var rawData = await db.rawQuery(sql, [name]); if (rawData.length > 0) { - return rawData[0]['count'] > 0; + if(rawData[0]['count'] is int){ + return ((rawData[0]['count']) as int) > 0; + } } return false; } @@ -146,7 +148,9 @@ class CategoryDao { "WHERE categoryId = ? AND widgetId = ?"; var rawData = await db.rawQuery(sql, [categoryId, widgetId]); if (rawData.length > 0) { - return rawData[0]['count'] > 0; + if(rawData[0]['count'] is int){ + return ((rawData[0]['count']) as int) > 0; + } } return false; } diff --git a/lib/storage/dao/node_dao.dart b/lib/storage/dao/node_dao.dart index 75ee095..c8e3990 100644 --- a/lib/storage/dao/node_dao.dart +++ b/lib/storage/dao/node_dao.dart @@ -1,4 +1,4 @@ -import 'package:flutter_unit_mac/storage/app_storage.dart'; +import 'package:flutter_unit/storage/app_storage.dart'; import '../po/node_po.dart'; diff --git a/lib/storage/dao/widget_dao.dart b/lib/storage/dao/widget_dao.dart index 235ccd1..4ff5e6d 100644 --- a/lib/storage/dao/widget_dao.dart +++ b/lib/storage/dao/widget_dao.dart @@ -1,5 +1,5 @@ -import 'package:flutter_unit_mac/storage/app_storage.dart'; -import 'package:flutter_unit_mac/app/enums.dart'; +import 'package:flutter_unit/storage/app_storage.dart'; +import 'package:flutter_unit/app/enums.dart'; import '../po/widget_po.dart'; diff --git a/lib/views/app/bloc_wrapper.dart b/lib/views/app/bloc_wrapper.dart index 78da5e9..93c4fa8 100644 --- a/lib/views/app/bloc_wrapper.dart +++ b/lib/views/app/bloc_wrapper.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/enums.dart'; -import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; -import 'package:flutter_unit_mac/repositories/impl/catagory_db_repository.dart'; -import 'package:flutter_unit_mac/repositories/impl/widget_db_repository.dart'; -import 'package:flutter_unit_mac/storage/app_storage.dart'; +import 'package:flutter_unit/app/enums.dart'; +import 'package:flutter_unit/blocs/bloc_exp.dart'; +import 'package:flutter_unit/repositories/impl/catagory_db_repository.dart'; +import 'package:flutter_unit/repositories/impl/widget_db_repository.dart'; +import 'package:flutter_unit/storage/app_storage.dart'; /// create by 张风捷特烈 on 2020/4/28 /// contact me by email 1981462002@qq.com diff --git a/lib/views/app/flutter_app.dart b/lib/views/app/flutter_app.dart index 2f0762c..7acdd86 100644 --- a/lib/views/app/flutter_app.dart +++ b/lib/views/app/flutter_app.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/keymap/search_key_map.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; -import 'package:flutter_unit_mac/views/app/splash/unit_splash.dart'; -import 'package:flutter_unit_mac/views/pages/home/home_page.dart'; +import 'package:flutter_unit/app/res/keymap/search_key_map.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/bloc_exp.dart'; +import 'package:flutter_unit/views/app/splash/unit_splash.dart'; +import 'package:flutter_unit/views/pages/home/home_page.dart'; /// create by 张风捷特烈 on 2020/4/28 /// contact me by email 1981462002@qq.com diff --git a/lib/views/app/navigation/unit_navigation.dart b/lib/views/app/navigation/unit_navigation.dart index 501cce4..16af341 100644 --- a/lib/views/app/navigation/unit_navigation.dart +++ b/lib/views/app/navigation/unit_navigation.dart @@ -1,21 +1,21 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/res/keymap/search_key_map.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/views/app/navigation/unit_bottom_bar.dart'; -import 'package:flutter_unit_mac/views/pages/category/collect_page.dart'; -import 'package:flutter_unit_mac/views/pages/category/home_right_drawer.dart'; -import 'package:flutter_unit_mac/views/pages/home/home_drawer.dart'; -import 'package:flutter_unit_mac/views/pages/home/home_page.dart'; -import 'package:flutter_unit_mac/views/pages/unit_todo/bug_unit_page.dart'; -import 'package:flutter_unit_mac/views/pages/unit_todo/layout_unit_page.dart'; -import 'package:flutter_unit_mac/views/pages/unit_todo/paint_unit_page.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/res/keymap/search_key_map.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/blocs/bloc_exp.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/app/navigation/unit_bottom_bar.dart'; +import 'package:flutter_unit/views/pages/category/collect_page.dart'; +import 'package:flutter_unit/views/pages/category/home_right_drawer.dart'; +import 'package:flutter_unit/views/pages/home/home_drawer.dart'; +import 'package:flutter_unit/views/pages/home/home_page.dart'; +import 'package:flutter_unit/views/pages/unit_todo/bug_unit_page.dart'; +import 'package:flutter_unit/views/pages/unit_todo/layout_unit_page.dart'; +import 'package:flutter_unit/views/pages/unit_todo/paint_unit_page.dart'; import 'package:url_launcher/url_launcher.dart'; import '../flutter_app.dart'; diff --git a/lib/views/app/splash/unit_splash.dart b/lib/views/app/splash/unit_splash.dart index d6c7b3f..ca9a24e 100644 --- a/lib/views/app/splash/unit_splash.dart +++ b/lib/views/app/splash/unit_splash.dart @@ -5,7 +5,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'unit_paint.dart'; -import 'package:flutter_unit_mac/app/router.dart'; +import 'package:flutter_unit/app/router.dart'; /// create by 张风捷特烈 on 2020-03-07 /// contact me by email 1981462002@qq.com diff --git a/lib/views/components/project/color_chooser.dart b/lib/views/components/project/color_chooser.dart index 19847d4..31e5e98 100644 --- a/lib/views/components/project/color_chooser.dart +++ b/lib/views/components/project/color_chooser.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; typedef CheckCallback = void Function(T color); diff --git a/lib/views/components/project/dialogs/delete_category_dialog.dart b/lib/views/components/project/dialogs/delete_category_dialog.dart index 01c0199..1296f23 100644 --- a/lib/views/components/project/dialogs/delete_category_dialog.dart +++ b/lib/views/components/project/dialogs/delete_category_dialog.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com diff --git a/lib/views/components/project/dialogs/dialog_about.dart b/lib/views/components/project/dialogs/dialog_about.dart index 636ee09..98b14ab 100644 --- a/lib/views/components/project/dialogs/dialog_about.dart +++ b/lib/views/components/project/dialogs/dialog_about.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; +import 'package:flutter_unit/app/res/cons.dart'; class DialogAbout extends StatelessWidget { static show(BuildContext context){ diff --git a/lib/views/components/project/widget_node_panel.dart b/lib/views/components/project/widget_node_panel.dart index f3451b4..2de5179 100644 --- a/lib/views/components/project/widget_node_panel.dart +++ b/lib/views/components/project/widget_node_panel.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/app/utils/Toast.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/app/utils/Toast.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/views/components/permanent/code/code_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/panel.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; +import 'package:flutter_unit/views/components/permanent/code/code_widget.dart'; +import 'package:flutter_unit/views/components/permanent/panel.dart'; import 'package:share/share.dart'; import 'package:toggle_rotate/toggle_rotate.dart'; diff --git a/lib/views/items/category_list_item.dart b/lib/views/items/category_list_item.dart index e71758f..4a48e40 100644 --- a/lib/views/items/category_list_item.dart +++ b/lib/views/items/category_list_item.dart @@ -1,8 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/model/category_model.dart'; +import 'package:flutter_unit/views/components/permanent/circle_text.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/model/category_model.dart'; /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com diff --git a/lib/views/items/collect_widget_list_item.dart b/lib/views/items/collect_widget_list_item.dart index 1fe53ed..b282192 100644 --- a/lib/views/items/collect_widget_list_item.dart +++ b/lib/views/items/collect_widget_list_item.dart @@ -1,12 +1,12 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_star/flutter_star.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/res/style/shape/techno_shape.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/res/style/shape/techno_shape.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/views/components/permanent/circle_text.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/model/widget_model.dart'; class CollectWidgetListItem extends StatelessWidget { final WidgetModel data; diff --git a/lib/views/items/coupon_widget_list_item.dart b/lib/views/items/coupon_widget_list_item.dart index 53293ed..43aab2c 100644 --- a/lib/views/items/coupon_widget_list_item.dart +++ b/lib/views/items/coupon_widget_list_item.dart @@ -1,14 +1,14 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_star/flutter_star.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/res/style/shape/coupon_shape_border.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_state.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/tag.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/res/style/shape/coupon_shape_border.dart'; +import 'package:flutter_unit/blocs/collect/collect_bloc.dart'; +import 'package:flutter_unit/blocs/collect/collect_state.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/views/components/permanent/circle_text.dart'; +import 'package:flutter_unit/views/components/permanent/tag.dart'; +import 'package:flutter_unit/model/widget_model.dart'; class CouponWidgetListItem extends StatelessWidget { final WidgetModel data; diff --git a/lib/views/items/home_item_support.dart b/lib/views/items/home_item_support.dart index 54ebc97..58dbd31 100644 --- a/lib/views/items/home_item_support.dart +++ b/lib/views/items/home_item_support.dart @@ -1,8 +1,8 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/enums.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/app/enums.dart'; +import 'package:flutter_unit/model/widget_model.dart'; import 'coupon_widget_list_item.dart'; import 'techno_widget_list_item.dart'; diff --git a/lib/views/items/techno_widget_list_item.dart b/lib/views/items/techno_widget_list_item.dart index dffd5d4..a00e52c 100644 --- a/lib/views/items/techno_widget_list_item.dart +++ b/lib/views/items/techno_widget_list_item.dart @@ -2,14 +2,14 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_star/flutter_star.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/res/style/shape/techno_shape.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_state.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/tag.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/res/style/shape/techno_shape.dart'; +import 'package:flutter_unit/blocs/collect/collect_bloc.dart'; +import 'package:flutter_unit/blocs/collect/collect_state.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/views/components/permanent/circle_text.dart'; +import 'package:flutter_unit/views/components/permanent/tag.dart'; +import 'package:flutter_unit/model/widget_model.dart'; class TechnoWidgetListItem extends StatelessWidget { final WidgetModel data; diff --git a/lib/views/pages/about/about_app_page.dart b/lib/views/pages/about/about_app_page.dart index d85e347..ee5beb4 100644 --- a/lib/views/pages/about/about_app_page.dart +++ b/lib/views/pages/about/about_app_page.dart @@ -4,11 +4,11 @@ import 'package:flutter/cupertino.dart'; /// 说明: import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/panel.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/panel.dart'; import 'package:url_launcher/url_launcher.dart'; class AboutAppPage extends StatelessWidget { diff --git a/lib/views/pages/about/about_me_page.dart b/lib/views/pages/about/about_me_page.dart index fa312eb..a425973 100644 --- a/lib/views/pages/about/about_me_page.dart +++ b/lib/views/pages/about/about_me_page.dart @@ -3,9 +3,9 @@ /// 说明: import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; import 'package:url_launcher/url_launcher.dart'; class AboutMePage extends StatelessWidget { diff --git a/lib/views/pages/category/category_page.dart b/lib/views/pages/category/category_page.dart index eeb41fa..c523043 100644 --- a/lib/views/pages/category/category_page.dart +++ b/lib/views/pages/category/category_page.dart @@ -1,16 +1,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/category/category_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category/category_event.dart'; -import 'package:flutter_unit_mac/blocs/category/category_state.dart'; -import 'package:flutter_unit_mac/blocs/category_widget/category_widget_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category_widget/category_widget_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/category/category_bloc.dart'; +import 'package:flutter_unit/blocs/category/category_event.dart'; +import 'package:flutter_unit/blocs/category/category_state.dart'; +import 'package:flutter_unit/blocs/category_widget/category_widget_bloc.dart'; +import 'package:flutter_unit/blocs/category_widget/category_widget_event.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/model/category_model.dart'; -import 'package:flutter_unit_mac/views/components/project/dialogs/delete_category_dialog.dart'; -import 'package:flutter_unit_mac/views/items/category_list_item.dart'; +import 'package:flutter_unit/model/category_model.dart'; +import 'package:flutter_unit/views/components/project/dialogs/delete_category_dialog.dart'; +import 'package:flutter_unit/views/items/category_list_item.dart'; import 'edit_category_panel.dart'; diff --git a/lib/views/pages/category/category_show.dart b/lib/views/pages/category/category_show.dart index e5e89c1..8960b37 100644 --- a/lib/views/pages/category/category_show.dart +++ b/lib/views/pages/category/category_show.dart @@ -2,18 +2,18 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_star/flutter_star.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/category_widget/category_widget_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category_widget/category_widget_event.dart'; -import 'package:flutter_unit_mac/blocs/category_widget/category_widget_state.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_bloc.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/model/category_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/items/techno_widget_list_item.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/category_widget/category_widget_bloc.dart'; +import 'package:flutter_unit/blocs/category_widget/category_widget_event.dart'; +import 'package:flutter_unit/blocs/category_widget/category_widget_state.dart'; +import 'package:flutter_unit/blocs/detail/detail_bloc.dart'; +import 'package:flutter_unit/blocs/detail/detail_event.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/views/components/permanent/circle_text.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/model/category_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/items/techno_widget_list_item.dart'; /// create by 张风捷特烈 on 2020-04-22 /// contact me by email 1981462002@qq.com diff --git a/lib/views/pages/category/collect_page.dart b/lib/views/pages/category/collect_page.dart index 0751e3c..6871729 100644 --- a/lib/views/pages/category/collect_page.dart +++ b/lib/views/pages/category/collect_page.dart @@ -1,11 +1,11 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/items/collect_widget_list_item.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/bloc_exp.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/items/collect_widget_list_item.dart'; import 'category_page.dart'; diff --git a/lib/views/pages/category/edit_category_panel.dart b/lib/views/pages/category/edit_category_panel.dart index 7fcb78c..dae7657 100644 --- a/lib/views/pages/category/edit_category_panel.dart +++ b/lib/views/pages/category/edit_category_panel.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/style/unit_color.dart'; -import 'package:flutter_unit_mac/app/utils/color_utils.dart'; -import 'package:flutter_unit_mac/blocs/category/category_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category/category_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/edit_panel.dart'; -import 'package:flutter_unit_mac/views/components/permanent/input_button.dart'; -import 'package:flutter_unit_mac/views/components/project/color_chooser.dart'; -import 'package:flutter_unit_mac/model/category_model.dart'; +import 'package:flutter_unit/app/res/style/unit_color.dart'; +import 'package:flutter_unit/app/utils/color_utils.dart'; +import 'package:flutter_unit/blocs/category/category_bloc.dart'; +import 'package:flutter_unit/blocs/category/category_event.dart'; +import 'package:flutter_unit/views/components/permanent/edit_panel.dart'; +import 'package:flutter_unit/views/components/permanent/input_button.dart'; +import 'package:flutter_unit/views/components/project/color_chooser.dart'; +import 'package:flutter_unit/model/category_model.dart'; /// create by 张风捷特烈 on 2020-04-23 /// contact me by email 1981462002@qq.com diff --git a/lib/views/pages/category/home_right_drawer.dart b/lib/views/pages/category/home_right_drawer.dart index ce4e9e8..2bbb396 100644 --- a/lib/views/pages/category/home_right_drawer.dart +++ b/lib/views/pages/category/home_right_drawer.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/views/common/unit_drawer_header.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; +import 'package:flutter_unit/views/common/unit_drawer_header.dart'; import 'edit_category_panel.dart'; diff --git a/lib/views/pages/detail/category_end_drawer.dart b/lib/views/pages/detail/category_end_drawer.dart index c4e0ff2..9336fcf 100644 --- a/lib/views/pages/detail/category_end_drawer.dart +++ b/lib/views/pages/detail/category_end_drawer.dart @@ -1,15 +1,15 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category/category_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category/category_state.dart'; -import 'package:flutter_unit_mac/blocs/category_widget/category_widget_bloc.dart'; -import 'package:flutter_unit_mac/blocs/category_widget/category_widget_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/views/components/permanent/panel.dart'; -import 'package:flutter_unit_mac/model/category_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/repositories/itf/category_repository.dart'; -import 'package:flutter_unit_mac/views/common/unit_drawer_header.dart'; +import 'package:flutter_unit/blocs/category/category_bloc.dart'; +import 'package:flutter_unit/blocs/category/category_state.dart'; +import 'package:flutter_unit/blocs/category_widget/category_widget_bloc.dart'; +import 'package:flutter_unit/blocs/category_widget/category_widget_event.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; +import 'package:flutter_unit/views/components/permanent/panel.dart'; +import 'package:flutter_unit/model/category_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/repositories/itf/category_repository.dart'; +import 'package:flutter_unit/views/common/unit_drawer_header.dart'; /// create by 张风捷特烈 on 2020-04-22 diff --git a/lib/views/pages/detail/widget_detail_page.dart b/lib/views/pages/detail/widget_detail_page.dart index 125edbe..624e6d7 100644 --- a/lib/views/pages/detail/widget_detail_page.dart +++ b/lib/views/pages/detail/widget_detail_page.dart @@ -1,24 +1,24 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_star/flutter_star.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/app/utils/Toast.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_event.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_state.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_bloc.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_event.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_state.dart'; -import 'package:flutter_unit_mac/blocs/global/global_bloc.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/panel.dart'; -import 'package:flutter_unit_mac/views/components/project/widget_node_panel.dart'; -import 'package:flutter_unit_mac/model/node_model.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/pages/detail/category_end_drawer.dart'; -import 'package:flutter_unit_mac/views/widgets/widgets_map.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/app/utils/Toast.dart'; +import 'package:flutter_unit/blocs/collect/collect_bloc.dart'; +import 'package:flutter_unit/blocs/collect/collect_event.dart'; +import 'package:flutter_unit/blocs/collect/collect_state.dart'; +import 'package:flutter_unit/blocs/detail/detail_bloc.dart'; +import 'package:flutter_unit/blocs/detail/detail_event.dart'; +import 'package:flutter_unit/blocs/detail/detail_state.dart'; +import 'package:flutter_unit/blocs/global/global_bloc.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/panel.dart'; +import 'package:flutter_unit/views/components/project/widget_node_panel.dart'; +import 'package:flutter_unit/model/node_model.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/pages/detail/category_end_drawer.dart'; +import 'package:flutter_unit/views/widgets/widgets_map.dart'; class WidgetDetailPage extends StatefulWidget { final WidgetModel model; diff --git a/lib/views/pages/home/home_drawer.dart b/lib/views/pages/home/home_drawer.dart index eb7e97e..f91c109 100644 --- a/lib/views/pages/home/home_drawer.dart +++ b/lib/views/pages/home/home_drawer.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/views/components/flutter/no_div_expansion_tile.dart'; -import 'package:flutter_unit_mac/views/common/unit_drawer_header.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/views/components/flutter/no_div_expansion_tile.dart'; +import 'package:flutter_unit/views/common/unit_drawer_header.dart'; /// create by 张风捷特烈 on 2020-03-26 /// contact me by email 1981462002@qq.com diff --git a/lib/views/pages/home/home_page.dart b/lib/views/pages/home/home_page.dart index d6cd0be..e3b568a 100644 --- a/lib/views/pages/home/home_page.dart +++ b/lib/views/pages/home/home_page.dart @@ -4,15 +4,15 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/convert.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/common/empty_page.dart'; -import 'package:flutter_unit_mac/views/items/home_item_support.dart'; -import 'package:flutter_unit_mac/views/pages/home/toly_app_bar.dart'; +import 'package:flutter_unit/app/convert.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/bloc_exp.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/common/empty_page.dart'; +import 'package:flutter_unit/views/items/home_item_support.dart'; +import 'package:flutter_unit/views/pages/home/toly_app_bar.dart'; import 'background.dart'; @@ -91,7 +91,7 @@ class _HomePageState extends State { WidgetModel model, ) => BlocBuilder( - condition: (p, c) => (p.itemStyleIndex != c.itemStyleIndex), + buildWhen: (p, c) => (p.itemStyleIndex != c.itemStyleIndex), builder: (_, state) { return FeedbackWidget( diff --git a/lib/views/pages/home/toly_app_bar.dart b/lib/views/pages/home/toly_app_bar.dart index 697d857..d92264d 100644 --- a/lib/views/pages/home/toly_app_bar.dart +++ b/lib/views/pages/home/toly_app_bar.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; class TolyAppBar extends StatefulWidget implements PreferredSizeWidget { final Function(int, Color) onItemClick; diff --git a/lib/views/pages/search/app_search_bar.dart b/lib/views/pages/search/app_search_bar.dart index 0096d43..a97af61 100644 --- a/lib/views/pages/search/app_search_bar.dart +++ b/lib/views/pages/search/app_search_bar.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/blocs/search/search_bloc.dart'; -import 'package:flutter_unit_mac/blocs/search/search_event.dart'; -import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; +import 'package:flutter_unit/blocs/search/search_bloc.dart'; +import 'package:flutter_unit/blocs/search/search_event.dart'; +import 'package:flutter_unit/storage/dao/widget_dao.dart'; class AppSearchBar extends StatefulWidget { diff --git a/lib/views/pages/search/serach_page.dart b/lib/views/pages/search/serach_page.dart index 3f377fa..5fd4ddb 100644 --- a/lib/views/pages/search/serach_page.dart +++ b/lib/views/pages/search/serach_page.dart @@ -1,17 +1,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/blocs/bloc_exp.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/items/techno_widget_list_item.dart'; -import 'package:flutter_unit_mac/views/pages/search/app_search_bar.dart'; -import 'package:flutter_unit_mac/views/pages/search/error_page.dart'; -import 'package:flutter_unit_mac/views/common/loading_page.dart'; -import 'package:flutter_unit_mac/views/pages/search/not_search_page.dart'; -import 'package:flutter_unit_mac/views/pages/search/start_filter.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/blocs/bloc_exp.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; +import 'package:flutter_unit/storage/dao/widget_dao.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/items/techno_widget_list_item.dart'; +import 'package:flutter_unit/views/pages/search/app_search_bar.dart'; +import 'package:flutter_unit/views/pages/search/error_page.dart'; +import 'package:flutter_unit/views/common/loading_page.dart'; +import 'package:flutter_unit/views/pages/search/not_search_page.dart'; +import 'package:flutter_unit/views/pages/search/start_filter.dart'; import 'empty_page.dart'; diff --git a/lib/views/pages/search/start_filter.dart b/lib/views/pages/search/start_filter.dart index 04182f5..a2537d7 100644 --- a/lib/views/pages/search/start_filter.dart +++ b/lib/views/pages/search/start_filter.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/blocs/search/search_bloc.dart'; -import 'package:flutter_unit_mac/blocs/search/search_event.dart'; -import 'package:flutter_unit_mac/storage/dao/widget_dao.dart'; +import 'package:flutter_unit/blocs/search/search_bloc.dart'; +import 'package:flutter_unit/blocs/search/search_event.dart'; +import 'package:flutter_unit/storage/dao/widget_dao.dart'; /// create by 张风捷特烈 on 2020-04-07 /// contact me by email 1981462002@qq.com diff --git a/lib/views/pages/setting/code_style_setting.dart b/lib/views/pages/setting/code_style_setting.dart index 8198690..a394798 100644 --- a/lib/views/pages/setting/code_style_setting.dart +++ b/lib/views/pages/setting/code_style_setting.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/blocs/global/global_bloc.dart'; -import 'package:flutter_unit_mac/blocs/global/global_event.dart'; -import 'package:flutter_unit_mac/blocs/global/global_state.dart'; -import 'package:flutter_unit_mac/views/components/permanent/code/code_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/code/highlighter_style.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/blocs/global/global_bloc.dart'; +import 'package:flutter_unit/blocs/global/global_event.dart'; +import 'package:flutter_unit/blocs/global/global_state.dart'; +import 'package:flutter_unit/views/components/permanent/code/code_widget.dart'; +import 'package:flutter_unit/views/components/permanent/code/highlighter_style.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; /// create by 张风捷特烈 on 2020-04-10 /// contact me by email 1981462002@qq.com diff --git a/lib/views/pages/setting/font_setting.dart b/lib/views/pages/setting/font_setting.dart index 89cd28e..4f769a4 100644 --- a/lib/views/pages/setting/font_setting.dart +++ b/lib/views/pages/setting/font_setting.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/blocs/global/global_bloc.dart'; -import 'package:flutter_unit_mac/blocs/global/global_event.dart'; -import 'package:flutter_unit_mac/blocs/global/global_state.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/blocs/global/global_bloc.dart'; +import 'package:flutter_unit/blocs/global/global_event.dart'; +import 'package:flutter_unit/blocs/global/global_state.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; /// create by 张风捷特烈 on 2020-04-10 /// contact me by email 1981462002@qq.com diff --git a/lib/views/pages/setting/item_style_setting.dart b/lib/views/pages/setting/item_style_setting.dart index d944608..2566647 100644 --- a/lib/views/pages/setting/item_style_setting.dart +++ b/lib/views/pages/setting/item_style_setting.dart @@ -2,12 +2,12 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/blocs/global/global_bloc.dart'; -import 'package:flutter_unit_mac/blocs/global/global_event.dart'; -import 'package:flutter_unit_mac/blocs/global/global_state.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; -import 'package:flutter_unit_mac/views/items/home_item_support.dart'; +import 'package:flutter_unit/blocs/global/global_bloc.dart'; +import 'package:flutter_unit/blocs/global/global_event.dart'; +import 'package:flutter_unit/blocs/global/global_state.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; +import 'package:flutter_unit/views/items/home_item_support.dart'; /// create by 张风捷特烈 on 2020-04-10 diff --git a/lib/views/pages/setting/setting_page.dart b/lib/views/pages/setting/setting_page.dart index 6573e55..35172d5 100644 --- a/lib/views/pages/setting/setting_page.dart +++ b/lib/views/pages/setting/setting_page.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/app/res/toly_icon.dart'; -import 'package:flutter_unit_mac/blocs/global/global_bloc.dart'; -import 'package:flutter_unit_mac/blocs/global/global_event.dart'; -import 'package:flutter_unit_mac/blocs/global/global_state.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/app/res/toly_icon.dart'; +import 'package:flutter_unit/blocs/global/global_bloc.dart'; +import 'package:flutter_unit/blocs/global/global_event.dart'; +import 'package:flutter_unit/blocs/global/global_state.dart'; class SettingPage extends StatelessWidget { diff --git a/lib/views/pages/setting/theme_color_setting.dart b/lib/views/pages/setting/theme_color_setting.dart index cfbd69b..c2b9bd3 100644 --- a/lib/views/pages/setting/theme_color_setting.dart +++ b/lib/views/pages/setting/theme_color_setting.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/res/cons.dart'; -import 'package:flutter_unit_mac/blocs/global/global_bloc.dart'; -import 'package:flutter_unit_mac/blocs/global/global_event.dart'; -import 'package:flutter_unit_mac/blocs/global/global_state.dart'; -import 'package:flutter_unit_mac/views/components/permanent/feedback_widget.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle.dart'; +import 'package:flutter_unit/app/res/cons.dart'; +import 'package:flutter_unit/blocs/global/global_bloc.dart'; +import 'package:flutter_unit/blocs/global/global_event.dart'; +import 'package:flutter_unit/blocs/global/global_state.dart'; +import 'package:flutter_unit/views/components/permanent/feedback_widget.dart'; +import 'package:flutter_unit/views/components/permanent/circle.dart'; /// create by 张风捷特烈 on 2020-04-10 /// contact me by email 1981462002@qq.com diff --git a/lib/views/pages/unit_todo/attr_unit_page.dart b/lib/views/pages/unit_todo/attr_unit_page.dart index 5584e96..e47f339 100644 --- a/lib/views/pages/unit_todo/attr_unit_page.dart +++ b/lib/views/pages/unit_todo/attr_unit_page.dart @@ -1,16 +1,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_event.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_state.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_bloc.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/animated_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/items/collect_widget_list_item.dart'; -import 'package:flutter_unit_mac/views/items/techno_widget_list_item.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/collect/collect_bloc.dart'; +import 'package:flutter_unit/blocs/collect/collect_event.dart'; +import 'package:flutter_unit/blocs/collect/collect_state.dart'; +import 'package:flutter_unit/blocs/detail/detail_bloc.dart'; +import 'package:flutter_unit/blocs/detail/detail_event.dart'; +import 'package:flutter_unit/views/components/permanent/animated_text.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/items/collect_widget_list_item.dart'; +import 'package:flutter_unit/views/items/techno_widget_list_item.dart'; import '../../common/empty_page.dart'; diff --git a/lib/views/pages/unit_todo/bug_unit_page.dart b/lib/views/pages/unit_todo/bug_unit_page.dart index 36a88ea..b50cd78 100644 --- a/lib/views/pages/unit_todo/bug_unit_page.dart +++ b/lib/views/pages/unit_todo/bug_unit_page.dart @@ -2,17 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_event.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_state.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_bloc.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/animated_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/items/collect_widget_list_item.dart'; -import 'package:flutter_unit_mac/views/items/techno_widget_list_item.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/collect/collect_bloc.dart'; +import 'package:flutter_unit/blocs/collect/collect_event.dart'; +import 'package:flutter_unit/blocs/collect/collect_state.dart'; +import 'package:flutter_unit/blocs/detail/detail_bloc.dart'; +import 'package:flutter_unit/blocs/detail/detail_event.dart'; +import 'package:flutter_unit/views/components/permanent/animated_text.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/items/collect_widget_list_item.dart'; +import 'package:flutter_unit/views/items/techno_widget_list_item.dart'; import '../../common/empty_page.dart'; diff --git a/lib/views/pages/unit_todo/layout_unit_page.dart b/lib/views/pages/unit_todo/layout_unit_page.dart index 319c2d7..c1581c0 100644 --- a/lib/views/pages/unit_todo/layout_unit_page.dart +++ b/lib/views/pages/unit_todo/layout_unit_page.dart @@ -1,20 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_event.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_state.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_bloc.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/animated_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/items/collect_widget_list_item.dart'; -import 'package:flutter_unit_mac/views/items/techno_widget_list_item.dart'; - -import '../../common/empty_page.dart'; +import 'package:flutter_unit/views/components/permanent/animated_text.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; class LayoutUnitPage extends StatelessWidget { final info = '【Flutter布局集录】是Unit项目计划的第二阶段的功能之一。' diff --git a/lib/views/pages/unit_todo/paint_unit_page.dart b/lib/views/pages/unit_todo/paint_unit_page.dart index e0d8e20..b3f3a43 100644 --- a/lib/views/pages/unit_todo/paint_unit_page.dart +++ b/lib/views/pages/unit_todo/paint_unit_page.dart @@ -2,17 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_unit_mac/app/router.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_bloc.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_event.dart'; -import 'package:flutter_unit_mac/blocs/collect/collect_state.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_bloc.dart'; -import 'package:flutter_unit_mac/blocs/detail/detail_event.dart'; -import 'package:flutter_unit_mac/views/components/permanent/animated_text.dart'; -import 'package:flutter_unit_mac/views/components/permanent/circle_image.dart'; -import 'package:flutter_unit_mac/model/widget_model.dart'; -import 'package:flutter_unit_mac/views/items/collect_widget_list_item.dart'; -import 'package:flutter_unit_mac/views/items/techno_widget_list_item.dart'; +import 'package:flutter_unit/app/router.dart'; +import 'package:flutter_unit/blocs/collect/collect_bloc.dart'; +import 'package:flutter_unit/blocs/collect/collect_event.dart'; +import 'package:flutter_unit/blocs/collect/collect_state.dart'; +import 'package:flutter_unit/blocs/detail/detail_bloc.dart'; +import 'package:flutter_unit/blocs/detail/detail_event.dart'; +import 'package:flutter_unit/views/components/permanent/animated_text.dart'; +import 'package:flutter_unit/views/components/permanent/circle_image.dart'; +import 'package:flutter_unit/model/widget_model.dart'; +import 'package:flutter_unit/views/items/collect_widget_list_item.dart'; +import 'package:flutter_unit/views/items/techno_widget_list_item.dart'; import '../../common/empty_page.dart'; diff --git a/lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart b/lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart index 10961cb..95d83f3 100644 --- a/lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart +++ b/lib/views/widgets/MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; /// create by 张风捷特烈 on 2020/6/6 diff --git a/lib/views/widgets/MultiChildRenderObjectWidget/ListBody/node1_base.dart b/lib/views/widgets/MultiChildRenderObjectWidget/ListBody/node1_base.dart index dde5f66..65086b2 100644 --- a/lib/views/widgets/MultiChildRenderObjectWidget/ListBody/node1_base.dart +++ b/lib/views/widgets/MultiChildRenderObjectWidget/ListBody/node1_base.dart @@ -1,4 +1,3 @@ -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; diff --git a/lib/views/widgets/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart b/lib/views/widgets/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart new file mode 100644 index 0000000..c71b927 --- /dev/null +++ b/lib/views/widgets/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 344 NestedScrollViewViewport 嵌套滑动视口 +/// 在 NestedScrollView 中使用的视口,该视口持有 SliverOverlapAbsorberHandle,会在视口需要重新计算布局时通知它。例如,当滚动它时。 +/// +// { +// "widgetId": 344, +// "name": 'NestedScrollViewViewport 介绍', +// "priority": 1, +// "subtitle": +// "【offset】 : *偏移 【ViewportOffset】\n" +// "【handle】 : *处理器 【SliverOverlapAbsorberHandle】\n" +// "【axisDirection】 : 轴向 【AxisDirection】\n" +// "【crossAxisDirection】 : 交叉轴向 【AxisDirection】\n" +// "【slivers】 : 子组件 【List】\n" +// "【clipBehavior】 : 裁剪行为 【Clip】\n" +// "【anchor】 : 锚点 【double】", +// } + +class NestedScrollViewViewportDemo extends StatelessWidget { + final String info = + 'NestedScrollViewViewport 在源码中只有一处使用:' + '_NestedScrollViewCustomScrollView 继承自 CustomScrollView,复写了 buildViewport 方法,返回 NestedScrollViewViewport 。' + '而 NestedScrollView 构建时使用了 _NestedScrollViewCustomScrollView,也就是 NestedScrollView 的视口依赖于 NestedScrollViewViewport。' + 'NestedScrollViewViewport 的特点是持有 SliverOverlapAbsorberHandle 类对象 handle,源码中该 handle 在 NestedScrollViewState 中初始化。' + '可通过上下文获取,用于 SliverOverlapAbsorber/SliverOverlapInjector 组件,使用详见相关组件。'; + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.blue.withOpacity(0.1), + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + child: Text(info), + ); + } +} diff --git a/lib/views/widgets/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart b/lib/views/widgets/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart new file mode 100644 index 0000000..74cb023 --- /dev/null +++ b/lib/views/widgets/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 343 ShrinkWrappingViewport 收缩包围视图 +/// 和 ScrollView 的 shrinkWrap 属性之间关联。ShrinkWrappingViewport 在主轴上调整自身的大小以适应它的子节点,在无边界约束的情况下使用。 +/// +// { +// "widgetId": 343, +// "name": 'NestedScrollViewViewport 介绍', +// "priority": 1, +// "subtitle": +// "【offset】 : *偏移 【ViewportOffset】\n" +// "【axisDirection】 : 轴向 【AxisDirection】\n" +// "【crossAxisDirection】 : 交叉轴向 【AxisDirection】\n" +// "【slivers】 : 子组件 【List】\n" +// "【clipBehavior】 : 裁剪行为 【Clip】", +// } + +class ShrinkWrappingViewportDemo extends StatelessWidget { + final String info = + 'ShrinkWrappingViewport 在源码中只有一处使用:' + '在 ScrollView 中如果 shrinkWrap 为 true,会使用 ShrinkWrappingViewport,该属性在其子类 ListView、GridView、CustomScrollView 中可指定。' + '如果 shrinkWrap 为 false,视口会使用 Viewport,此时,视图区域将会沿滑动方向尽可能延伸。在无边界约束的情况下,shrinkWrap 需要是 true。' + '另外 ShrinkWrappingViewport 使用比较昂贵,因为滑动时需要重新计算滑动视图的尺寸。'; + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.blue.withOpacity(0.1), + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + child: Text(info), + ); + } +} diff --git a/lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart b/lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart index 120ee55..fc9f260 100644 --- a/lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart +++ b/lib/views/widgets/Other/ListWheelViewport/node2_perspective.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart b/lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart index 1a3d377..1248f0f 100644 --- a/lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart +++ b/lib/views/widgets/Other/ListWheelViewport/node3_magnifier.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart b/lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart index 620e7b2..a467b1d 100644 --- a/lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart +++ b/lib/views/widgets/Other/ListWheelViewport/node4_opacity.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart b/lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart index b4215aa..1bd5ee7 100644 --- a/lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart +++ b/lib/views/widgets/ProxyWidget/LayoutId/node1_base.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; /// create by 张风捷特烈 on 2020/6/6 diff --git a/lib/views/widgets/ProxyWidget/ParentDataWidget/node1_base.dart b/lib/views/widgets/ProxyWidget/ParentDataWidget/node1_base.dart new file mode 100644 index 0000000..192323a --- /dev/null +++ b/lib/views/widgets/ProxyWidget/ParentDataWidget/node1_base.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 347 ParentDataWidget 父数据组件 +/// 抽象类,用于将 ParentData 信息挂钩到 RenderObjectWidget 子组件上。其子类有 Positioned、Flexible、Expanded等,这些组件只能用于特定的组件之下。 +/// +// { +// "widgetId": 347, +// "name": 'ParentDataWidget 介绍', +// "priority": 1, +// "subtitle": +// "【child】 : 子组件 【Widget】", +// } + +class ParentDataWidgetDemo extends StatelessWidget { + final String info = + 'ParentDataWidget 是一个抽象类,不能直接使用,它拥有 ParentData 子类型的泛型,该泛型会限定该组件的适应场景。' + '如 Positioned 组件继承自 ParentDataWidget,就说明 Positioned 的上层组件必须使用 Stack 族组件。' + '如 Flexible 组件继承自 ParentDataWidget,就说明 Flexible 的上层组件必须使用 Flex 族组件。'; + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.blue.withOpacity(0.1), + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + child: Text(info), + ); + } +} diff --git a/lib/views/widgets/ProxyWidget/SliderTheme/node1_base.dart b/lib/views/widgets/ProxyWidget/SliderTheme/node1_base.dart index 217daa9..b9108c9 100644 --- a/lib/views/widgets/ProxyWidget/SliderTheme/node1_base.dart +++ b/lib/views/widgets/ProxyWidget/SliderTheme/node1_base.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; /// create by 张风捷特烈 on 2020-04-12 diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart b/lib/views/widgets/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart index ad612f1..496ba3e 100644 --- a/lib/views/widgets/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart +++ b/lib/views/widgets/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart @@ -44,7 +44,6 @@ class _CustomColorFilteredState extends State { ]), ], ); - ; } Widget _buildChild(m) => Container( diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart b/lib/views/widgets/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart index c903f32..fdc124b 100644 --- a/lib/views/widgets/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart +++ b/lib/views/widgets/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart @@ -29,7 +29,7 @@ class _PlayBezier3PageState extends State { } void _initPoints() { - _pos = List(); + _pos = []; _pos.add(Offset(0, 0)); _pos.add(Offset(60, -60)); _pos.add(Offset(-90, -90)); diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart new file mode 100644 index 0000000..05ca9f7 --- /dev/null +++ b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/main.dart @@ -0,0 +1,24 @@ +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: + +import 'package:flutter/material.dart'; +import 'node2_save.dart'; + + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: Scaffold( + appBar: AppBar(), + body: Center(child: RepaintBoundarySave()), + )); + } +} diff --git a/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart index 2cf57af..abd4c46 100644 --- a/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart +++ b/lib/views/widgets/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart @@ -39,7 +39,7 @@ class _TempPlayBezier3PageState extends State { } void _initPoints() { - _pos = List(); + _pos = []; _pos.add(Offset(0, 0)); _pos.add(Offset(60, -60)); _pos.add(Offset(-90, -90)); diff --git a/lib/views/widgets/Sliver/SliverAnimatedList/node1_base.dart b/lib/views/widgets/Sliver/SliverAnimatedList/node1_base.dart index 5115e8a..be69ccc 100644 --- a/lib/views/widgets/Sliver/SliverAnimatedList/node1_base.dart +++ b/lib/views/widgets/Sliver/SliverAnimatedList/node1_base.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/widgets/Sliver/SliverLayoutBuilder/node1_base.dart b/lib/views/widgets/Sliver/SliverLayoutBuilder/node1_base.dart index cacd904..274de28 100644 --- a/lib/views/widgets/Sliver/SliverLayoutBuilder/node1_base.dart +++ b/lib/views/widgets/Sliver/SliverLayoutBuilder/node1_base.dart @@ -1,8 +1,8 @@ -import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/src/rendering/sliver.dart'; +import 'package:flutter/rendering.dart'; + /// create by 张风捷特烈 on 2020/9/21 /// contact me by email 1981462002@qq.com diff --git a/lib/views/widgets/Sliver/SliverPrototypeExtentList/SliverPrototypeExtentList.dart b/lib/views/widgets/Sliver/SliverPrototypeExtentList/SliverPrototypeExtentList.dart new file mode 100644 index 0000000..e68f845 --- /dev/null +++ b/lib/views/widgets/Sliver/SliverPrototypeExtentList/SliverPrototypeExtentList.dart @@ -0,0 +1,105 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 314 SliverPrototypeExtentList Sliver原型延伸列表 prototypeItem属性是一个Widget,该Widget负责在主轴方向上约束item尺寸,但会不显示出来。delegate接受一个SliverChildDelegate完成item的创建。 +// { +// "widgetId": 314, +// "name": 'SliverPrototypeExtentList基本使用', +// "priority": 1, +// "subtitle": +// "【prototypeItem】 : 主轴方向尺寸组件 【Widget】\n" +// "【delegate】 : 孩子代理 【SliverChildDelegate】", +// } +class SliverPrototypeExtentListDemo extends StatefulWidget { + @override + _SliverPrototypeExtentListDemoState createState() => + _SliverPrototypeExtentListDemoState(); +} + +class _SliverPrototypeExtentListDemoState + extends State { + final data = [ + Colors.orange[50], + Colors.orange[100], + Colors.orange[200], + Colors.orange[300], + Colors.orange[400], + Colors.orange[500], + Colors.orange[600], + Colors.orange[700], + Colors.orange[800], + Colors.orange[900], + ]; + + @override + Widget build(BuildContext context) { + return Container( + height: 300, + child: CustomScrollView( + slivers: [_buildSliverAppBar(), _buildSliverList()], + ), + ); + } + + Widget _buildSliverList() => SliverPrototypeExtentList( + prototypeItem: Container( + height: 80, + ), + delegate: SliverChildBuilderDelegate( + (_, int index) => Container( + alignment: Alignment.center, + width: 100, + height: 60, + color: data[index], + child: Text( + colorString(data[index]), + style: TextStyle(color: Colors.white, shadows: [ + Shadow( + color: Colors.black, + offset: Offset(.5, .5), + blurRadius: 2) + ]), + ), + ), + childCount: data.length), + ); + + Widget _buildSliverAppBar() { + return SliverAppBar( + expandedHeight: 150.0, + leading: _buildLeading(), + title: Text('张风捷特烈'), + actions: _buildActions(), + elevation: 5, + pinned: true, + backgroundColor: Colors.orange, + flexibleSpace: FlexibleSpaceBar( + //伸展处布局 + titlePadding: EdgeInsets.only(left: 55, bottom: 15), //标题边距 + collapseMode: CollapseMode.parallax, //视差效果 + background: Image.asset( + "assets/images/caver.webp", + fit: BoxFit.cover, + ), + ), + ); + } + + Widget _buildLeading() => Container( + margin: EdgeInsets.all(10), + child: Image.asset('assets/images/icon_head.webp')); + + List _buildActions() => [ + IconButton( + onPressed: () {}, + icon: Icon( + Icons.star_border, + color: Colors.white, + ), + ) + ]; + + String colorString(Color color) => + "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; +} diff --git a/lib/views/widgets/StatefulWidget/DraggableScrollableSheet/node1_base.dart b/lib/views/widgets/StatefulWidget/DraggableScrollableSheet/node1_base.dart index 0060d27..9d0d290 100644 --- a/lib/views/widgets/StatefulWidget/DraggableScrollableSheet/node1_base.dart +++ b/lib/views/widgets/StatefulWidget/DraggableScrollableSheet/node1_base.dart @@ -1,9 +1,5 @@ -import 'dart:math'; - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter/src/rendering/sliver.dart'; /// create by 张风捷特烈 on 2020/9/21 /// contact me by email 1981462002@qq.com diff --git a/lib/views/widgets/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart b/lib/views/widgets/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart index c5f62e4..5fab499 100644 --- a/lib/views/widgets/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart +++ b/lib/views/widgets/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart @@ -1,9 +1,5 @@ -import 'dart:math'; - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter/src/rendering/sliver.dart'; /// create by 张风捷特烈 on 2020/9/21 /// contact me by email 1981462002@qq.com diff --git a/lib/views/widgets/StatefulWidget/InteractiveViewer/node3_controller.dart b/lib/views/widgets/StatefulWidget/InteractiveViewer/node3_controller.dart index c43d194..6533789 100644 --- a/lib/views/widgets/StatefulWidget/InteractiveViewer/node3_controller.dart +++ b/lib/views/widgets/StatefulWidget/InteractiveViewer/node3_controller.dart @@ -1,4 +1,3 @@ -import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart b/lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart index f63dd62..51b2cc6 100644 --- a/lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart +++ b/lib/views/widgets/StatefulWidget/NestedScrollView/node1_base.dart @@ -34,8 +34,7 @@ class NestedScrollViewDemo extends StatelessWidget { (BuildContext context, bool innerBoxIsScrolled) { return [ SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor( - context), + handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), sliver: SliverAppBar( title: const Text('旷古奇书'), pinned: true, diff --git a/lib/views/widgets/StatefulWidget/RawKeyboardListener/node1_base.dart b/lib/views/widgets/StatefulWidget/RawKeyboardListener/node1_base.dart index 846ce4f..5dc1495 100644 --- a/lib/views/widgets/StatefulWidget/RawKeyboardListener/node1_base.dart +++ b/lib/views/widgets/StatefulWidget/RawKeyboardListener/node1_base.dart @@ -1,5 +1,4 @@ import 'package:flutter/cupertino.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; diff --git a/lib/views/widgets/StatefulWidget/StatefulBuilder/node1_base.dart b/lib/views/widgets/StatefulWidget/StatefulBuilder/node1_base.dart index 32b37cd..9725373 100644 --- a/lib/views/widgets/StatefulWidget/StatefulBuilder/node1_base.dart +++ b/lib/views/widgets/StatefulWidget/StatefulBuilder/node1_base.dart @@ -1,5 +1,4 @@ import 'package:flutter/cupertino.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; /// create by 张风捷特烈 on 2020/9/21 diff --git a/lib/views/widgets/StatefulWidget/StatusTransitionWidget/node1_base.dart b/lib/views/widgets/StatefulWidget/StatusTransitionWidget/node1_base.dart new file mode 100644 index 0000000..abfbd8d --- /dev/null +++ b/lib/views/widgets/StatefulWidget/StatusTransitionWidget/node1_base.dart @@ -0,0 +1,78 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 233 StatusTransitionWidget 状态转变组件 +/// 抽象类,可以根据提供的动画器状态变化触发刷新。在 Flutter 框架层没有实现的子类,也没有使用的场景,感觉用处不是很大。 +/// +// { +// "widgetId": 233, +// "name": 'StatusTransitionWidget 介绍', +// "priority": 1, +// "subtitle": +// "【animation】 : 子组件 【Animation】\n" +// "这里自定义 ColorStatusTransitionWidget 进行使用,在动画器的状态改变时构建不同的颜色。", +// } + + +class StatusTransitionWidgetDemo extends StatefulWidget { + @override + _StatusTransitionWidgetDemoState createState() => _StatusTransitionWidgetDemoState(); +} + +class _StatusTransitionWidgetDemoState extends State + with SingleTickerProviderStateMixin { + AnimationController _ctrl; + + @override + void initState() { + super.initState(); + _ctrl = AnimationController(vsync: this, duration: Duration(seconds: 1))..forward(); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: (){ + _ctrl.forward(from: 0); + }, + child: ColorStatusTransitionWidget( + animation: _ctrl, + ), + ); + } +} + +class ColorStatusTransitionWidget extends StatusTransitionWidget { + final Animation animation; + + ColorStatusTransitionWidget({Key key, this.animation}) + : super(key: key, animation: animation); + + @override + Widget build(BuildContext context) { + Color color = Colors.blue; + switch (animation.status) { + case AnimationStatus.dismissed: + color = Colors.black; + break; + case AnimationStatus.forward: + color = Colors.blue; + break; + case AnimationStatus.reverse: + color = Colors.red; + break; + case AnimationStatus.completed: + color = Colors.green; + break; + } + + return Container( + alignment: Alignment.center, + width: 80, + height: 80, + decoration: BoxDecoration(color: color, shape: BoxShape.circle), + child: Text('${animation.status}'.split('.')[1],style: TextStyle(color: Colors.white),), + ); + } +} diff --git a/lib/views/widgets/StatefulWidget/TextField/node1_base.dart b/lib/views/widgets/StatefulWidget/TextField/node1_base.dart index 9c8bcf4..ae14934 100644 --- a/lib/views/widgets/StatefulWidget/TextField/node1_base.dart +++ b/lib/views/widgets/StatefulWidget/TextField/node1_base.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; /// create by 张风捷特烈 on 2020/4/30 /// contact me by email 1981462002@qq.com /// 说明: diff --git a/lib/views/widgets/StatefulWidget/TextField/node2_cursor.dart b/lib/views/widgets/StatefulWidget/TextField/node2_cursor.dart index 4725093..3e75a79 100644 --- a/lib/views/widgets/StatefulWidget/TextField/node2_cursor.dart +++ b/lib/views/widgets/StatefulWidget/TextField/node2_cursor.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; /// create by 张风捷特烈 on 2020-03-29 /// contact me by email 1981462002@qq.com diff --git a/lib/views/widgets/StatefulWidget/UniqueWidget/node1_base.dart b/lib/views/widgets/StatefulWidget/UniqueWidget/node1_base.dart new file mode 100644 index 0000000..118ba45 --- /dev/null +++ b/lib/views/widgets/StatefulWidget/UniqueWidget/node1_base.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/9/21 +/// contact me by email 1981462002@qq.com +/// 说明: 243 UniqueWidget 唯一组件 +/// 抽象类,必须提供一个 GlobalKey 进行身份标识,该类型组件只会 inflated 一个实例,同一时刻也只会有一个状态,可以通过 currentState 属性获取状态。 +/// +// { +// "widgetId": 243, +// "name": 'UniqueWidget 介绍', +// "priority": 1, +// "subtitle": +// "【child】 : 子组件 【Widget】", +// } + +class UniqueWidgetDemo extends StatelessWidget { + final String info = + '该类是抽象类,在 Flutter 框架层没有实现类,也没有其他源码使用到它,说明它基本上没啥用。' + '本质上它也非常简单,就是为组件添加一个 GlobalKey,在 Element#inflateWidget 时,会校验组件是否有 GlobalKey ,' + '如果有,则根据 key 找到之前的对应的 Element,就不会触发 Widget#createElement。为了方便获取 State,该类暴露 currentState 属性。' + '你瞄一下源码,就能看到这个组件是多么简单,简单到可以自己完成,以至于没什么大用。'; + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.blue.withOpacity(0.1), + padding: EdgeInsets.all(10), + margin: EdgeInsets.all(10), + child: Text(info), + ); + } +} diff --git a/lib/views/widgets/StatelessWidget/CupertinoDialogAction/no_node1_base.dart b/lib/views/widgets/StatelessWidget/CupertinoDialogAction/no_node1_base.dart new file mode 100644 index 0000000..44bd153 --- /dev/null +++ b/lib/views/widgets/StatelessWidget/CupertinoDialogAction/no_node1_base.dart @@ -0,0 +1,128 @@ + + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020-03-25 +/// contact me by email 1981462002@qq.com +/// 说明: + +class CustomDialog extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Column( + children: [ + _buildRaisedButton(context), + _buildDialog(), + ], + ); + } + + Widget _buildDialog() => CupertinoDialogAction( + onPressed: (){ + + }, + child: Container( + width: 50, + child: DeleteDialog(), + ), + ); + + Widget _buildRaisedButton(BuildContext context) => RaisedButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(10))), + color: Colors.blue, + onPressed: () { + showDialog(context: context, builder: (ctx) => _buildDialog()); + }, + child: Text( + 'Just Show It !', + style: TextStyle(color: Colors.white), + ), + + ); +} + +class DeleteDialog extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + _buildBar(context), + _buildTitle(), + _buildContent(), + _buildFooter(context), + ], + ), + ); + } + + Widget _buildTitle() { + return Text( + 'Delete Doucument', + style: TextStyle(color: Color(0xff5CC5E9), fontSize: 24), + ); + } + + Widget _buildContent() { + return Padding( + padding: const EdgeInsets.all(10.0), + child: Text( + ' Hi toly! If you push the conform buttom ,' + ' You will lose this file. Are you sure wand to do that?', + style: TextStyle(color: Color(0xffCFCFCF), fontSize: 16), + textAlign: TextAlign.justify, + ), + ); + } + + Widget _buildFooter(context) { + return Padding( + padding: const EdgeInsets.only(bottom: 15.0, top: 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Container( + alignment: Alignment.center, + height: 40, + width: 120, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(30)), + color: Color(0xff73D1EE)), + child: Text('Yes, Delete', + style: TextStyle(color: Colors.white, fontSize: 16)), + ), + InkWell( + onTap: ()=>Navigator.of(context).pop(), + child: Container( + alignment: Alignment.center, + height: 40, + width: 120, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(30)), + color: Colors.orangeAccent), + child: Text('Cancle', + style: TextStyle(color: Colors.white, fontSize: 16)), + ), + ) + ], + ), + ); + } + + _buildBar(context) => Container( + height: 30, + alignment: Alignment.centerRight, + margin: EdgeInsets.only(right: 10, top: 5), + child: InkWell( + onTap: ()=>Navigator.of(context).pop(), + child: Icon( + Icons.close, + color: Color(0xff82CAE3), + ), + ), + ); +} diff --git a/lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart b/lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart index bc68abc..1f1b576 100644 --- a/lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart +++ b/lib/views/widgets/StatelessWidget/CupertinoDialogAction/node1_base.dart @@ -1,8 +1,5 @@ -import 'dart:async'; - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'dart:ui' as ui; /// create by 张风捷特烈 on 2020/7/22 /// contact me by email 1981462002@qq.com diff --git a/lib/views/widgets/StatelessWidget/DraggableScrollableActuator/node1_base.dart b/lib/views/widgets/StatelessWidget/DraggableScrollableActuator/node1_base.dart index bb260c5..710ea96 100644 --- a/lib/views/widgets/StatelessWidget/DraggableScrollableActuator/node1_base.dart +++ b/lib/views/widgets/StatelessWidget/DraggableScrollableActuator/node1_base.dart @@ -1,9 +1,5 @@ -import 'dart:math'; - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter/src/rendering/sliver.dart'; /// create by 张风捷特烈 on 2020/9/21 /// contact me by email 1981462002@qq.com diff --git a/lib/views/widgets/StatelessWidget/SimpleDialog/node1_base.dart b/lib/views/widgets/StatelessWidget/SimpleDialog/node1_base.dart index 8012540..f566d99 100644 --- a/lib/views/widgets/StatelessWidget/SimpleDialog/node1_base.dart +++ b/lib/views/widgets/StatelessWidget/SimpleDialog/node1_base.dart @@ -1,4 +1,3 @@ -import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/widgets/StatelessWidget/Theme/node1_base.dart b/lib/views/widgets/StatelessWidget/Theme/node1_base.dart index 9162886..f90f146 100644 --- a/lib/views/widgets/StatelessWidget/Theme/node1_base.dart +++ b/lib/views/widgets/StatelessWidget/Theme/node1_base.dart @@ -18,12 +18,12 @@ class TextThemeDemo extends StatelessWidget { "headline: ": queryData.headline, "title: ": queryData.title, "subhead: ": queryData.subhead, - "subtitle: ": queryData.body1, + "body1: ": queryData.body1, "body2: ": queryData.body2, "button: ": queryData.button, "overline: ": queryData.overline, "subtitle: ": queryData.subtitle, - "button: ": queryData.caption, + "caption: ": queryData.caption, "display1: ": queryData.display1, "display2: ": queryData.display2, "display3: ": queryData.display3, diff --git a/lib/views/widgets/exp/proxy_unit.dart b/lib/views/widgets/exp/proxy_unit.dart index 95e2fa2..3992a74 100644 --- a/lib/views/widgets/exp/proxy_unit.dart +++ b/lib/views/widgets/exp/proxy_unit.dart @@ -32,3 +32,4 @@ export '../ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart'; export '../ProxyWidget/InheritedTheme/node1_base.dart'; export '../ProxyWidget/DefaultAssetBundle/node1_base.dart'; export '../ProxyWidget/InheritedWidget/node1_base.dart'; +export '../ProxyWidget/ParentDataWidget/node1_base.dart'; diff --git a/lib/views/widgets/exp/render_object_unit.dart b/lib/views/widgets/exp/render_object_unit.dart index 0bfee49..2ea2a1b 100644 --- a/lib/views/widgets/exp/render_object_unit.dart +++ b/lib/views/widgets/exp/render_object_unit.dart @@ -24,6 +24,8 @@ export '../MultiChildRenderObjectWidget/Row/node1_base.dart'; export '../MultiChildRenderObjectWidget/CustomMultiChildLayout/node1_base.dart'; export '../MultiChildRenderObjectWidget/Viewport/node1_base.dart'; export '../MultiChildRenderObjectWidget/ListBody/node1_base.dart'; +export '../MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart'; +export '../MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart'; export '../SingleChildRenderObjectWidget/Align/node1_base.dart'; export '../SingleChildRenderObjectWidget/Align/node2_other.dart'; diff --git a/lib/views/widgets/exp/stateful_unit.dart b/lib/views/widgets/exp/stateful_unit.dart index a1af721..96ec68e 100644 --- a/lib/views/widgets/exp/stateful_unit.dart +++ b/lib/views/widgets/exp/stateful_unit.dart @@ -92,6 +92,8 @@ export '../StatefulWidget/Draggable/node2_data.dart'; export '../StatefulWidget/Draggable/node3_use.dart'; export '../StatefulWidget/Form/node1_base.dart'; +export '../StatefulWidget/StatusTransitionWidget/node1_base.dart'; +export '../StatefulWidget/UniqueWidget/node1_base.dart'; export '../StatefulWidget/FutureBuilder/node1_base.dart'; export '../StatefulWidget/Hero/node1_base.dart'; export '../StatefulWidget/AnimatedAlign/node1_base.dart'; diff --git a/lib/views/widgets/widgets_map.dart b/lib/views/widgets/widgets_map.dart index f5212a2..866fd87 100644 --- a/lib/views/widgets/widgets_map.dart +++ b/lib/views/widgets/widgets_map.dart @@ -64,10 +64,29 @@ class WidgetsMap { return [ CustomBanner(), ]; + case "UniqueWidget": + return [ + UniqueWidgetDemo(), + ]; + case "ShrinkWrappingViewport": + return [ + ShrinkWrappingViewportDemo(), + ]; case "NestedScrollViewViewport": + return [ + NestedScrollViewViewportDemo(), + ]; + case "ParentDataWidget": + return [ + ParentDataWidgetDemo(), + ]; case "AutomaticKeepAlive": return [ AutomaticKeepAliveDemo(), ]; + case "StatusTransitionWidget": + return [ + StatusTransitionWidgetDemo(), + ]; case "KeepAlive": return [ KeepAliveDemo(), @@ -1321,6 +1340,7 @@ class WidgetsMap { CustomSingleChildLayoutDemo(), OffSetWidgetDemo(), ]; + default: return []; } } } diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig index 785633d..4b81f9b 100644 --- a/macos/Flutter/Flutter-Debug.xcconfig +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig index 5fba960..5caa9d1 100644 --- a/macos/Flutter/Flutter-Release.xcconfig +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Podfile b/macos/Podfile index d60ec71..dade8df 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -9,74 +9,32 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" end - pods_ary = [] - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) { |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - pods_ary.push({:name => podname, :path => podpath}); - else - puts "Invalid plugin specification: #{line}" - end - } - return pods_ary + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" end -def pubspec_supports_macos(file) - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return false; - end - File.foreach(file_abs_path) { |line| - return true if line =~ /^\s*macos:/ - } - return false -end +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup target 'Runner' do use_frameworks! use_modular_headers! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - ephemeral_dir = File.join('Flutter', 'ephemeral') - symlink_dir = File.join(ephemeral_dir, '.symlinks') - symlink_plugins_dir = File.join(symlink_dir, 'plugins') - system("rm -rf #{symlink_dir}") - system("mkdir -p #{symlink_plugins_dir}") - - # Flutter Pods - generated_xcconfig = parse_KV_file(File.join(ephemeral_dir, 'Flutter-Generated.xcconfig')) - if generated_xcconfig.empty? - puts "Flutter-Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." - end - generated_xcconfig.map { |p| - if p[:name] == 'FLUTTER_FRAMEWORK_DIR' - symlink = File.join(symlink_dir, 'flutter') - File.symlink(File.dirname(p[:path]), symlink) - pod 'FlutterMacOS', :path => File.join(symlink, File.basename(p[:path])) - end - } - - # Plugin Pods - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.map { |p| - symlink = File.join(symlink_plugins_dir, p[:name]) - File.symlink(p[:path], symlink) - if pubspec_supports_macos(File.join(symlink, 'pubspec.yaml')) - pod p[:name], :path => File.join(symlink, 'macos') - end - } + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 4073b2e..dc34676 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -3,27 +3,21 @@ PODS: - FMDB (2.7.5): - FMDB/standard (= 2.7.5) - FMDB/standard (2.7.5) - - path_provider (0.0.1) - path_provider_macos (0.0.1): - FlutterMacOS - - shared_preferences (0.0.1) - shared_preferences_macos (0.0.1): - FlutterMacOS - - sqflite (0.0.1): + - sqflite (0.0.2): - FlutterMacOS - - FMDB (~> 2.7.2) - - url_launcher (0.0.1) + - FMDB (>= 2.7.5) - url_launcher_macos (0.0.1): - FlutterMacOS DEPENDENCIES: - - FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64`) - - path_provider (from `Flutter/ephemeral/.symlinks/plugins/path_provider/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) - - shared_preferences (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos`) - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) - - url_launcher (from `Flutter/ephemeral/.symlinks/plugins/url_launcher/macos`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) SPEC REPOS: @@ -32,33 +26,24 @@ SPEC REPOS: EXTERNAL SOURCES: FlutterMacOS: - :path: Flutter/ephemeral/.symlinks/flutter/darwin-x64 - path_provider: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider/macos + :path: Flutter/ephemeral path_provider_macos: :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos - shared_preferences: - :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos shared_preferences_macos: :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos sqflite: :path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos - url_launcher: - :path: Flutter/ephemeral/.symlinks/plugins/url_launcher/macos url_launcher_macos: :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos SPEC CHECKSUMS: - FlutterMacOS: 15bea8a44d2fa024068daa0140371c020b4b6ff9 + FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - path_provider: e0848572d1d38b9a7dd099e79cf83f5b7e2cde9f path_provider_macos: a0a3fd666cb7cd0448e936fb4abad4052961002b - shared_preferences: 9fec34d1bd906196a4da48fcf6c3ad521cc00b8d - shared_preferences_macos: 5e5c2839894accb56b7d23328905b757f2bafaf6 - sqflite: 6c1f07e1d4399d619ea619fea9171251dd24d058 - url_launcher: af78307ef9bafff91273b34f1c6c0c86a0004fd7 - url_launcher_macos: 76867a28e24e0b6b98bfd65f157b64108e6d477a + shared_preferences_macos: 480ce071d0666e37cef23fe6c702293a3d21799e + sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea + url_launcher_macos: 45af3d61de06997666568a7149c1be98b41c95d4 -PODFILE CHECKSUM: d8ba9b3e9e93c62c74a660b46c6fcb09f03991a7 +PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c -COCOAPODS: 1.10.0 +COCOAPODS: 1.10.1 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index efba191..45b42c4 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -26,11 +26,7 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; }; - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 789DE1B260B3D4326E047212 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0252B82BBEA29AE8527DA6D /* Pods_Runner.framework */; }; - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; }; - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + AE335D2509332C1B4DFCEC02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88B9E3F09196EF58390313BC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -50,8 +46,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */, - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */, ); name = "Bundle Framework"; runOnlyForDeploymentPostprocessing = 0; @@ -59,6 +53,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0C4393D60832686C8938E74E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* flutter_unit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = flutter_unit.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -70,17 +65,14 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 9129C8AACBD3098404352A37 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 88B9E3F09196EF58390313BC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - C0252B82BBEA29AE8527DA6D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C816D883E26ACCA84F5B7124 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; }; - F4278DF6745403EE4C6A4D00 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + A1F5AF9CE0CCBC1878EE6839 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + F26E4D2E96B8B490FBF1BA2B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -88,21 +80,19 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */, - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */, - 789DE1B260B3D4326E047212 /* Pods_Runner.framework in Frameworks */, + AE335D2509332C1B4DFCEC02 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 00E1628A93EF90BA8C48E1CC /* Pods */ = { + 144F154F76682ABF253828F5 /* Pods */ = { isa = PBXGroup; children = ( - F4278DF6745403EE4C6A4D00 /* Pods-Runner.debug.xcconfig */, - 9129C8AACBD3098404352A37 /* Pods-Runner.release.xcconfig */, - C816D883E26ACCA84F5B7124 /* Pods-Runner.profile.xcconfig */, + A1F5AF9CE0CCBC1878EE6839 /* Pods-Runner.debug.xcconfig */, + F26E4D2E96B8B490FBF1BA2B /* Pods-Runner.release.xcconfig */, + 0C4393D60832686C8938E74E /* Pods-Runner.profile.xcconfig */, ); name = Pods; path = Pods; @@ -126,7 +116,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 00E1628A93EF90BA8C48E1CC /* Pods */, + 144F154F76682ABF253828F5 /* Pods */, ); sourceTree = ""; }; @@ -156,8 +146,6 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - D73912EF22F37F9E000D13A0 /* App.framework */, - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */, ); path = Flutter; sourceTree = ""; @@ -178,7 +166,7 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - C0252B82BBEA29AE8527DA6D /* Pods_Runner.framework */, + 88B9E3F09196EF58390313BC /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -190,13 +178,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 97F70DB9B70534E2BEB0F0FE /* [CP] Check Pods Manifest.lock */, + 6411B8E0FDE2E488F4116D3B /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - CA9CB5E709EE06556E404C74 /* [CP] Embed Pods Frameworks */, + B7763A7F37CB77A1A5E01C41 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -216,7 +204,7 @@ attributes = { LastSwiftUpdateCheck = 0920; LastUpgradeCheck = 0930; - ORGANIZATIONNAME = "The Flutter Authors"; + ORGANIZATIONNAME = ""; TargetAttributes = { 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; @@ -235,7 +223,7 @@ }; }; buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 8.0"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -281,7 +269,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -303,7 +291,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 97F70DB9B70534E2BEB0F0FE /* [CP] Check Pods Manifest.lock */ = { + 6411B8E0FDE2E488F4116D3B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -325,15 +313,17 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - CA9CB5E709EE06556E404C74 /* [CP] Embed Pods Frameworks */ = { + B7763A7F37CB77A1A5E01C41 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; - outputPaths = ( + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -431,10 +421,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -561,10 +547,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -585,10 +567,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a5fd7b5..81fa67f 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -27,18 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - - - =2.12.0-0.0 <3.0.0" - flutter: ">=1.12.13+hotfix.5 <2.0.0" + dart: ">=2.12.0 <3.0.0" + flutter: ">=1.24.0-10" diff --git a/pubspec.yaml b/pubspec.yaml index d67d551..2e22c13 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,4 +1,4 @@ -name: flutter_unit_mac +name: flutter_unit description: A new Flutter application. # The following defines the version and build number for your application. @@ -14,25 +14,25 @@ description: A new Flutter application. version: 1.0.0+1 environment: - sdk: ">=2.3.0 <3.0.0" + sdk: ">=2.7.0 <3.0.0" dependencies: flutter: sdk: flutter - flutter_bloc: ^3.2.0 - equatable: ^1.0.3 + flutter_bloc: ^7.0.0 + equatable: ^2.0.0 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.2 - sqflite: ^1.2.1 #数据库 + cupertino_icons: ^1.0.2 + sqflite: ^2.0.0+3 #数据库 toggle_rotate: ^0.0.5 flutter_star: ^0.1.2 # 星星组件 - shared_preferences: ^0.5.12+4 # xml 固化 - sqflite_common_ffi: - url_launcher: ^5.4.2 # url - path_provider: ^1.6.11 - intl: ^0.16.1 # 格式化 - share: ^0.6.3+6 + shared_preferences: ^2.0.5 # xml 固化 + sqflite_common_ffi: ^2.0.0 + url_launcher: ^6.0.3 # url + path_provider: ^2.0.1 + intl: ^0.17.0 # 格式化 + share: ^2.0.1 path_provider_fde: path: ./plugins/path_provider_fde dev_dependencies: