如何把代码如果在一个单独的方法?



我正在使用应用程序导航,但我面临的问题是,我不能把if (initialLink != null)...代码在一个单独的方法,所以我可以在代码的不同部分复制这个方法,你能告诉我我怎么能把这个代码在一个单独的方法?

class AppRouter {
final BuildContext context;
AppRouter(this.context);
RouteMap buildRouteMap(PendingDynamicLinkData? initialLink) {
return RouteMap(
onUnknownRoute: (route) => const Redirect('/'),
routes: {
'/': (route) {
bool loggedIn =
Provider.of<AppState>(context, listen: false).isLoggedIn;
if (initialLink != null) {
String code;
final Uri deepLink = initialLink.link;
final String deeplinkString = deepLink.toString();
code = deepLink.queryParameters['code'] ?? 'No code';
var start = deeplinkString.lastIndexOf('/') + 1;
var end = deeplinkString.indexOf('?');
var extract = deeplinkString.substring(start, end);
if (extract == 'password-reset') {
return Redirect(
'/login/forgot-password',
queryParameters: {
'isSendEmail': 'true',
'code': code,
},
);
} 
}

return const MaterialPage(
child: PhoneNumberPage(),
);
},
'/map': (route) {
bool loggedIn =
Provider.of<AppState>(context, listen: false).isLoggedIn;
if (loggedIn) {
return const Redirect('/home');
}
return const MaterialPage(
child: MapPage(
isUserAuth: false,
),
);
},

代码放在单独的函数

if (initialLink != null) {
String code;
final Uri deepLink = initialLink.link;
final String deeplinkString = deepLink.toString();
code = deepLink.queryParameters['code'] ?? 'No code';
var start = deeplinkString.lastIndexOf('/') + 1;
var end = deeplinkString.indexOf('?');
var extract = deeplinkString.substring(start, end);
if (extract == 'password-reset') {
return Redirect(
'/login/forgot-password',
queryParameters: {
'isSendEmail': 'true',
'code': code,
},
);
} 
}

试试这个

void commonFunction(){
if (initialLink != null) {
String code;
final Uri deepLink = initialLink.link;
final String deeplinkString = deepLink.toString();
code = deepLink.queryParameters['code'] ?? 'No code';
var start = deeplinkString.lastIndexOf('/') + 1;
var end = deeplinkString.indexOf('?');
var extract = deeplinkString.substring(start, end);
if (extract == 'password-reset') {
return Redirect(
'/login/forgot-password',
queryParameters: {
'isSendEmail': 'true',
'code': code,
},
);
}
}
}

然后在你需要的任何地方调用commonFunction()

您使用initialLink作为if…else条件的判断。当您提取它们时,需要提供该参数。否则代码无法找到initialLink。


void commonFunction(PendingDynamicLinkData? initialLink){
if (initialLink != null) {
String code;
final Uri deepLink = initialLink.link;
final String deeplinkString = deepLink.toString();
code = deepLink.queryParameters['code'] ?? 'No code';
var start = deeplinkString.lastIndexOf('/') + 1;
var end = deeplinkString.indexOf('?');
var extract = deeplinkString.substring(start, end);
if (extract == 'password-reset') {
return Redirect(
'/login/forgot-password',
queryParameters: {
'isSendEmail': 'true',
'code': code,
},
);
}
}
}

最新更新