标签: flutter

空安全和地图

您如何处理以下情况:

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”。

用 抛弃可空性是否正确!,或者是否有更干净的方法?

dart flutter dart-null-safety

5
推荐指数
1
解决办法
5476
查看次数

无效参数:类型为 Api 的对象/工厂已在 GetIt 内注册

当我尝试在 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\n
Run Code Online (Sandbox Code Playgroud)\n

xcode dart dart-pub flutter flutter-dependencies

5
推荐指数
1
解决办法
2186
查看次数

如何检查电子邮件是否存在于 firebase Auth 中

我有一个两步登录表单,用户首先输入电子邮件,然后进入下一页,在其中输入密码。在将用户带到密码页面之前,我想检查用户输入的电子邮件是否有效以及它是否存在于 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正确实施,我收到错误。

firebase flutter

5
推荐指数
1
解决办法
1万
查看次数

在 Flutter 中使用“已弃用的代码”有什么后果?

我最近升级到了 Flutter 2.0。我有几十个现在已弃用的 Flatbutton。我需要几天时间才能把它们全部修好。在此之前发布带有弃用警告的更新会产生什么后果?该应用程序仍然可以正常构建和运行。

deprecated dart deprecation-warning flutter

5
推荐指数
1
解决办法
5762
查看次数

Flutter Admob 的 widget 在调用 setState 时出现错误

我的 Admob 小部件有问题。\n我正在为包含 Admob 横幅小部件的 flutter 应用程序开发一项新功能。\n但是当我 setState 另一个小部件的值时,Admob 小部件会出错。

\n

我在用 :google_mobile_ads: ^0.11.0+1

\n

横幅的构建方式如下:

\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      }\n
Run 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)

state set admob flutter

5
推荐指数
1
解决办法
2123
查看次数

flutter 运行期间收到多个错误消息(与 gradle 相关)

失败:构建失败并出现异常。

  • 出了什么问题:
    任务“:app:mergeExtDexDebug”执行失败。

无法解析配置“: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) …

gradle flutter

5
推荐指数
1
解决办法
1686
查看次数

Flutter 自定义包未加载字体和图片 | 扑

我正在创建一个包。我在 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)

dart flutter

5
推荐指数
1
解决办法
1309
查看次数

BehaviorSubject 添加相同的值

您好,我有一个具有简单类型 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)

dart flutter rxdart

5
推荐指数
1
解决办法
1699
查看次数

如何在 App Bar Flutter 中创建线性渐变?

我正在尝试在应用程序栏中添加线性渐变,但到目前为止我还没有设法做到这一点。有谁知道如何将其添加到我的应用程序栏中?谢谢

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)

gradient dart android-appbarlayout flutter flutter-appbar

5
推荐指数
2
解决办法
2248
查看次数

LocationNotFoundException(名称为“GMT”的位置不存在)

我需要创建本地通知以进行调度,问题是当我使用 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)

push-notification dart flutter

5
推荐指数
1
解决办法
2065
查看次数