小编Che*_*ong的帖子

当文本字段在 Flutter 中退出焦点(模糊)时,如何捕获事件?

我查看 TextFormField,这里的字段不是我需要的:

  • onChanged(在按下每个键后调用,我需要当用户已经完成并退出 TextFormField 焦点时)
  • onEditingComplete(在用户按下完成键或类似键后调用,但用户可以退出 TextFormField 焦点而不点击这些按钮)
  • onSave(在调用后调用form.save()。但我需要在用户完成编辑后执行此操作,以让用户知道该应用程序会“自动更正”用户输入的内容)
  • validator(也曾呼吁过form.validate(),就在之前form.save()。不是我需要的)

我需要当用户退出焦点(关闭键盘或点击另一个文本字段)时,我进行处理,让用户看到他们的输入正在被调整和处理为“正确的”。我怎样才能捕捉到这样的事件?

flutter flutter-textformfield

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

Swift可以将类/结构数据转换为字典吗?

例如:

class Test {
    var name: String;
    var age: Int;
    var height: Double;
    func convertToDict() -> [String: AnyObject] { ..... }
}

let test = Test();
test.name = "Alex";
test.age = 30;
test.height = 170;

let dict = test.convertToDict();
Run Code Online (Sandbox Code Playgroud)

dict将有内容:

{"name": "Alex", "age": 30, height: 170}
Run Code Online (Sandbox Code Playgroud)

这在Swift中可能吗?

我可以像字典一样访问类,例如可能使用:

test.value(forKey: "name");
Run Code Online (Sandbox Code Playgroud)

或类似的东西?

谢谢.

dictionary class object swift

14
推荐指数
3
解决办法
2万
查看次数

有人可以在swift数组中给出一个"如果不存在则附加"方法的片段吗?

因为我经常使用这个例程,有人可以创建一个Swift数组的扩展方法,它会检测是否已经存在要附加的数据,那么它是否会被追加?我知道这只是几个代码的问题:

var arr = [Int]()
for element in inputArr {
    if !arr.contains(element) { arr.append(element); }
}
Run Code Online (Sandbox Code Playgroud)

变为:

var arr = [Int]()
for element in inputArr { arr.appendUnique(element); }
Run Code Online (Sandbox Code Playgroud)

要么:

var arr = [String]()
for element in inputArr {
    if !arr.contains(element) { arr.append(element); }
}
Run Code Online (Sandbox Code Playgroud)

变为:

var arr = [String]()
for element in inputArr { arr.appendUnique(element); }
Run Code Online (Sandbox Code Playgroud)

不同元素类型的方法相同.坦率地说,从这个简单的代码,我也想学习如何扩展Collectionwith变量类型.每当使用不同的参数类型初始化对象时,Array的方法可以具有不同的参数类型,这让我着迷.数组和字典是我仍然无法正确扩展它们的两件事.谢谢.

arrays append ios swift

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

什么是+++和<<<在Swift上?

我从这个github项目中知道Swift +++<<<"运营商".

这是我很难搜索此对谷歌,因为+++<<<也许某种特殊字符,没有出现在搜索结果的.当我写问题标题时,它甚至没有出现可能已经有 Stack Overflow的答案部分的问题.

你能简单解释一下这些奇怪的算子是什么吗?也许有些文章可以进一步阅读?

xcode operators swift

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

Swift中有'didGet'这样的东西吗?访问变量时运行的方法?

基本上,我想这样做:

var counter : Int = 0;
private var _data : String;
var data : String {
    get { counter += 1; return _data; }
    set { _data = newValue; }
}
Run Code Online (Sandbox Code Playgroud)

然后我想像这样减少它:

var counter : Int = 0;
var data : String {
    get { counter += 1; return data; }
    set { data = newValue; }
}
Run Code Online (Sandbox Code Playgroud)

但我注意到这不可能做到.(错误:在其初始值内使用的变量).所以我想像这样简化它:

var counter : Int = 0;
var data : String {
    didGet { counter += 1; }
}
Run Code Online (Sandbox Code Playgroud)

但是没有这样的事情didGet …

swift

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

如何在其他应用程序上分享Facebook Messenger上的链接?

Facebook开发者文档,我看到我可以分享图像,动画图像,甚至是从其他应用程序到Facebook Messenger的音频剪辑.但我看不到分享链接的方法.当我试图查看FBSDKMessengerShare提供的分享时,我也不会这样做.

在此输入图像描述

如何使用Facebook Messenger共享链接?

xcode swift fbsdkmessengersharekit

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

如何在UINavigationController中恢复后退按钮功能?

我创建了自己的leftBarButtonItem:

UIBarButtonItem* homeButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks 
                                                                                    target:self 
                                                                                    action:@selector(homeButtonClicked:)];

self.navigationItem.leftBarButtonItem = homeButton;
Run Code Online (Sandbox Code Playgroud)

如何以编程方式恢复原始后退按钮功能?

iphone cocoa-touch objective-c uinavigationcontroller uibarbuttonitem

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

如何从 UITextField 中移除焦点?

我在任何地方都看到这个问题被问了一百万次,但没有一个答案对我有用。

我需要从 UITextField 中移除焦点。这意味着我需要光标消失(并且键盘关闭)。

我在互联网上看到的解决方案是[textfield resignFirstResponder]or [textfield endEditing:YES],它能够隐藏键盘,但不会从 UITextField 中移除焦点(即,尽管键盘已关闭,但光标仍会在 UITextField 内愉快地闪烁)。

问题是当用户点击 UITextField 并且事件 didBeginEditing 被触发时,我需要获取事件。每次触发该事件时,或者更一般地说,每次用户点击 UITextField 时,我都会做一些事情。但是,如果焦点没有完全从 UITextField 中移除,则即使在我调用resignFirstResponder或之后也无法再次触发该事件endEditing:YES

我怎样才能做到这一点?谢谢。

objective-c uitextfield ios

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

为什么(通常)在 BLoC 模式上有一个存储库层?

我是 Flutter 的新手,刚刚从阅读有关 Flutter 的教程中听说了 BLoC 概念。从本教程中,我第一次听说 BLoC。但是我在这篇文章中也看到了一个名为“Repository”的文件。基本上数据流是这样的:

Web API --> Api Provider --> Repository --> BLoC --> Widget
Run Code Online (Sandbox Code Playgroud)

我不明白的是,为什么需要 Repository 层,因为当我查看存储库文件时,它基本上只是返回 API Provider 的 Future 结果?我很好奇并尝试进一步搜索,我看到互联网上一些人的编码模式也有一个 Repository 层。

在原始文章中,API Provider 做了一切。它调用 get 请求,等待 Future 解析,将 JSON 数据转换为适当的模型,并返回用 Future 括起来的模型。

class ApiProvider {
  Future<ItemModel> fetchMovieList() async {
    final response = await client.get("http://api.themoviedb.org/3/movie/popular?api_key=$_apiKey");
    if (response.statusCode == 200)
      return ItemModel.fromJson(json.decode(response.body));
    else
      throw Exception('Failed to load post');
  }
}

class Repository {
  ApiProvider _api = ApiProvider();

  Future<ItemModel> fetchMovieList() => _api.fetchMovieList(); // …
Run Code Online (Sandbox Code Playgroud)

flutter

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

如何在 Flutter Android 中创建构建变体,以便每个构建变体都有不同的应用程序 ID?

我需要有 3 个不同的 APK(dev、UAT、prod),每个 APK 都针对不同的 Firebase 数据库。但在每个 Firebase 项目中,我需要提供一个永久的应用程序 ID。这意味着我需要有 3 个构建变体,每个变体都使用不同的应用程序 ID 部署 APK。但在Android Studio上,我似乎找不到这样的方法来为此目的构建Flutter变体(构建变体部分是空的)。

我正在寻找的不仅仅是不同的入口点和不同的常量,而是完全不同的应用程序 ID。据我所知,在 Flutter 中更改应用程序名称和应用程序 id 需要像这样的6 个步骤。我认为每次想要更改构建范围时执行这 6 个步骤并不是处理此问题的有效且正确的方法。

android flutter build-variant

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