小编Cra*_*rds的帖子

使用“is”检查 Dart 泛型的运行时类型

我对 Dart 比较陌生,并且正在尝试对代数数据类型进行建模(例如 Swift 的具有关联值的枚举)。

但是,当我尝试检查值的运行时类型时,我看到了一些我不太了解的行为。考虑以下代码:

abstract class Fetchable<T> {
  factory Fetchable.success(T object) = FetchableSuccess;
  factory Fetchable.error(Error error) = FetchableError;
}
class FetchableSuccess<T> implements Fetchable<T> {
  final T object;
  const FetchableSuccess(this.object);
}
class FetchableError<T> implements Fetchable<T> {
  final Error error;
  const FetchableError(this.error);
}

void main() {
  // ------------- CASE 1 -------------
  final s = Fetchable.success("hi there");
  print(s.runtimeType);                             // FetchableSuccess<dynamic>
  print(s is FetchableSuccess);                     // true
  print(s is FetchableSuccess<String>);             // false
  print(s is FetchableSuccess<dynamic>);            // true

  if (s is FetchableSuccess) {
    print(s.object); …
Run Code Online (Sandbox Code Playgroud)

generics dart

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

缩放嵌套 RichText 小部件以实现可访问性

我正在努力解决如何RichText处理包含其他RichText实例的嵌套跨度。只要用户不更改手机的默认字体大小,它就可以正常工作。但是如果他们改变了显示字体大小,事情就会开始出错。

考虑我正在解析一些看起来像这样的 HTML 的情况:

<underline><italic><bold>xxxxx</bold></italic></underline>
Run Code Online (Sandbox Code Playgroud)

这个概念可以模拟成一个TextSpanTextSpanTextSpan,所以我可能有一些人为的代码,看起来像:

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final inputText = 'The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.';
    final initialSpan = TextSpan(text: inputText, style: TextStyle(color: Colors.black));

    final boldText = _buildStyledElement(context, initialSpan, Style.bold);
    final boldItalised = _buildStyledElement(context, WidgetSpan(child: boldText), Style.italic);
    final boldItalisedUnderlined = _buildStyledElement(context, WidgetSpan(child: boldItalised), Style.underline);

    return new Scaffold(
      appBar: AppBar(title: …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-layout

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

防止 NSURLSession 默认 HTTP 标头

我正在尝试向服务器发送一个非常具体的 HTTP 请求(即定义精确的HTTP 标头集),但NSURLSession不断“有帮助地”插入一堆 HTTP 标头,例如AcceptAccept-LanguageAccept-Encoding

考虑以下 Playground (Swift 2.x),它将请求发送到仅回显发送的 HTTP 标头的服务:

import Foundation
import XCPlayground

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

let url = NSURL(string: "http://httpbin.org/headers")!
let request = NSMutableURLRequest(URL: url, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 30000)
let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
let session = NSURLSession(configuration: configuration)

let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) in
    print(NSString(data: data!, encoding: NSUTF8StringEncoding))
    XCPlaygroundPage.currentPage.finishExecution()
}
task.resume()
Run Code Online (Sandbox Code Playgroud)

您可以看到发送了三个Accept标头。我怎样才能防止这种情况发生?

我尝试使用设置标题,request.setValue(nil, forHTTPHeaderField: "Accept-Language")但它被忽略了。尝试将其设置为"" …

cocoa nsurl http-headers nsurlsession swift

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

将 Moshi 与多个输入字段结合使用

我有一些如下所示的 JSON:

{
    "name" : "Credit Card",
    "code" : "AUD",
    "value" : 1000
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Moshi 将其解组为数据结构,例如:

data class Account(
    @Json(name = "name")
    val name: String,

    @Json(name = "currency")
    val currency: String,

    @Json(name = "value")
    val value: Int
)
Run Code Online (Sandbox Code Playgroud)

一切都运转良好。但是,我真的很想将currencyvalue参数提取到一个单独的Money对象中。所以我的模型看起来更像是:

data class Money(
    @Json(name = "currency")
    val currency: String,

    @Json(name = "value")
    val value: Int
)

data class Account(
    @Json(name = "name")
    val name: String,

    @Json(name = "???")
    val money: Money
)
Run Code Online (Sandbox Code Playgroud)

我面临的挑战是如何对事物进行注释,以便Money …

kotlin moshi

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

UIButton 的属性标题的动态类型

有谁有动态类型的工作attributedTitleUIButton?考虑下面的超级简单代码:

let font = UIFont(name: "Helvetica", size: 14)!
let scaledFont = UIFontMetrics.default.scaledFont(for: font)

let button = UIButton(type: .custom)
button.titleLabel?.font = scaledFont
button.titleLabel?.adjustsFontForContentSizeCategory = true

let attributes: [NSAttributedString.Key: Any] = [ .font: scaledFont ]
let attributedText = NSAttributedString(string: "Press me", attributes: attributes)
button.setAttributedTitle(attributedText, for: .normal)
Run Code Online (Sandbox Code Playgroud)

如果我使用辅助功能检查器上下缩放字体大小,按钮的大小和标签文本不能正确缩放。

但是,如果我只是调用button.setTitle()传递一个普通字符串,动态类型缩放工作正常。

直接在 a 上对属性文本使用相同的模式UILabel效果很好......似乎只是当我将属性文本用于 aUIButton的标题时。

任何想法或建议都会很棒。谢谢

编辑:再戳一下后,看起来正在发生的事情是文本正在尝试缩放,但按钮的宽度/高度并没有随之增长。如果我将动态类型拨号到最大文本大小,然后创建屏幕并继续缩小字体大小,则它可以正常工作,因为按钮的宽度/高度约束设置为初始大值。但是如果我从一个小的动态类型设置开始并变大,按钮就不能适应文本大小的变化

accessibility uibutton uikit ios dynamic-type-feature

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