phase3(critical-path): store + main + routes + nav components null-safe

- store/state + reducers: nullable AppState fields & reducer types
- main.dart: localeResolutionCallback Locale?, settings.name? guard
- routes.dart: fluro 2.0.5 HandlerFunc (BuildContext?) + params['x']!
- navigationbar/breadcrumbs/bottom_nav/text_link: nullable optional params/fields
This commit is contained in:
2026-07-24 13:37:04 +08:00
parent cef00db911
commit ae4c4046c3
6 changed files with 106 additions and 102 deletions

View File

@@ -11,22 +11,22 @@ import '../../routes.dart';
class TextLink extends StatelessWidget {
final String title;
final String url;
final Color color;
final Color hoverColor;
final double paddingHorizontal;
final double paddingVertical;
final FontWeight fontWeight;
final bool selected;
final Color? color;
final Color? hoverColor;
final double? paddingHorizontal;
final double? paddingVertical;
final FontWeight? fontWeight;
final bool? selected;
final bool isLink;
final bool replace;
final bool clearStack;
final bool maintainState;
final bool rootNavigator;
final TransitionType transition;
final TransitionType? transition;
final bool closeDrawer;
final bool isEmail;
final bool isPhone;
final double fontSize;
final double? fontSize;
final bool isAddress;
final TextOverflow overflow;
final int maxLines;
@@ -38,19 +38,19 @@ class TextLink extends StatelessWidget {
this.paddingVertical,
this.fontWeight,
this.selected,
bool isLink,
bool replace,
bool clearStack,
bool maintainState,
bool rootNavigator,
bool? isLink,
bool? replace,
bool? clearStack,
bool? maintainState,
bool? rootNavigator,
this.transition,
bool closeDrawer,
bool isEmail,
bool isPhone,
double fontSize,
bool isAddress,
TextOverflow overflow,
int maxLines,
bool? closeDrawer,
bool? isEmail,
bool? isPhone,
double? fontSize,
bool? isAddress,
TextOverflow? overflow,
int? maxLines,
}) :
isLink = isLink ?? false,
replace = replace ?? false,
@@ -60,7 +60,7 @@ class TextLink extends StatelessWidget {
closeDrawer = closeDrawer ?? false,
isEmail = isEmail ?? false,
isPhone = isPhone ?? false,
fontSize = fontSize ?? null,
fontSize = fontSize,
isAddress = isAddress ?? false,
overflow = overflow ?? TextOverflow.ellipsis,
maxLines = maxLines ?? 1;
@@ -101,7 +101,7 @@ class TextLink extends StatelessWidget {
},
),
decoration: BoxDecoration(
border: (selected != null && selected) ? Border(
border: (selected == true) ? Border(
bottom: BorderSide(
color: color ?? Colors.blue,
width: 3.0,
@@ -110,7 +110,7 @@ class TextLink extends StatelessWidget {
),
),
onTap: () async {
if (selected == null || !selected) {
if (selected != true) {
if (isEmail) {
Utils.openEmail(url);
} else if (isPhone) {