Feature_EN.md
January 7, 2023 · View on GitHub

Flutter SDK 版本是 1.22.x 的,请用 1.0.0 及之后的版本。
The Navigator for iOS, Android, Flutter.
Version 0.5.1 requires Flutter >= 1.12.1 and Dart >= 2.6.0 .
Features
push,pop,popTo,removenative pages or flutter pages from anywhere- Get the callback parameters when the
pushpage ispopped - Send and receive page notifications
- Register observers for the life cycle of pages
- Register observers for the route actions of pages
- Hide native navigation bar for flutter pages
- Supports custom transition animation on the Flutter side
- Supports running multiple entry points
Getting started
You should ensure that you add thrio as a dependency in your flutter project.
dependencies:
thrio: ^1.0.1
You can also reference the git repo directly if you want:
dependencies:
thrio:
git: git@github.com:hellobike/thrio.git
ref: main
You should then run flutter pub upgrade or update your packages in IntelliJ.
Example Project
There is a pretty sweet example project in the example folder. Check it out. Otherwise, keep reading to get up and running.
push a page in dart
ThrioNavigator.push(url: '/biz/biz1/flutter1');
ThrioNavigator.push(url: '/biz1/native1', params: { '1': {'2': '3'}});
ThrioNavigator.push(url: '/biz1/native1', animated:true);
ThrioNavigator.push(
url: '/biz/biz2/flutter2',
params: {'1': {'2': '3'}},
poppedResult: (params) => verbose('/biz2/flutter2 popped: $params'),
);
push a page in iOS
[ThrioNavigator pushUrl:@"/biz/biz1/flutter1"];
[ThrioNavigator pushUrl:@"/biz/biz2/flutter2" poppedResult:^(id _Nonnull params) {
ThrioLogV(@"/biz2/flutter2 popped: %@", params);
}];
push a page in Android
ThrioNavigator.push("/biz/biz1/flutter1",
mapOf("k1" to 1),
false,
poppedResult = {
Log.e("Thrio", "/biz1/native1 popResult call params $it")
}
)
pop a page in dart
ThrioNavigator.pop();
// Pop the page without animation
ThrioNavigator.pop(animated: false);
// Pop the page and return parameters
ThrioNavigator.pop(params: 'popped flutter1'),
pop a page in iOS
[ThrioNavigator pop];
// Pop a page without animation
[ThrioNavigator popAnimated:NO];
// Pop the page and return parameters
[ThrioNavigator popParams:@{@"k1": @3}];
pop a page in Android
ThrioNavigator.pop(params, animated)
popTo a page in dart
ThrioNavigator.popTo(url: '/biz/biz1/flutter1');
ThrioNavigator.popTo(url: '/biz/biz1/flutter1', animated: false);
popTo a page in iOS
[ThrioNavigator popToUrl:@"/biz/biz1/flutter1"];
[ThrioNavigator popToUrl:@"/biz/biz1/flutter1" animated:NO];
popTo a page in Android
ThrioNavigator.popTo(url, index)
remove a page in dart
ThrioNavigator.remove(url: '/biz/biz1/flutter1');
ThrioNavigator.remove(url: '/biz/biz1/flutter1', animated: true);
remove a page in iOS
[ThrioNavigator removeUrl:@"/biz/biz1/flutter1"];
[ThrioNavigator removeUrl:@"/biz/biz1/flutter1" animated:NO];
remove a page in Android
ThrioNavigator.remove(url, index)
notify a page in dart
ThrioNavigator.notify(url: '/biz/biz1/flutter1', name: 'reload');
notify a page in iOS
[ThrioNavigator notifyUrl:@"/biz/biz1/flutter1" name:@"reload"];
notify a page in Android
ThrioNavigator.notify(url, index, params)
receive page notifications in dart
NavigatorPageNotify(
name: 'page1Notify',
onPageNotify: (params) =>
verbose('flutter1 receive notify: $params'),
child: Xxxx());
receive page notifications in iOS
UIViewController implements the NavigatorPageNotifyProtocol and receives page notifications via onNotify
* (void)onNotify:(NSString *)name params:(id)params {
ThrioLogV(@"/biz1/native1 onNotify: %@, %@", name, params);
}
receive page notifications in Android
Activity implements the PageNotifyListener and receives page notifications via onNotify
class Activity : AppCompatActivity(), PageNotifyListener {
override fun onNotify(name: String, params: Any?) {
}
}