小编leb*_*755的帖子

在 Flutter 中使用嵌套 Navigator 和 WillPopScope

在我的应用程序中,我想要一个自定义导航(仅更改屏幕的一部分并保留我在其中执行的操作的历史记录)。为此,我使用了一个导航器,它对于简单的导航工作正常。但是,我想处理 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)

routes back flutter flutter-navigation

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

Dart 中是否可以只需要两个参数之一?

我知道我可以使用@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 有什么方法可以做到这一点吗?

constructor dart flutter

8
推荐指数
2
解决办法
2203
查看次数

在 Flutter 中只让一个小部件浮动在键盘上方

当它可见时,我想在键盘上方显示一个“关闭键盘”按钮。

我知道 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)

keyboard widget floating flutter

6
推荐指数
3
解决办法
8609
查看次数

Android Studio 在调试器中找不到局部变量

当我尝试调试我的应用程序时,我在调试器中看不到变量值。

例如,当我尝试计算表达式时出现以下错误(与变量观察器相同):

Cannot find local variable 'data' with type com.myorg.myapp.data.objects.DataToUpdate
Run Code Online (Sandbox Code Playgroud)

IDE 似乎可以理解我的变量的类型,但找不到它。

该变量是在之后使用的,所以它还没有被优化掉。

我相信代码已经被优化,但只是其中的一部分。

我建了一个apk,然后用网上的一些反编译器反编译它,看看它是否被缩小了或者什么的。

  • 我的部分代码不是
    • 我的类字段没问题,我可以在调试器中看到它们的值,并且它们的名称与我的代码中的名称相同
  • 但是,我的代码的其他部分似乎已经优化(变量名称不一样)
    • 例如:我的 DataToUpdate 类型的变量“data”在反编译代码中变为“DataToUpdate r118”

我没有在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 中也无法可靠工作。

debugging android android-studio android-studio-4.0

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

在 Dart 中格式化文件大小

如何在 Dart 中格式化文件大小?

输入:1000000

预期输出:1 MB

为了便于使用,输入可以是 anint或 a double,结果应该是String只有一位小数的 a。

format filesize dart flutter

4
推荐指数
1
解决办法
1615
查看次数