由于各种原因,有时会build再次调用我的小部件的方法.
我知道这是因为父母更新了.但这会导致不良影响.导致问题的典型情况是使用FutureBuilder这种方式:
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: httpCall(),
builder: (context, snapshot) {
// create some layout here
},
);
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果再次调用构建方法,则会触发另一个http请求.这是不受欢迎的.
考虑到这一点,如何处理不需要的构建?有什么方法可以阻止构建调用?
我正在使用Flutter,我想为小部件添加边框(在本例中为文本小部件).
我尝试了TextStyle和Text,但我没有看到如何添加边框.
尝试在最新的 Xcode 和 iOS 17 更新后运行 flutter 应用程序并收到以下错误“DT_TOOLCHAIN_DIR 无法用于评估 LIBRARY_SEARCH_PATHS,请改用 TOOLCHAIN_DIR”
# Uncomment this line to define a global platform for your project
# platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is …Run Code Online (Sandbox Code Playgroud) 使用InheritedWidget的正确方法是什么?到目前为止,我明白它让你有机会沿着Widget树传播数据.在极端情况下,如果你把它作为RootWidget,它将可以从所有Routes树中的所有Widgets访问,这很好,因为不知何故我必须使我的ViewModel/Model可以访问我的Widgets而不必诉诸于全局或Singletons.
但是InheritedWidget是不可变的,那么如何更新呢?更重要的是我的状态窗口小部件如何触发重建他们的子树?
不幸的是,文档在这里非常不清楚,经过大量讨论后,似乎没有人真正知道使用它的正确方法.
我添加了Brian Egan的一句话:
是的,我认为这是一种沿树传播数据的方法.从API文档中我发现令人困惑的是:
"以这种方式引用时,继承的小部件将导致使用者在继承的小部件本身更改状态时重建."
当我第一次阅读本文时,我想:
我可以在InheritedWidget中填充一些数据并稍后进行修改.当发生突变时,它将重建引用我的InheritedWidget的所有Widgets我发现的内容:
为了改变InheritedWidget的状态,你需要将它包装在StatefulWidget中然后实际上改变StatefulWidget的状态并将这些数据传递给InheritedWidget,后者将数据传递给它的所有子节点.但是,在这种情况下,它似乎重建了StatefulWidget下面的整个树,而不仅仅是引用InheritedWidget的Widgets.那是对的吗?或者它会以某种方式知道如果updateShouldNotify返回false,如何跳过引用InheritedWidget的Widgets?
问题是我想在文本字段的值末尾添加“,00”在 iOS 设备中效果很好,但在 android 中光标移动到文本字段中值的起点。所以,我无法添加“,00”。
to migrate your project. You may also pass the --ignore-deprecation flag to\nignore this check and continue with the deprecated v1 embedding. However,\nthe v1 Android embedding will be removed in future versions of Flutter.\n\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\nThe detected reason was:\n\n C:\\Users\\ALI HASSAN\\OneDrive\\Desktop\\New folder\\arcore_app\\example\\android\\app\\src\\main\\AndroidManifest.xml uses\n `android:name="io.flutter.app.FutterApplication"`\n\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\n\nBuild failed due to use of deprecated Android v1 embedding.\nRun Code Online (Sandbox Code Playgroud)\n 我安装了Flutter并设置了Android Studio.然后我在GitHub上克隆了一个颤动的例子(https://github.com/flutter/flutter)并在Android Studio中启动它,但它警告我"Dart SDK未配置",这也发生在我的同事身上.但是,如果我在Android Studio中创建一个新项目,则完全没问题.
我做了什么:
安装颤振
安装了Android Studio,以及包括Dart插件在内的Flutter插件
在命令行中的颤动运行正常,所有五个测试都通过了.(见下文)
[✓] Flutter(在Mac OS X 10.13.3 17D47,locale en-US,channel dev)•Flutter version 0.0.22 at/Users/katelyn/flutter•Framework revision 3001b3307d(7天前),2018-01-30 11:37:15 -0800•引擎版本8f2d72b183•工具Dart版本2.0.0-dev.16.0•Engine Dart版本2.0.0-edge.7af4db0ea091dddca6b2da851e6dda8d7f9467e8
[✓] Android工具链 - 针对Android设备开发(Android SDK 27.0.3)•Android SDK位于/ Users/katelyn/Library/Android/sdk•Android NDK位置未配置(可选;对原生分析支持很有用)•平台android- 27,构建工具27.0.3•Java二进制文件:/ Applications/AndroidStudio.app/Contents/jre/jdk/Contents/Home/bin/java•JavaScriptOpenJDK Runtime Environment(build 1.8.0_152-release-915- B08)
[✓] iOS工具链 - 针对iOS设备开发(Xcode 9.2)•Xcode位于/Applications/Xcode.app/Contents/Developer•Xcode 9.2,构建版本9C40b•ios-deploy 1.9.2•CocoaPods 1.4.0版
[✓] Android Studio(版本3.0)•Android Studio at/Applications/Android Studio.app/Contents•Java版OpenJDK运行时环境(版本1.8.0_152-release-915-b08)
[✓]连接设备•为x86构建的Android SDK•emulator-5554•android-x86•Android 7.1.1(API 25)(模拟器)
上周,我可以通过命令行(在该目录中)运行他们的示例,
flutter run
Run Code Online (Sandbox Code Playgroud)
但现在我用Gradle显示了一些错误.
在调试模式下为x86构建的Android SDK上启动lib/main.dart ...初始化gradle ... 0.7s解决依赖关系......
*运行Gradle时出错:退出代码1:/ Users/katelyn/AndroidStudioProjects/flutter/examples/flutter_gallery/android/gradlew app:属性:FAILURE:构建因异常而失败.
其中:构建文件'/Users/katelyn/AndroidStudioProjects/flutter/examples/flutter_gallery/android/app/build.gradle'行:20
出了什么问题:评估项目':app'时出现问题.3
尝试:使用--stacktrace选项运行以获取堆栈跟踪.使用--info或--debug选项运行以获取更多日志输出.
在https://help.gradle.org获取更多帮助 …
我正在尝试从服务器获取 JSON 响应并将其输出到控制台。
Future<String> login() async {
var response = await http.get(
Uri.encodeFull("https://etrans.herokuapp.com/test/2"),
headers: {"Accept": "application/json"});
this.setState(() {
data = json.decode(response.body);
});
print(data[0].name);
return "Success!";
}
Run Code Online (Sandbox Code Playgroud)
未处理的异常:类型“_InternalLinkedHashMap<String, dynamic>”不是“List”类型的子类型
可能是什么原因?