在我的应用程序中,我想要一个自定义导航(仅更改屏幕的一部分并保留我在其中执行的操作的历史记录)。为此,我使用了一个导航器,它对于简单的导航工作正常。但是,我想处理 Android 的后退按钮。Flutter 中显然存在问题,这迫使我处理导航器的父小部件中的后退按钮:https : //github.com/flutter/flutter/issues/14083
因此,我需要在子代中检索 Navigator 的实例并对其调用 pop()。我正在尝试为此使用 GlobalKey。
我现在正试图让它工作一段时间,并制作了一个示例项目来测试它。这是我的代码:
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(title: 'Navigation Basics', home: MainWidget()));
}
class MainWidget extends StatelessWidget {
final GlobalKey<NavigatorState> navigatorKey = GlobalKey();
@override
Widget build(BuildContext context) {
return SafeArea(
child: WillPopScope(
onWillPop: () => navigatorKey.currentState.maybePop(),
child: Scaffold(
body: Padding(
child: Column(
children: <Widget>[
Text("Toto"),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: RaisedButton(
child: Text('First'),
onPressed: () {
navigatorKey.currentState.pushNamed('/first');
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => SecondRoute()),
// …Run Code Online (Sandbox Code Playgroud) 我知道我可以使用@required如下所示的一个参数:
class Foo{
String firstParam;
String secondParam;
Foo({@required this.firstParam, this.secondParam});
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何只需要两个参数之一而不需要两个参数。我有一些看起来像我想要使用的东西assert:
class Foo{
String firstParam;
String secondParam;
Foo({this.firstParam, this.secondParam}): assert(this.firstParam != null || this.secondParam!= null);
}
Run Code Online (Sandbox Code Playgroud)
但它不会在 VS Code 中警告我,并且asserts不会在发布模式下使用。
Dart 有什么方法可以做到这一点吗?
当它可见时,我想在键盘上方显示一个“关闭键盘”按钮。
我知道 resizeToAvoidBottomInset 会影响键盘与应用程序其余部分的交互方式,但是它并不完全符合我的要求。
我有一个背景图像和其他小部件(未在下面的示例中显示),在显示键盘时不应调整其大小和移动。当resizeToAvoidBottomInset属性设置为 false时,这是一个正常的行为。
但是,我想添加一个应该出现在键盘上方的按钮。
我怎样才能做到这一点?我只想要一个小部件浮动在键盘上方,而不是所有的应用程序。
这是一个示例代码:
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
var home = MyHomePage(title: 'Flutter Demo Home Page');
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: home,
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override …Run Code Online (Sandbox Code Playgroud) 当我尝试调试我的应用程序时,我在调试器中看不到变量值。
例如,当我尝试计算表达式时出现以下错误(与变量观察器相同):
Cannot find local variable 'data' with type com.myorg.myapp.data.objects.DataToUpdate
Run Code Online (Sandbox Code Playgroud)
IDE 似乎可以理解我的变量的类型,但找不到它。
该变量是在之后使用的,所以它还没有被优化掉。
我相信代码已经被优化,但只是其中的一部分。
我建了一个apk,然后用网上的一些反编译器反编译它,看看它是否被缩小了或者什么的。
我没有在debug我的build.gradle. 我根据我在网上看到的内容添加了以下几行以尝试使其工作:
buildTypes {
debug {
debuggable true
testCoverageEnabled = false
minifyEnabled false
useProguard false
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Android Studio 4.0 Beta 4,但它在 Android Studio 3.6 中也无法可靠工作。
如何在 Dart 中格式化文件大小?
输入:1000000
预期输出:1 MB
为了便于使用,输入可以是 anint或 a double,结果应该是String只有一位小数的 a。