您如何处理以下情况:
void main() {
print(getInt('d'));
}
Map<String, int> myMap = {'a':1, 'b':2, 'c':3};
int getInt(String key) {
if (!myMap.containsKey(key)) {
myMap[key] = 0;
}
return myMap[key]!;
}
Run Code Online (Sandbox Code Playgroud)
myMap[key]永远不会为空,但如果我删除 of ,!则会return myMap[key]!;出现空安全错误:
“int”类型的值?无法从函数“getInt”返回,因为它的返回类型为“int”。
用 抛弃可空性是否正确!,或者是否有更干净的方法?
当我尝试在 iOS 模拟器上启动我的 flutter 应用程序时,我看到一个白色的空白屏幕,如下所示:
\n Launching lib/main.dart on iPhone 12 Pro Max in debug mode...\nRunning Xcode build... \n \xe2\x94\x94\xe2\x94\x80Compiling, linking and signing... 13.7s\nXcode build done. 38.0s\n[VERBOSE-2:ui_dart_state.cc(186)] Unhandled Exception: Invalid argument(s): Object/factory with type Api is already registered inside GetIt. \n#0 throwIf (package:get_it/get_it_impl.dart:7:18)\n#1 _GetItImplementation._register (package:get_it/get_it_impl.dart:729:5)\n#2 _GetItImplementation.registerLazySingleton (package:get_it/get_it_impl.dart:502:5)\n#3 setupLocator (package:r/locator.dart:14:18)\n#4 main (package:r/main.dart:12:3)\n#5 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:140:25)\n#6 _rootRun (dart:async/zone.dart:1354:13)\n#7 _CustomZone.run (dart:async/zone.dart:1258:19)\n#8 _runZoned (dart:async/zone.dart:1788:10)\n#9 runZonedGuarded (dart:async/zone.dart:1776:12)\n#10 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:133:5)\n#11 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:283:19)\n#12 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.<\xe2\x80\xa6>\nSyncing files to device iPhone 12 Pro Max... 137ms\nRun Code Online (Sandbox Code Playgroud)\n 我有一个两步登录表单,用户首先输入电子邮件,然后进入下一页,在其中输入密码。在将用户带到密码页面之前,我想检查用户输入的电子邮件是否有效以及它是否存在于 firebase 中。我读过一些关于使用fetchSignInMethodsForEmail. 但是,我不太确定如何实现这一点。
这个想法是,如果电子邮件确实存在,则用户将被带到密码页面,但是,如果电子邮件不存在,则会弹出一个带有按钮的小吃栏,将用户带到注册页面。我该怎么做呢?
这就是我到目前为止所拥有的......
FirebaseAuth auth = FirebaseAuth.instance;
final nextButton = Container(
margin: const EdgeInsets.only(
top: 30.0,
),
child: FloatingActionButton(
onPressed: () async {
try {
List<String> userSignInMethods = await auth.fetchSignInMethodsForEmail(email)(
email: _emailController.text,
);
if (userSignInMethods != null) {
final page = LoginPassword();
Navigator.of(context).push(CustomPageRoute(page));
}
} catch (e) {
print(e);
//TODO: Snackbar
}
},
tooltip: 'Next',
backgroundColor: AppTheme.define().primaryColor,
child: Icon(
AppIcons.next_button,
size: 20.0,
),
),
);Run Code Online (Sandbox Code Playgroud)
未fetchSignInMethodsForEmail正确实施,我收到错误。
我最近升级到了 Flutter 2.0。我有几十个现在已弃用的 Flatbutton。我需要几天时间才能把它们全部修好。在此之前发布带有弃用警告的更新会产生什么后果?该应用程序仍然可以正常构建和运行。
我的 Admob 小部件有问题。\n我正在为包含 Admob 横幅小部件的 flutter 应用程序开发一项新功能。\n但是当我 setState 另一个小部件的值时,Admob 小部件会出错。
\n我在用 :google_mobile_ads: ^0.11.0+1
横幅的构建方式如下:
\n @override\n void initState() {\n setState(() {\n _adBanner = createBannerAd();\n });\n super.initState();\n }\n\n @override\n void dispose() {\n _adBanner.dispose();\n super.dispose();\n }\nRun Code Online (Sandbox Code Playgroud)\n小部件的显示如下:
\n Container(\n margin: EdgeInsets.only(bottom: myPercent(2, screenHeight)),\n child: FutureBuilder(\n future: _adBanner.load(),\n builder: (context, snapshot) {\n if (snapshot.connectionState == ConnectionState.done) {\n return Container(\n margin: EdgeInsets.only(bottom: 3),\n width: myPercent(95, screenWidth),\n height: myPercent(6, screenHeight),\n alignment: Alignment.center,\n child: AdWidget(\n ad: _adBanner,\n ),\n );\n }\n return Container();\n …Run Code Online (Sandbox Code Playgroud) 失败:构建失败并出现异常。
无法解析配置“:app:debugRuntimeClasspath”的所有文件。无法转换 flutter_embedding_debug-1.0.0-40441def692f444660a11e20fac37af9050245ab.jar (io.flutter:flutter_embedding_debug:1.0.0-40441def692f444660a11e20fac37af9050245ab) 以匹配属性 {artifactType=android -dex,dexing-enable-desugaring = true,dexing-incremental-transform = false ,dexing-is-debuggable=true,dexing-min-sdk=16,org.gradle.category=library,org.gradle.libraryelements=jar,org.gradle.status=release,org.gradle.usage=java-runtime }。> DeshingWithClasspathTransform 执行失败:C:\Users\Sam.gradle\caches\transforms-2\files-2.1\94c065a96316af7856a75b110bf34124\jetified-flutter_embedding_debug-1.0.0-40441def692f444660a11e20fac37af9050245 ab.jar。> 无法解析结果路径字符串:无法转换 kotlin-stdlib-jdk7-1.3.50.jar (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50) 以匹配属性 {artifactType=android-dex, dexing-启用-desugaring = true,dexing-incremental-transform = false,dexing-is-debuggable = true,dexing-min-sdk = 16,org.gradle.category =库,org.gradle.libraryelements = jar,org.gradle。状态=发布,org.gradle.usage=java-runtime}。> DexingWithClasspathTransform 执行失败:C:\Users\Sam.gradle\caches\transforms-2\files-2.1\6697cfdd11e9fefb1f002637ca986f5e\jetified-kotlin-stdlib-jdk7-1.3.50.jar。> 无法解析结果路径字符串:无法转换 core-1.1.0.aar (androidx.core:core:1.1.0) 以匹配属性 {artifactType=android-dex, dexing-enable-desugaring=true, dexing-incremental-变换=假,dexing-is-debuggable=true,dexing-min-sdk=16,org.gradle.status=release,org.gradle.usage=java-runtime}。> DeshingWithClasspathTransform 执行失败:C:\Users\Sam.gradle\caches\transforms-2\files-2.1\a8ccdc10d176ccbaeffe0deff7255b0d\core-1.1.0-runtime.jar。> 无法解析结果路径字符串:
无法转换 core-1.1.0.aar (androidx.core:core:1.1.0) 以匹配属性 {artifactType=android-dex, dexing-enable-desugaring=true, dexing-incremental-变换=假,dexing-is-debuggable=true,dexing-min-sdk=16,org.gradle.status=release,org.gradle.usage=java-runtime}。> DeshingWithClasspathTransform 执行失败:C:\Users\Sam.gradle\caches\transforms-2\files-2.1\a8ccdc10d176ccbaeffe0deff7255b0d\core-1.1.0-runtime.jar。> 无法解析结果路径字符串:
无法转换 core-1.1.0.aar (androidx.core:core:1.1.0) 以匹配属性 {artifactType=android-dex, dexing-enable-desugaring=true, dexing-incremental-transform=false, dexing-is -debuggable=true,dexing-min-sdk=16,org.gradle.status=release,org.gradle.usage=java-runtime}。> DeshingWithClasspathTransform 执行失败:C:\Users\Sam.gradle\caches\transforms-2\files-2.1\a8ccdc10d176ccbaeffe0deff7255b0d\core-1.1.0-runtime.jar。> 无法解析结果路径字符串:无法转换 core-1.1.0.aar (androidx.core:core:1.1.0) 以匹配属性 {artifactType=android-dex, dexing-enable-desugaring=true, dexing-incremental-变换=假,dexing-is-debuggable=true,dexing-min-sdk=16,org.gradle.status=release,org.gradle.usage=java-runtime}。> DeshingWithClasspathTransform 执行失败:C:\Users\Sam.gradle\caches\transforms-2\files-2.1\a8ccdc10d176ccbaeffe0deff7255b0d\core-1.1.0-runtime.jar。> 无法解析结果路径字符串:无法转换 core-1.1.0.aar (androidx.core:core:1.1.0) …
我正在创建一个包。我在 lib 目录连续添加了两个目录:字体和图像。我还在 pubspec.yaml 文件中添加了所需的代码,以使用包中的这些字体和图像。我在包目录中创建了一个示例目录,以便测试我正在创建的包,但测试应用程序不会从包中选取字体和图像并给出异常:
FlutterError(无法加载资源:images/abc.png)
目录截图[1]:https://i.stack.imgur.com/po8oT.png
pubspec.yaml:
name: customtestingpackage
description: A new Flutter package project.
version: 0.0.1
author:
homepage:
environment:
sdk: ">=2.7.0 <3.0.0"
flutter: ">=1.17.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons:
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
fonts:
- family: Comfortaa
fonts:
- asset: fonts/comfortaa/Comfortaa-Regular.ttf
weight: 400
- asset: fonts/comfortaa/Comfortaa-Medium.ttf
weight: 500
- family: Poppins
fonts:
- asset: fonts/poppins/Poppins-Regular.ttf
weight: 400
- asset: fonts/poppins/Poppins-Medium.ttf
weight: 500
Run Code Online (Sandbox Code Playgroud)
main.dart: 字体的实现
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.w500,
color: …Run Code Online (Sandbox Code Playgroud) 您好,我有一个具有简单类型 int 的BehaviorSubject,我向其中添加值 5,然后添加另一个值 5。流侦听器向我发送了两个事件。如何强制检查值,并且在该值等于最后一个值时不发送事件。示例代码:
class TestBloc {
TestBloc(){
testBehavior.stream.listen((event) {
print('Event value = $event');
});
addValueToStream();
addValueToStream();
}
final testBehavior = BehaviorSubject<int>();
void addValueToStream() {
testBehavior.add(5);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在应用程序栏中添加线性渐变,但到目前为止我还没有设法做到这一点。有谁知道如何将其添加到我的应用程序栏中?谢谢
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [const Color(0xFFF06292), const Color(0xff2A75BC)]),
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样
class RegisterAgree extends StatefulWidget {
@override
_RegisterAgreeState createState() => _RegisterAgreeState();
}
class _RegisterAgreeState extends State<RegisterAgree> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.pink,
title: Row(
children: <Widget>[
Image.asset(
'assets/images/logox.png',
fit: BoxFit.cover,
height: 45.0,
)
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud) 我需要创建本地通知以进行调度,问题是当我使用 setLocalLocation 函数获取等于 的时区名称时[log] timeZoneName value is =>GMT
。
例外是:
LocationNotFoundException (Location with the name "GMT" doesn't exist)
Run Code Online (Sandbox Code Playgroud)
主要功能:
const MethodChannel platform = MethodChannel('dexterx.dev/example_app');
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await _configureLocalTimeZone();
runApp(MyApp());
}
Run Code Online (Sandbox Code Playgroud)
_configureLocalTimeZone函数:
Future<void> _configureLocalTimeZone() async {
tz.initializeTimeZones();
final String timeZoneName = await platform.invokeMethod('getTimeZoneName');
log("timeZoneName value is =>$timeZoneName",error: {"name":"Value or not"});
tz.setLocalLocation(tz.getLocation(timeZoneName));
}
Run Code Online (Sandbox Code Playgroud)