小编Bre*_*ton的帖子

dart nullsafey 并使用旧包

我启用了 dart 2.8 nullsafety 实验。

我已将我的应用程序转换为 nullsafety,但它使用的是旧的 pre-nullsafety 包。

问题是旧包有一个可以返回null的方法:

/// Returns the environment variable with [name] or null if it doesn't
/// exist
String env(String name);
Run Code Online (Sandbox Code Playgroud)

用法如下:

var home = env('HOME');
Run Code Online (Sandbox Code Playgroud)

如果 HOME 环境变量丢失,则env返回 null。

问题是它env被声明为返回 a String

所以当我写

var home = env('HOME');
home ??= '/home';
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

The operand can't be null, so the condition is always false.
Try removing the condition, an enclosing condition, or the whole conditional statement.
Run Code Online (Sandbox Code Playgroud)

鉴于所有 nullsaftey 发布公告都说您可以将 nullsaftey …

null dart

10
推荐指数
1
解决办法
9361
查看次数

analysis_options.yaml 未找到包含的文件

我有一个使用 Effective_dart 的 flutter 包,它按预期工作。(我已经通过添加/删除包含来明确测试了这一点,并确保警告按预期来来去去。)

我的 pubspec.yaml 中有 Effective_dart 依赖项,如下所示:

name: sounds
version: 0.9.1

repository: https://github.com/bsutton/sounds
homepage: https://github.com/bsutton/sounds
documentation: https://github.com/bsutton/sounds/wiki
description: Sounds provide a complete api and Widgets for audio playback and recording. Both iOS and Android are supported.
environment: 
  sdk: '>=2.1.0 <3.0.0'
  flutter: '>=1.17.0 <2.0.0'
dependencies: 
  device_info: '>=0.4.2+4 <2.0.0'
  flutter_spinkit: ^4.0.0
  meta: ^1.1.8
  path: ^1.6.4
  path_provider: ^1.6.7
  provider: ^4.1.0
  sounds_common: ^1.0.1
  uuid: ^2.0.4
  flutter: 
    sdk: flutter
dev_dependencies: 
  pedantic: ^1.9.0
  effective_dart: ^1.2.1
  dshell: ^1.0.0
  e2e: ^0.5.0
  lint: ^1.1.1
  pub_semver: ^1.4.4 …
Run Code Online (Sandbox Code Playgroud)

analysis dart flutter

9
推荐指数
4
解决办法
2779
查看次数

如何调试第三方flutter插件

我正在构建一个使用第三方插件的 flutter 应用程序。

该插件在其 android java 代码中有一个错误。

问题是我无法找到有关如何设置开发环境以从我的应用程序中调试插件的文档。

我应该注意到原始开发人员无法重现该错误,因此我需要让它在我的应用程序中运行。

到目前为止,我发现的说明涉及必须构建 apk,但这很耗时,而且似乎没有必要。

我是一名经验丰富的 java 和 dart 程序员,所以我在基础知识方面没有问题(即我有 Android Studio 和 vs 代码运行,我可以使用它自己的示例代码调试插件)。

这是我到目前为止的过程:

git clone the plugin to my local system.

Within my application add an override in my apps pubspec.yaml to 
import the plugin from my local system.

dependency_overrides:
  flutter_sound:
    path: ../flutter_sound

Build my app so we can open in android studio.


    Note: I had to delete my .pub-cache/hosted folder and then run 
   'flutter pub get' as some older (unused?) …
Run Code Online (Sandbox Code Playgroud)

debugging plugins android flutter

7
推荐指数
1
解决办法
2439
查看次数

如何在空安全 Dart 中将 List&lt;String?&gt; 转换为 List&lt;String&gt;?

我有一个飞镖列表:

List<String?> vals;
Run Code Online (Sandbox Code Playgroud)

我想删除任何空值并将其转换为List<String>. 我试过了:

List<String> removeNulls(List<String?> list) {
  return list.where((c) => c != null).toList() as List<String>;
}
Run Code Online (Sandbox Code Playgroud)

在运行时,我收到以下错误:

List<String?>' is not a subtype of type 'List<String>?'
Run Code Online (Sandbox Code Playgroud)

解决这个问题的正确方法是什么?

dart dart-null-safety

7
推荐指数
1
解决办法
593
查看次数

Dart 泛型 - 类型不是子类型

我从 Dart 通用函数中收到运行时错误:

 Widget card = widget.cardBuilder(item);
Run Code Online (Sandbox Code Playgroud)

产生:

 type '(Contact) => Widget' is not a subtype of type '(DeletableItem) => Widget'
Run Code Online (Sandbox Code Playgroud)

Contact 类定义为

class Contact
implements DeletableItem
{
Run Code Online (Sandbox Code Playgroud)

然后我有一个方法:

 class UndoableListView<T extends DeletableItem>
 {
      List<T> children;
      final Widget Function(T item) cardBuilder;
Run Code Online (Sandbox Code Playgroud)

这就是运行时错误发生的地方

 Widget buildItem(BuildContext context, int index) {
 T item = children[index];
 Widget card = widget.cardBuilder(item);   <<<<< error thrown here.
Run Code Online (Sandbox Code Playgroud)

我显然误解了泛型如何工作。

Contact 显然扩展了 DeleteableItem。

那么我做错了什么?

generics subtype dart

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

使用 dart ffi 进行类型安全内存分配

我试图让我的代码在为 ffi 分配内存时更加健壮。

我写了以下函数:

void withMemory<T extends NativeType>(
    int size, void Function(Pointer<T> memory) action) {
  final memory = calloc<Int8>(size);
  try {
    action(memory.cast());
  } finally {
    calloc.free(memory);
  }
}
Run Code Online (Sandbox Code Playgroud)

为了调用上面的函数,我使用:

withMemory<Uint32>(sizeOf<Uint32>(), (phToken) {
  // use the memory allocated to phToken
});
Run Code Online (Sandbox Code Playgroud)

这是可行的,但正如你所看到的,我需要传递 Uint32 两次以及sizeOf.

我真正想写的是:

withMemory<Uint32>((phToken) {
  // use the memory allocated to phToken
});

Run Code Online (Sandbox Code Playgroud)

问题是您无法将泛型类型传递给以下calloc任何一个sizeOf错误:

[...] 的类型参数必须是编译时常量,但类型参数不是常量。尝试将类型参数更改为常量类型。

有什么办法可以解决这个问题吗?

generics ffi dart dart-ffi

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

Flutter:如何在没有小部件的情况下跟踪应用程序生命周期

我参与了 FlutterSound 项目,该项目作为包含 api 的包提供,但就本问题而言,该项目不包含小部件。

当应用程序更改其状态(AppLifecycleState.pause/resume)时,API 需要处理事件。(当应用程序暂停/恢复时,我们需要停止/恢复音频)。

我可以看到如何使用 WidgetsBindingObserver 在小部件中执行此操作,但 api 需要相同的信息,而不必依赖小部件。

SchedulerBinding 类有一个方法 handleAppLifecycleStateChanged ,它似乎提供了所需的信息,但不清楚如何在小部件之外实现它。

application-lifecycle flutter

3
推荐指数
1
解决办法
3405
查看次数

颤振酒吧升级失败

颤振酒吧升级

Git error. Command: git rev-list --max-count=1 android-x
fatal: ambiguous argument 'android-x': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
pub upgrade failed (server unavailable) -- attempting retry 1 in 1 second...

Run Code Online (Sandbox Code Playgroud)

我尝试过稳定版和测试版渠道,结果相同。

upgrade flutter

2
推荐指数
1
解决办法
819
查看次数

vaadin 22 未找到默认路由

我的 vaadin Web 应用程序有一个默认路由。我正在运行 tomcat 8.5,没有 springboot。

package dev.mine.ui.user.views;


import com.vaadin.flow.router.BeforeEnterEvent;
import com.vaadin.flow.router.BeforeEnterObserver;
import com.vaadin.flow.router.Route;


@Route(value = "")
public class DefaultView implements BeforeEnterObserver
{
    public DefaultView()
    {
    }

    @Override
    public void beforeEnter(BeforeEnterEvent event)
    {
        event.forwardTo(SearchView.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有 web.xml,而是使用 @WebServlet 注释

package dev.mine.servlets;

import javax.servlet.annotation.WebServlet;

import com.vaadin.flow.server.VaadinServlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;

@WebServlet(urlPatterns =
{ "/*", "/VAADIN/*" }, name = "Mine", asyncSupported = true, initParams =
{
        @WebInitParam(name = "org.atmosphere.cpr.AtmosphereInterceptor", value = "dev.onepub.servlets.AtmosphereFilter"),
        @WebInitParam(name = "closeIdleSessions", value = "true"),

        /// changed …
Run Code Online (Sandbox Code Playgroud)

routes vaadin vaadin22

2
推荐指数
1
解决办法
406
查看次数

如何将 github 赞助商按钮添加到自述文件中

我通过我的 github 存储库启用了 github 赞助。

我想在实际的 readme.md 以及另一个网站中添加一个“赞助商”按钮。

有什么可以将赞助商按钮添加到这些类型的位置吗?

github

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

将ifPresent与orElseThrow一起使用

因此,我必须丢失一些东西,如果要使用Optional,我希望执行一个语句块,否则会引发异常。

Optional<X> oX;

oX.ifPresent(x -> System.out.println("hellow world") )
.orElseThrow(new RuntimeException("x is null");
Run Code Online (Sandbox Code Playgroud)

如果oX不为null,则打印hello world。如果oX是,null则抛出运行时异常。

java optional

0
推荐指数
2
解决办法
87
查看次数