我想在Flutter的有状态小部件中显示一个简单的SnackBar.我的应用程序使用名为MyHomePage的有状态窗口小部件创建MaterialApp的新实例.
我尝试在showSnackBar()方法中显示SnackBar.但它失败的' 方法'showSnackBar'在null上被调用 '.
这段代码出了什么问题?
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
showInSnackBar("Some text");
}
@override
Widget build(BuildContext context) …Run Code Online (Sandbox Code Playgroud) 我想在使用Kotlin 扩展功能时访问Java的私有字段.
假设我有一个Java类ABC.ABC只有一个私人领域mPrivateField.我想在Kotlin中编写一个扩展函数,无论出于何种原因使用该字段.
public class ABC {
private int mPrivateField;
}
Run Code Online (Sandbox Code Playgroud)
在科特林功能是:
private fun ABC.testExtFunc() {
val canIAccess = this.mPrivateField;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Cannot access 'mPrivateField': It is private in 'ABC'
有什么办法解决这个限制?
假设audioplayers|lib/audio_cache.dart仅适用于 Android/iOS,我有条件地从 Dart 文件中排除以下导入:
import "package:audioplayers/audio_cache.dart"
Run Code Online (Sandbox Code Playgroud)
通过以下方式:
import "dart:math" if (dart.library.io) "package:audioplayers/audio_cache.dart";
Run Code Online (Sandbox Code Playgroud)
其中“dart:math”可以是任何 fake_stub Dart 文件。简而言之,这为Flutter 中的移动设备导入了一个库。详细信息在这里(感谢阿洛伊斯·丹尼尔!)。
在 Flutter-Web 实现中隐藏特定于平台的代码的最佳方法是什么?
import 'dart:io' show Platform;
bool isMobile() => Platform.isAndroid || Platform.isIOS;
class _MyPageState extends State<MyPage> {
dynamic _audioPlayer;
@override
void initState() {
if (isMobile()) {
_audioPlayer = AudioCache(prefix: 'sounds/');
_audioPlayer.load('mysound.mp3');
}
}
}
Run Code Online (Sandbox Code Playgroud)
AudioCache当然,这种幼稚的尝试在参考上失败了。
Error: Method not found: 'AudioCache'.
_audioPlayer = AudioCache(prefix: 'sounds/');
Run Code Online (Sandbox Code Playgroud) 相当于 IntelliJ 的Go to class的 VSCode 是什么?即我想输入类名并接收与我的模式匹配的所有类的弹出列表。但是,这些不仅应该包括我的项目的类,还应该包括导入的库的类。
当您使用? + O或查找类时,InteliJ 有一个选项“包括非项目项目” ctrl+O。
我使用的语言是:Dart。
我开始将我的 Flutter 应用程序移植到macos Desktop。用户界面开始很好。但是,一旦应用程序进行网络调用,它就会立即失败并显示Connection failed (OS Error: Operation not allowed)。
运行单行:
final response = await http.get('https://jsonplaceholder.typicode.com/posts/1');
Run Code Online (Sandbox Code Playgroud)
失败:
Unhandled Exception: SocketException: Connection failed (OS Error:
Operation not permitted, errno = 1),
address = jsonplaceholder.typicode.com, port = 443
#0 IOClient.send (package:http/src/io_client.dart:33:23)
Run Code Online (Sandbox Code Playgroud)
macos 构建目标来自此处的Google 示例。
Flutter (Channel master, v1.9.8-pre.108)
我得到了一个新应用程序的设计。所有尺寸都是 Android 就绪的,并以 DP -(密度无关像素)给出。如何将这些值转换为Flutter 的 LP(逻辑像素)。我知道这Window.devicePixelRatio给了我每个逻辑像素的设备像素数。
DP 和 LP 之间的确切区别是什么?是否有任何内置的 dp 到 lp 转换方法?
Koin是一个全新的轻量级DI库,可用于Android以及独立的kotlin应用程序.
通常你注入这样的依赖:
class SplashScreenActivity : Activity() {
val sampleClass : SampleClass by inject()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
Run Code Online (Sandbox Code Playgroud)
用这个inject()方法.
但是如果在Activity上下文不可用的地方(例如活动之外)注入东西呢?
android dependency-injection inversion-of-control kotlin koin
我想将我的密钥库保存在项目目录之外.我不想里面的仓库,所以我委派值适当gradle这个变量中存储的文件路径~/.gradle/gradle.properties
,我不能让gradle这个接受像一个绝对路径:
/Users/username/.gradle/keystores/project/release.key
或
~/.gradle/keystores/project/release.key
我想:
storeFile file(RELEASE_STORE_FILE)
和
storeFile new File(RELEASE_STORE_FILE)
然而,它们似乎都不起作用.
如何通过RELEASE_STORE_FILE变量将绝对路径值传递给密钥库文件?
android {
signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASS
keyAlias RELEASE_ALIAS
keyPassword RELEASE_KEY_PASS
}
}
}
Run Code Online (Sandbox Code Playgroud)
和~/.gradle/gradle.properties文件:
RELEASE_STORE_FILE=/Users/username/.gradle/keystores/project/release.key
RELEASE_STORE_PASS=******
RELEASE_ALIAS=******
RELEASE_KEY_PASS=******
Run Code Online (Sandbox Code Playgroud)
简而言之:我想将绝对路径值传递给gradle.
我NgModule在Ionic 2移动应用程序中有一个Angular 2 ,定义如下:
@NgModule({
declarations: [
MyApp,
HomePage,
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
],
providers: [{provide: ErrorHandler, useClass: IonicErrorHandler}, VatRatesDbService]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
并以这种方式定义服务:
import { Injectable } from '@angular/core';
import * as PouchDB from 'pouchdb';
@Injectable()
export class VatRatesDbService {
private _db;
private constructor() {
this._db = new PouchDB('rates.db', { adapter: 'websql' });
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我在运行时收到以下错误:
类型'typeof VatRatesDbService'不能分配给'FactoryProvider'类型.'typeof VatRatesDbService'类型中缺少属性'provide'.
我想为SCALA创建一个骨架控制台应用程序,即一个带有打印"Hello world"主函数的入口类.
我能够通过执行以下命令来创建一个scala库init项目:
gradle init --type scala-library
但似乎没有scala-application,运行:
gradle init --type scala-application
不支持请求的构建设置类型"scala-application".支持的类型:'basic','groovy-application','groovy-library','java-application','java-library','pom','scala-library'.
gradle是否没有scala控制台应用模板?