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: