diff --git a/example2/ios/Podfile b/example2/ios/Podfile
index 6697f0a..1e8c3c9 100644
--- a/example2/ios/Podfile
+++ b/example2/ios/Podfile
@@ -10,78 +10,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', '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
- generated_key_values = {}
- skip_line_start_symbols = ["#", "/"]
- File.foreach(file_abs_path) do |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)
- generated_key_values[podname] = podpath
- else
- puts "Invalid plugin specification: #{line}"
- end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
end
- generated_key_values
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_ios_podfile_setup
+
target 'Runner' do
use_frameworks!
use_modular_headers!
- # Flutter Pod
-
- copied_flutter_dir = File.join(__dir__, 'Flutter')
- copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
- copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
- unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
- # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
- # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
- # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
-
- generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
- unless File.exist?(generated_xcode_build_settings_path)
- raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
- end
- generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
- cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
-
- unless File.exist?(copied_framework_path)
- FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
- end
- unless File.exist?(copied_podspec_path)
- FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
- end
- end
-
- # Keep pod path relative so it can be checked into Podfile.lock.
- pod 'Flutter', :path => 'Flutter'
-
- # Plugin Pods
-
- # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
- # referring to absolute paths on developers' machines.
- system('rm -rf .symlinks')
- system('mkdir -p .symlinks/plugins')
- plugin_pods = parse_KV_file('../.flutter-plugins')
- plugin_pods.each do |name, path|
- symlink = File.join('.symlinks', 'plugins', name)
- File.symlink(path, symlink)
- pod name, :path => File.join(symlink, 'ios')
- end
+ flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
installer.pods_project.targets.each do |target|
- target.build_configurations.each do |config|
- config.build_settings['ENABLE_BITCODE'] = 'NO'
- end
+ flutter_additional_ios_build_settings(target)
end
end
diff --git a/example2/ios/Podfile.lock b/example2/ios/Podfile.lock
index 7a2eac9..c20df07 100644
--- a/example2/ios/Podfile.lock
+++ b/example2/ios/Podfile.lock
@@ -14,9 +14,9 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/fluttertoast/ios"
SPEC CHECKSUMS:
- Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
+ Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b
-PODFILE CHECKSUM: c34e2287a9ccaa606aeceab922830efb9a6ff69a
+PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
-COCOAPODS: 1.9.3
+COCOAPODS: 1.10.1
diff --git a/example2/ios/Runner.xcodeproj/project.pbxproj b/example2/ios/Runner.xcodeproj/project.pbxproj
index 4ab29a3..e9b2eac 100644
--- a/example2/ios/Runner.xcodeproj/project.pbxproj
+++ b/example2/ios/Runner.xcodeproj/project.pbxproj
@@ -211,15 +211,12 @@
buildActionMask = 2147483647;
files = (
);
- inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
- "${PODS_ROOT}/../Flutter/Flutter.framework",
- "${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -312,7 +309,6 @@
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -389,7 +385,6 @@
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -445,7 +440,6 @@
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
diff --git a/example2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 1d526a1..919434a 100644
--- a/example2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/example2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/example2/pubspec.lock b/example2/pubspec.lock
index 76ec277..0b5e00d 100644
--- a/example2/pubspec.lock
+++ b/example2/pubspec.lock
@@ -1,69 +1,62 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
- archive:
- dependency: transitive
- description:
- name: archive
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "2.0.13"
- args:
- dependency: transitive
- description:
- name: args
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "1.6.0"
async:
dependency: transitive
description:
name: async
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.4.1"
+ version: "2.6.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
- charcode:
+ version: "2.1.0"
+ characters:
dependency: transitive
description:
- name: charcode
- url: "https://pub.flutter-io.cn"
+ name: characters
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.3"
- collection:
+ version: "1.1.0"
+ charcode:
dependency: transitive
description:
- name: collection
- url: "https://pub.flutter-io.cn"
+ name: charcode
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.14.12"
- convert:
+ version: "1.2.0"
+ clock:
dependency: transitive
description:
- name: convert
- url: "https://pub.flutter-io.cn"
+ name: clock
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.1"
- crypto:
+ version: "1.1.0"
+ collection:
dependency: transitive
description:
- name: crypto
- url: "https://pub.flutter-io.cn"
+ name: collection
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.4"
+ version: "1.15.0"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.2.0"
flutter:
dependency: "direct main"
description: flutter
@@ -75,7 +68,7 @@ packages:
path: ".."
relative: true
source: path
- version: "3.0.0"
+ version: "3.0.5"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -85,51 +78,30 @@ packages:
dependency: "direct main"
description:
name: fluttertoast
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
version: "2.2.11"
- image:
- dependency: transitive
- description:
- name: image
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "2.1.12"
matcher:
dependency: transitive
description:
name: matcher
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.6"
+ version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.8"
+ version: "1.3.0"
path:
dependency: transitive
description:
name: path
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "1.6.4"
- petitparser:
- dependency: transitive
- description:
- name: petitparser
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.4.0"
- quiver:
- dependency: transitive
- description:
- name: quiver
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "2.1.3"
+ version: "1.8.0"
sky_engine:
dependency: transitive
description: flutter
@@ -139,64 +111,57 @@ packages:
dependency: transitive
description:
name: source_span
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.7.0"
+ version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.9.3"
+ version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
+ version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.5"
+ version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.0"
+ version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "0.2.15"
+ version: "0.3.0"
typed_data:
dependency: transitive
description:
name: typed_data
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.6"
+ version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "2.0.8"
- xml:
- dependency: transitive
- description:
- name: xml
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "3.6.1"
+ version: "2.1.0"
sdks:
- dart: ">=2.7.0 <3.0.0"
+ dart: ">=2.12.0 <3.0.0"
diff --git a/lib/src/scroll_item_offset_mixin.dart b/lib/src/scroll_item_offset_mixin.dart
index a2273c7..bab616d 100644
--- a/lib/src/scroll_item_offset_mixin.dart
+++ b/lib/src/scroll_item_offset_mixin.dart
@@ -20,7 +20,7 @@ mixin ScrollItemOffsetMixin {
}
// RenderSliverList
- RenderSliverMultiBoxAdaptor renderSliverMultiBoxAdaptor = context.ancestorRenderObjectOfType(TypeMatcher());
+ RenderSliverMultiBoxAdaptor renderSliverMultiBoxAdaptor = context.findAncestorRenderObjectOfType();
// ScrollView的起始绘制位置
double startOffset = renderSliverMultiBoxAdaptor.constraints.scrollOffset;
// ScrollView的结束绘制位置
diff --git a/lib/src/scroll_view_listener.dart b/lib/src/scroll_view_listener.dart
index a6ef383..2cf74bc 100644
--- a/lib/src/scroll_view_listener.dart
+++ b/lib/src/scroll_view_listener.dart
@@ -16,7 +16,7 @@ class ScrollViewListener extends StatefulWidget {
}
static Stream of(BuildContext context) {
- return (context.ancestorStateOfType(TypeMatcher()) as ScrollViewListenerState)?.broadCaseStream;
+ return (context.findAncestorStateOfType())?.broadCaseStream;
}
}
diff --git a/lib/src/sliver_multi_box_scroll_lintener.dart b/lib/src/sliver_multi_box_scroll_lintener.dart
index 9193c15..7bc475b 100644
--- a/lib/src/sliver_multi_box_scroll_lintener.dart
+++ b/lib/src/sliver_multi_box_scroll_lintener.dart
@@ -32,7 +32,7 @@ class SliverMultiBoxScrollListener extends StatefulWidget {
// 用于查询父级的曝光情况,用于嵌套
static double of(BuildContext context) {
- _State state = (context.ancestorStateOfType(TypeMatcher<_State>()) as _State);
+ _State state = (context.findAncestorStateOfType<_State>() as _State);
if (state == null) {
// 没有检测到嵌套
return 1.0;
diff --git a/lib/src/sliver_scroll_listener.dart b/lib/src/sliver_scroll_listener.dart
index 59e1344..54bb4db 100644
--- a/lib/src/sliver_scroll_listener.dart
+++ b/lib/src/sliver_scroll_listener.dart
@@ -57,8 +57,7 @@ class _State extends State {
SchedulerBinding.instance.addPostFrameCallback((Duration duration) {
try {
if (widget.onScrollInit != null) {
- RenderSliver renderSliver = context.ancestorRenderObjectOfType(
- TypeMatcher());
+ RenderSliver renderSliver = context.findAncestorRenderObjectOfType();
widget.onScrollInit(renderSliver.constraints, renderSliver.geometry);
}
} catch (err) {
@@ -71,8 +70,7 @@ class _State extends State {
// ScrollEnd
if (notification is ScrollEndNotification) {
if (widget.onScrollEnd != null) {
- RenderSliver renderSliver = context.ancestorRenderObjectOfType(
- TypeMatcher());
+ RenderSliver renderSliver = context.findAncestorRenderObjectOfType();
widget.onScrollEnd(
notification, renderSliver.constraints, renderSliver.geometry);
}
@@ -81,8 +79,7 @@ class _State extends State {
// ScrollUpdate
if (notification is ScrollUpdateNotification) {
if (widget.onScrollUpdate != null) {
- RenderSliver renderSliver = context.ancestorRenderObjectOfType(
- TypeMatcher());
+ RenderSliver renderSliver = context.findAncestorRenderObjectOfType();
widget.onScrollUpdate(
notification, renderSliver.constraints, renderSliver.geometry);
}
diff --git a/pubspec.lock b/pubspec.lock
index 5309463..ad6d1df 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,30 +5,51 @@ packages:
dependency: transitive
description:
name: async
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.0"
+ version: "2.6.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.4"
+ version: "2.1.0"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.2.0"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.2"
+ version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.14.11"
+ version: "1.15.0"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.2.0"
flutter:
dependency: "direct main"
description: flutter
@@ -43,37 +64,23 @@ packages:
dependency: transitive
description:
name: matcher
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.5"
+ version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.6"
+ version: "1.3.0"
path:
dependency: transitive
description:
name: path
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.6.2"
- pedantic:
- dependency: transitive
- description:
- name: pedantic
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "1.7.0"
- quiver:
- dependency: transitive
- description:
- name: quiver
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "2.0.3"
+ version: "1.8.0"
sky_engine:
dependency: transitive
description: flutter
@@ -83,57 +90,57 @@ packages:
dependency: transitive
description:
name: source_span
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.5.5"
+ version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.9.3"
+ version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.0"
+ version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.4"
+ version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.0"
+ version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "0.2.5"
+ version: "0.3.0"
typed_data:
dependency: transitive
description:
name: typed_data
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.6"
+ version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.8"
+ version: "2.1.0"
sdks:
- dart: ">=2.2.2 <3.0.0"
+ dart: ">=2.12.0 <3.0.0"