小编Mar*_*cel的帖子

Android的SharedPreferences commit()什么时候返回false?

在我的应用程序中,我正在存储一些数据SharedPreferences- 它可以根据需要运行.现在我想为一些不正确的情况创建日志消息.

我成功处理了首选项为空或在加载时抛出异常的情况.在保存值时可以显示的唯一错误是commit()返回false- 我不知道为什么会发生这种情况以及在这种情况下我应该做些什么.

所以我的问题是:该commit()方法何时返回false?在那种情况下我该怎么办?一个可能的解决方案是commit()一次又一次地呼叫(类似的东西while (!editor.commit()) {})?

android sharedpreferences

19
推荐指数
3
解决办法
2962
查看次数

Flutter:使用动态ListView显示分页API的内容

我是Flutter的新手所以请耐心等待.我有一个分页API,这意味着在调用时example.com?loaditems.php?page=0将加载前10个项目(播客列表),example.com?loaditems.php?page=1并将加载项目从10到20,依此类推.我希望StreamBuilder首先获取第0页,然后当列表到达底部时,它应该加载第1页并显示它.要检查我是否已到达列表视图中的最后一项,我使用的ScrollController是ListView.

现在我在bloc模式中使用StreamBuilder,ListView,InheritedWidget.我不确定我是否已正确实现它所以我将粘贴整个代码.我的问题是,这是正确的BLOC模式方式吗?如果不是那么它是什么?我还看到了这篇文章:https://crossingthestreams.io/loading-paginated-data-with-list-views-in-flutter/ 最后它说"更新:"但我无法理解它.

这是' 应用程序的切入点:

void main() => runApp(new MaterialApp(
title: "XYZ",
theme: ThemeData(fontFamily: 'Lato'),
home: PodcastsProvider( //This is InheritedWidget
  child: RecentPodcasts(), //This is the child of InheritedWidget
 ),
));
Run Code Online (Sandbox Code Playgroud)

这是InheritedWidget PodcastsProvider:

class PodcastsProvider extends InheritedWidget{

    final PodcastsBloc bloc;  //THIS IS THE BLOC

    PodcastsProvider({Key key, Widget child})
    :   bloc = PodcastsBloc(),
    super(key: key, child: child);

    @override
    bool updateShouldNotify(InheritedWidget oldWidget) {
      return true;
    }

    static PodcastsBloc of(BuildContext context){
      return (context.inheritFromWidgetOfExactType(PodcastsProvider) …
Run Code Online (Sandbox Code Playgroud)

flutter

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

禁用Flutter的“红色死亡屏幕”

有没有办法禁用Flutter的“死亡的红色屏幕”?我不介意在调试过程中使用它,但是它似乎也出现在生产版本中-而且我找不到有关如何禁用它或自己捕获错误的任何信息。

我尝试使用FlutterError.onError和捕获杂散错误runZoned(onError),但是两者都没有阻止红屏的出现。

作为参考,我正在谈论以下屏幕:

索德

error-handling dart flutter

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

Dart:如何高效初始化多个依赖同一个计算的final字段?

我有一个包含多个字段的 Dart 类,这些字段必须是final,因为该类扩展了另一个标有@immutable. 这些字段的值应该在创建类的实例时计算。在 Dart 中,“必须在构造函数体开始之前初始化最终实例变量”(来自 dartlang.org)。在该范围内,您只能调用static方法。

这对我有用,除了某些字段依赖于相同的计算,这意味着相同的计算进行了两次。有没有办法避免这种情况,即通过保存一些临时结果?

我目前的代码:

class _IntegralCurve extends Curve {
  static double delta = 0.01;

  _IntegralCurve(this.original) :
      integral = calculateIntegral(original),
      values = calculateNormalizedValues(original);

  final Curve original;
  final double integral; // Accessible to other classes.
  final Map<double, double> values;

  /// Does the actual integrating work. Called twice.
  static Map<double, double> integrate(Curve original) {
    double integral = 0.0;
    final values = Map<double, double>();

    for (double t = 0.0; …
Run Code Online (Sandbox Code Playgroud)

dart flutter

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

检测用户是否将当前页面留在Flutter中?

有什么方法可以检测用户是否离开当前页面?我认为这WidgetsBinding不会起作用,因为它可以自行处理这些事件。那么,有人有什么解决方案吗?任何帮助表示赞赏。

flutter

6
推荐指数
3
解决办法
1584
查看次数

如何在抽象类中声明工厂构造函数?

我想声明,但不想在抽象类中定义工厂构造函数。

就我而言,我想创建一个方法,该方法可以接受实现该String toJson()方法的任何类以及fromJson(Map<String, dynamic> data)工厂构造函数。

有什么办法可以在Dart中实现?我正在寻找类似以下内容的东西,这是无效的Dart代码:

abstract class JsonSerializable {
  factory fromJson(Map<String, dynamic> data);
  String toJson();
}
Run Code Online (Sandbox Code Playgroud)

dart

6
推荐指数
2
解决办法
305
查看次数

如何为字段注释生成 Dart 代码?

我正在使用 为 Dart 编写代码生成器build_runner,但是我的构建器没有被调用以在字段中进行注释,尽管它确实适用于类中的注释。

是否也可以在字段(或任何地方)调用生成器进行注释?

例如,为以下文件调用构建器:

import 'package:my_annotation/my_annotation.dart';

part 'example.g.dart';

@MyAnnotation()
class Fruit {
  int number;
}
Run Code Online (Sandbox Code Playgroud)

但不是这个:

import 'package:my_annotation/my_annotation.dart';

part 'example.g.dart';

class Fruit {
  @MyAnnotation()
  int number;
}
Run Code Online (Sandbox Code Playgroud)

这是注释的定义:

class MyAnnotation {
  const MyAnnotation();
}
Run Code Online (Sandbox Code Playgroud)

这就是生成器的定义方式。目前,只要调用它就会中止,从而导致打印错误消息。

library my_annotation_generator;

import 'package:analyzer/dart/element/element.dart';
import 'package:build/build.dart';
import 'package:my_annotation/my_annotation.dart';
import 'package:source_gen/source_gen.dart';

Builder generateAnnotation(BuilderOptions options) =>
    SharedPartBuilder([MyAnnotationGenerator()], 'my_annotation');

class MyAnnotationGenerator extends GeneratorForAnnotation<MyAnnotation> {
  @override
  generateForAnnotatedElement(Element element, ConstantReader annotation, _) {
    throw CodeGenError('Generating code for annotation is not implemented yet.');
}
Run Code Online (Sandbox Code Playgroud)

这是build.yaml配置: …

dart build-runner

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

滚动浏览Flutter底表

我正在使用Flutter模态底板来显示一些选项供用户选择。我有一个Column带有ListTiles 的列表作为底部工作表的内容。

我的问题是,如果我有6 ListTiles 以上的时间,某些将被切断而不显示。

有没有办法使底部的工作表可滚动?

flutter

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

在迭代器上创建方法,在 Rust 中返回迭代器

我想定义一个square()没有不必要的运行时开销(没有dyn关键字)的惰性方法,可以在 any 上调用Iterable<Item = u8>并返回另一个Iterable<Item = u8>,如下所示:

fn main() {
    vec![1, 2, 3, 4, 5]
        .iter()
        .filter(|x| x > 1)
        .squared()
        .filter(|x| x < 20);
}
Run Code Online (Sandbox Code Playgroud)

我知道如何定义squared()为独立函数:

fn squared<I: Iterator<Item = u8>>(iter: I) -> impl Iterator<Item = u8> {
    iter.map(|x| x * x)
}
Run Code Online (Sandbox Code Playgroud)

Iterator<Item = u8>不过,要定义该方法,我必须首先定义一个trait. 这就是我挣扎的地方?-?traits 不能impl在返回值中使用关键字。

我正在寻找类似以下的东西,但它不起作用:

trait Squarable<I: Iterator<Item = u8>> {
    fn squared(self) -> I;
}

impl<I, J> Squarable<I> for …
Run Code Online (Sandbox Code Playgroud)

iterator rust

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

用于检查表达式是否与 Rust 中的模式匹配的布尔表达式

我有一个Vec值,并且想要filter那些匹配特定模式的值。
什么是惯用的办法只有检查,如果一个表达式匹配的模式,而不必做一些与比赛?

enum Kind {
    A,
    B(char),
}

let vector: Vec<Option<Kind>> = ...;
vector.filter(|item| /* check if item matches pattern Some(Kind::B(_)) */)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用match关键字:

vector.filter(|item| match item {
  Some(Kind::B(_)) => true,
  _ => false,
})
Run Code Online (Sandbox Code Playgroud)

if let关键字:

vector.filter(|item| {
  if let Some(Kind::B(_)) = item {
    true
  } else {
    false
  }
})
Run Code Online (Sandbox Code Playgroud)

但是在这两个示例中,代码看起来仍然很庞大,因为我需要手动提供truefalse常量。我觉得应该有一种更优雅的方式来做到这一点,类似于以下内容:

vector.filter(|item| matches(item, Some(Kind::B(_))))
Run Code Online (Sandbox Code Playgroud)

pattern-matching matching rust

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