如何在Flutter中解码JSON?
问题很简单,但答案不是,至少对我而言.
我有一个使用大量JSON字符串的项目.基本上,应用程序和服务器之间的整个通信都是通过JSON进行的.
我一直在使用JSON.decode(json_string)它来处理它,但今天我更新了Flutter核心(0.5.8-pre.178)并且JSON.decode不再可用.
我去了Flutter Docs寻求帮助,但它仍然说要使用JSON.decode.
那么,从现在开始如何在Flutter中解码JSON?
我在一个容器中有两个 TextField。第一个定义为TextInputType.text,第二个是TextInputType.number。每当我改变焦点(First<>Second 或 Second<>First)时,TextField失去焦点的 也失去了它的价值。
奇怪的是,如果我将两个 textFields 都定义为TextInputType.text,则两个 textFields 都可以工作,如果我将其中一个设置为任何 but TextInputType.text,则在焦点输出时都会丢失键入的值。
很烦人。我不知道为什么会发生这种情况。
这是一个 Flutter 错误还是我做错了什么?
这是小部件代码:
class LoginInput extends StatelessWidget {
final String hintText;
final IconData icon;
final String iconTag;
final TextEditingController controller;
final TextInputType inputType;
final bool obscureText;
LoginInput(this.hintText, this.icon, this.iconTag, this.controller,
this.inputType, this.obscureText);
@override
Widget build(BuildContext context) {
return new Column(children: <Widget>[
new Container(
height: 56.0,
child: new Material(
borderRadius: BorderRadius.all(Radius.circular(5.0)),
elevation: 0.0,
color: Colors.white,
child: new Container( …Run Code Online (Sandbox Code Playgroud) 我有一个Flutter通过 Visual Studio Code开发的 Android/iOS 应用程序。当我在 Android >=5.0 或任何版本的 iOS上运行它时,它可以完美运行,但是当我在 Android 4.x 上运行它时它会立即崩溃(不幸的是,应用程序已停止)。
我想修复它,但Flutter没有告诉我发生了什么。
我尝试通过按下 F5 按钮并使用命令行来运行 VSCode flutter run,但都没有显示我可以使用的东西。我试图用tracecommand运行[Flutter trace run],但它说The --debug-port argument must be specified,我不知道这是什么意思。
我只需要一个堆栈跟踪或一个行错误告诉我是什么问题。我必须在 VSCode 上配置一些东西吗?
我正在使用intl包将我的应用翻译成西班牙语。
locales.dart
class AppLocale {
...
String get folder => Intl.message("Folder", name: 'folder');
...
}
Run Code Online (Sandbox Code Playgroud)
messages_es.dart
class MessageLookup extends MessageLookupByLibrary {
get localeName => 'es';
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
"folder": MessageLookupByLibrary.simpleMessage("Carpeta"),
};
}
Run Code Online (Sandbox Code Playgroud)
我用以下代码称呼它:
AppLocale.of(context).folder
Run Code Online (Sandbox Code Playgroud)
一切正常。
但是,我需要创建“动态”字符串。例如:
“嗨,{$ name}”
然后,我将调用此字符串,并将此“名称”作为参数传递,或类似的内容。西班牙语将其翻译为“ Hola,{$ name}”。
是否可以使用此intl包?
我正在尝试CupertinoAlertDialog使用以下代码在我的 Flutter 项目上创建一个 iOS :
showDialog(
context: context,
builder: (BuildContext context) => new CupertinoAlertDialog(
title: new Text("Alert"),
content: new Text("My alert message"),
actions: [
CupertinoDialogAction(isDefaultAction: true, child: new Text("Close"))
]));
Run Code Online (Sandbox Code Playgroud)
但是,当调用此对话框时,我收到以下错误消息:
NoSuchMethodError: The getter 'alertDialogLabel' was called on null
安卓AlertDialog运行正常。
这段代码有什么问题?
编辑:
只需添加GlobalCupertinoLocalizations.delegate到您的 MaterialApp。
我有一个Flutter应用程序,在第一次运行时创建一个FCM令牌,如下所示:
_firebaseMessaging.getToken().then((token) {
//save my token here
});
Run Code Online (Sandbox Code Playgroud)
但是,我知道这个令牌可以在一段时间内刷新一次.为了获得这个新刷新的令牌,我必须调用onTokenRefresh方法:
Stream<String> fcmStream = _firebaseMessaging.onTokenRefresh;
fcmStream.listen((token) {
saveToken(token);
});
Run Code Online (Sandbox Code Playgroud)
问题是我不知道这是否正确.该saveToken(token)应用程序运行时始终执行该行,但当应用程序不在前台/后台时,它会起作用吗?
我的意思是,onTokenRefresh即使用户关闭应用程序,这仍将继续收听?
如果没有,如果应用程序长时间没有启动,我如何获得新令牌?
我有一个 Flutter 应用程序,它使用 Firebase 消息传递来传递通知。这是基本代码,除了将令牌保存在我的数据库中之外,它没有什么特别之处。
FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) {
},
onResume: (Map<String, dynamic> message) {
},
onLaunch: (Map<String, dynamic> message) {
},
);
_firebaseMessaging.getToken().then((token) {
saveToken(token);
});
Run Code Online (Sandbox Code Playgroud)
我是否必须实现某种后台服务才能在每次刷新时将新令牌保存在我的数据库中?我记得onTokenRefresh()在 Android(JAVA)上使用过这样做,但我在 Flutter(DART)中一无所获。
我在某处读到令牌每 3600 秒刷新一次。我想知道这是不是真的。
我需要呼叫用户注意按钮。我想到的第一个想法是添加一个眨眼动画。我真的不知道该怎么做,但是我尝试通过以下代码使其工作:
Timer timer = new Timer(new Duration(seconds: 1), () {
//basic logic to change the color variable here
setState(() {});
});
Run Code Online (Sandbox Code Playgroud)
这很简单,每秒都会setState调用一次,然后再次创建小部件。
但这不起作用,计时器仅被调用一次。而且,除此之外,调用setState内Timer看来我错了。
有更好的方法吗?
我在Flutter项目上使用了名为video_player的插件。我可以正常播放和暂停视频,但我想使其全屏和水平播放。我找不到与此相关的任何内容。
这是我正在使用的基本代码:
playerController = VideoPlayerController.network(
"<VIDEO_URL>")
..addListener(listener)
..setVolume(1.0)
..initialize()
..play();
Run Code Online (Sandbox Code Playgroud)
我可以全屏播放吗?