flutter 全局配置
本地存储封装
懒汉模式封装本地存储
LocalStorage.preInit() LocalStorage.getInstance()...
from 慕课网
deep link 链接打开app
pub uni-links 0.5.1
android/app/src/main/AndroidManifest.xml
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="dynamictheme"/>
<data
android:host="detail"
android:scheme="dynamictheme"/>
</intent-filter>
global.dart
/// 使用[String]链接实现
static _initPlatformStateForStringUniLinks(context) async {
var initialLink;
// Platform messages may fail, so we use a try/catch PlatformException.
try {
initialLink = await getInitialLink();
print('initial link: $initialLink');
if (initialLink != null) {
print('initialLink--$initialLink');
// 跳转到指定页面
schemeJump(context, initialLink);
}
} on PlatformException {
initialLink = 'Failed to get initial link.';
} on FormatException {
initialLink = 'Failed to parse the initial link as Uri.';
}
// Attach a listener to the links stream
// ignore: deprecated_member_use
linkStream.listen((String? link) {
// ignore: unnecessary_null_comparison
print('listen--link -- $link');
if (link == null) return;
print('link--$link');
// 跳转到指定页面
schemeJump(context, link);
}, onError: (Object err) {
// if (!mounted) return;
});
}
/// 路由跳转 context schemeUrl
static schemeJump(BuildContext context, String schemeUrl) {
final Uri _jumpUri = Uri.parse(schemeUrl.replaceFirst(
'dynamictheme://',
'http://path/',
));
print(schemeUrl);
print(_jumpUri);
switch (_jumpUri.path) {
default:
navigateTo(context, Routes.scanResult,
params: {"result": '跳转的链接$_jumpUri'});
break;
}
}
deep link 部分借鉴于 # Flutter Scheme 使用(浏览器打开App,App内打开另一个App) 与pub - uni-links官网
网络变化检测
pub connectivity ^3.0.6
global.dart
// 初始化监听网络变化
static _initNetworkListen() {
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
if (result == ConnectivityResult.none) {
showWarnToast('网络已断开,请检查网络~');
}
Global.network = result;
});
}
使用
Widget _buildError(refresh) {
return Global.network == ConnectivityResult.none
? _buildNetworkError(refresh)
: _buildDataError(refresh);
}