Flutter 颤振:当使用ProgressDialog双击或长按Cupertino文本字段时,应用程序崩溃
当应用程序正在执行一些重要的IO操作时,我用它来显示进度UI。但我注意到,当我们双击或长按任何文本输入字段时,应用程序崩溃/在调试时显示红色屏幕 以下是相关日志:Flutter 颤振:当使用ProgressDialog双击或长按Cupertino文本字段时,应用程序崩溃,flutter,Flutter,当应用程序正在执行一些重要的IO操作时,我用它来显示进度UI。但我注意到,当我们双击或长按任何文本输入字段时,应用程序崩溃/在调试时显示红色屏幕 以下是相关日志: ======== Exception caught by widgets library ======================================================= The following ArgumentError was thrown building _OverlayEntryWidget
======== Exception caught by widgets library =======================================================
The following ArgumentError was thrown building _OverlayEntryWidget-[LabeledGlobalKey<_OverlayEntryWidgetState>#235b1](dirty, dependencies: [MediaQuery], state: _OverlayEntryWidgetState#faabb):
Invalid argument(s): 26.0
The relevant error-causing widget was:
ProgressDialog file:///Users/bipinvaylu/Documents/Work/Workspaces/xyzapp/lib/main.dart:89:24
When the exception was thrown, this was the stack:
#0 double.clamp (dart:core-patch/double.dart:183:7)
#1 _CupertinoTextSelectionControls.buildToolbar (package:flutter/src/cupertino/text_selection.dart:478:72)
#2 TextSelectionOverlay._buildToolbar (package:flutter/src/widgets/text_selection.dart:578:34)
#3 _OverlayEntryWidgetState.build (package:flutter/src/widgets/overlay.dart:179:34)
#4 StatefulElement.build (package:flutter/src/widgets/framework.dart:4744:28)
...
====================================================================================================
main.dart - MyApp:
class MyApp extends StatelessWidget {
MyApp();
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
return Localizations(
locale: const Locale('en', 'US'),
delegates: <LocalizationsDelegate<dynamic>>[
DefaultWidgetsLocalizations.delegate,
DefaultMaterialLocalizations.delegate,
],
child: MediaQuery(
data: const MediaQueryData(),
child: ThemeBuilder(
defaultThemeMode: ThemeMode.system,
darkTheme: darkTheme,
lightTheme: lightTheme,
statusBarColorBuilder: (theme) => HomePage.tabBackgroundColor,
themes: getThemes(),
builder: (context, regularTheme, darkTheme, themeMode) {
return LayoutBuilder(
//return LayoutBuilder
builder: (context, constraints) {
return OrientationBuilder(
//return OrientationBuilder
builder: (context, orientation) {
//initialize SizerUtil()
SizerUtil().init(constraints, orientation);
return ProgressDialog(
orientation: ProgressOrientation.vertical,
loadingText: "Please wait...",
backgroundColor: Theme.of(context).backgroundColor,
child: MaterialApp(
title: "Xyz app",
theme: regularTheme,
darkTheme: darkTheme,
themeMode: themeMode,
home: SplashScreen(),
),
);
});
});
},
),
),
);
}
}
Text input field setup in other screen as follow:
Expanded(
child: CupertinoTextField(
controller: _userNameTextController,
keyboardType: TextInputType.name,
placeholder: "Friend username",
style: Theme.of(context).textTheme.bodyText1,
cursorColor: Theme.of(context).primaryColor,
prefix: Padding(
padding:
const EdgeInsets.fromLTRB(9.0, 6.0, 9.0, 6.0),
child: Icon(
Icons.search,
color: Theme.of(context).primaryColor,
),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.0),
color: Theme.of(context).accentColor.withAlpha(70),
),
),
),
=======小部件库捕获的异常=======================================================
在生成_OverlayEntryWidget-[LabeledGlobalKey#235b1](脏,依赖项:[MediaQuery],状态:_OverlayEntryWidgetState#faabb)时引发了以下ArgumentError:
无效参数:26.0
导致错误的相关小部件是:
进展对话file:///Users/bipinvaylu/Documents/Work/Workspaces/xyzapp/lib/main.dart:89:24
引发异常时,这是堆栈:
#0双夹钳(省道:芯片/双。省道:183:7)
#1 _CupertinoTextSelectionControls.buildToolbar(包:flatter/src/cupertino/text_selection.dart:478:72)
#2 text选择overlay.\u buildToolbar(包:flatter/src/widgets/text\u selection.dart:578:34)
#3\u OverlayEntryWidgetState.build(包:flatter/src/widgets/overlay.dart:179:34)
#4 StatefulElement.build(包:flatter/src/widgets/framework.dart:4744:28)
...
====================================================================================================
main.dart-MyApp:
类MyApp扩展了无状态小部件{
MyApp();
@凌驾
小部件构建(构建上下文){
SystemChrome.setPreferredOrientations([
DeviceOrientation.Up,
]);
返回本地化(
语言环境:常量语言环境('en','US'),
代表们:[
DefaultWidgetsLocalizations.delegate,
DefaultMaterialLocalizations.delegate,
],
子项:MediaQuery(
数据:const MediaQueryData(),
孩子:ThemeBuilder(
defaultThemeMode:ThemeMode.system,
暗色:暗色,
lightTheme:lightTheme,
statusBarColorBuilder:(主题)=>HomePage.tabBackgroundColor,
主题:getThemes(),
构建器:(上下文、常规主题、暗主题、主题模型){
返回布局生成器(
//返回布局生成器
生成器:(上下文、约束){
返回方向生成器(
//返回方向生成器
生成器:(上下文、方向){
//初始化SizerUtil()
SizerUtil().init(约束、方向);
返回进度对话框(
方向:ProgressOrientation.vertical,
加载文本:“请稍候…”,
背景色:主题。背景色,
孩子:MaterialApp(
标题:“Xyz应用程序”,
主题:常规主题,
暗色:暗色,
主题模式:主题模式,
主页:SplashScreen(),
),
);
});
});
},
),
),
);
}
}
其他屏幕中的文本输入字段设置如下:
扩大(
孩子:CupertinoTextField(
控制器:_userNameTextController,
键盘类型:TextInputType.name,
占位符:“朋友用户名”,
样式:Theme.of(context).textTheme.bodyText1,
cursorColor:Theme.of(context).primaryColor,
前缀:填充(
衬垫:
LTRB的常数边集(9.0,6.0,9.0,6.0),
子:图标(
Icons.search,
颜色:主题。背景。原色,
),
),
装饰:盒子装饰(
边界半径:边界半径。圆形(8.0),
颜色:主题.of(上下文).accentColor.withAlpha(70),
),
),
),
到目前为止,我还没有找到合适的解决办法。请帮我解决这个问题。否则,我可能需要尝试切换到其他库,并做一些额外的工作。谢谢。退货资料App(
return MaterialApp(
localizationsDelegates: [GlobalMaterialLocalizations.delegate, GlobalMaterialLocalizations.delegate, localizationDelegate],
supportedLocales: localizationDelegate.supportedLocales,
locale: localizationDelegate.currentLocale,
debugShowCheckedModeBanner: false,
title: Strings.app_title,
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(builders: {
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
}),
primaryColor: themeColor.getColor(),
textTheme: TextTheme(
bodyText2: TextStyle(
color: Colors.blue,
),
bodyText1: TextStyle(
color: LightColor.theme_purple,
))),
localeResolutionCallback: (locale, supportedLocales) {
for (var supportedLocaleLanguage in supportedLocales) {
if (supportedLocaleLanguage.languageCode == locale.languageCode && supportedLocaleLanguage.countryCode == locale.countryCode) {
return supportedLocaleLanguage;
}
}
return supportedLocales.first;
},
builder: (context, child) {
return FlutterEasyLoading(
child: GestureDetector(
onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child: child,
));
},
home: <Your Widget>
);
localizationsDelegates:[GlobalMaterialAllocalizations.delegate,GlobalMaterialAllocalizations.delegate,localizationDelegate],
supportedLocales:localizationDelegate.supportedLocales,
locale:localizationDelegate.currentLocale,
debugShowCheckedModeBanner:false,
标题:Strings.app_title,
主题:主题数据(
pageTransitionsTheme:pageTransitionsTheme(生成器:{
TargetPlatform.android:CupertinoPageTransitionsBuilder(),
}),
primaryColor:themeColor.getColor(),
textTheme:textTheme(
bodyText2:TextStyle(
颜色:颜色,蓝色,
),
bodyText1:TextStyle(
颜色:LightColor.theme_紫色,
))),
localeResolutionCallback:(locale,supportedLocales){
for(在supportedLocales中使用var supportedLocaleLanguage){
if(supportedLocaleLanguage.languageCode==locale.languageCode&&supportedLocaleLanguage.countryCode==locale.countryCode){
返回支持的本地语言;
}
}
返回supportedLocales.first;
},
生成器:(上下文,子对象){
回程颤振加载(
儿童:手势检测器(
onTap:(){
FocusScopeNode currentFocus=FocusScope.of(上下文);
如果(!currentFocus.hasPrimaryFocus){
currentFocus.unfocus();
}
},
孩子:孩子,
));
},
主页:
);
最终主题颜色=Provider.of(上下文);
var localizationDelegate=LocalizedApp.of(context).delegate
使用MaterialApp()掩盖你的应用程序。
使用库颤振轻松加载:^2.2.2(
本地化报告:[全球材料Allocaliz