小编Mid*_*lai的帖子

颤动:如何在将导航器与页面一起使用时处理后退按钮按下

我正在尝试实现 Navigator 2.0 方法。我唯一无法工作的是按下后退按钮。当我按下后退按钮时,应用程序只是退出而不会转到上一页。我尝试了 WillPopPage 小部件,但后退按钮绕过了它。

这是一个不适用于背压的示例代码。

import 'package:flutter/material.dart';

main(List<String> args) {
  runApp(TestApp());
}

class TestApp extends StatefulWidget {
  @override
  _TestAppState createState() => _TestAppState();
}

class _TestAppState extends State<TestApp> {
  bool go = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Navigator(
        pages: [
          // page 1
          MaterialPage(
            child: W1(onTapped: () {
              setState(() => go = true);
            }),
          ),
          // page 2
          if (go) MaterialPage(child: W2()),
        ],
        onPopPage: (route, result) {
          if (!route.didPop(result)) return false;
          go = false;
          return …
Run Code Online (Sandbox Code Playgroud)

declarative dart flutter flutter-navigation

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

如何在 dart 函数中将函数作为可选参数传递并带有默认值?

这就是我想要实现的:

void fun({
  bool Function(int i) predicate = (i) => false,
}) {
  // do something with 'predicate(something)'
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

可选参数的默认值必须是constant.dart(non_constant_default_value)。

我能够通过以下方法解决此错误:

bool falsePredicate(int i) => false;

void fun({
  bool Function(int i) predicate = falsePredicate,
}) {
  // do something with 'predicate(something)'
}
Run Code Online (Sandbox Code Playgroud)

但现在问题来了,为什么我不能像第一组代码那样直接创建一个默认函数值呢?第一种情况和第二种情况似乎没有什么区别。第一种方法中给出的函数为什么不是常数?

default-parameters dart

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

Dart:恒定的评估错误。无法在常量表达式中调用方法“[]”

我在不断评估时遇到错误。

请看一下这段代码:

class A {
  final num a;    
  const A(this.a);
}

class B {
  final A a;    
  const B(this.a);
}

main() {
  const a = A(12);    
  const b = B(a); // this works fine

  // I believe everything inside a const List is considered constant,
  // please correct me if that is wrong
  const aL = [ A(12), A(13) ]; // [ a, A(13) ] will not work either

  const b2 = B(
    aL[0],       // here the error is happening …
Run Code Online (Sandbox Code Playgroud)

compile-time-constant constant-expression dart

3
推荐指数
1
解决办法
4599
查看次数

Flutter:Hero 小部件、Navigation 2.0 和 Provider 无法正常工作

我尝试将Hero小部件与ChangeNotifierProvider新的导航 2.0 系统一起使用。但我在那里面临着问题。相同的代码在不使用时有效。changeNotifier

我面临的问题是,弹出第二页 W2 后,第一页中的文本(即英雄的孩子)消失了。

下面是完整的代码。runApp(HeroTestApp2())正常工作。但我很想让第一种方法发挥作用。请帮忙。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

main(List<String> args) {
  runApp(HeroTestApp());
}

class MyModel extends ChangeNotifier {
  bool _go = false;
  bool get go => _go;
  set go(bool go) {
    _go = go;
    notifyListeners();
  }
}

class HeroTestApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<MyModel>(
      create: (context) => MyModel(),
      builder: (context, _) {
        final state = context.watch<MyModel>();
        return MaterialApp(
          home: Navigator(
            pages: [
              MaterialPage(child: W1(onTapped: …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-navigation flutter-provider flutter-widget

3
推荐指数
1
解决办法
2132
查看次数

Flutter:如何在页面转换时为背景颜色设置动画

我想在颤振中的两个页面的背景颜色之间设置动画。我说的是页面过渡,但我不想过渡整个页面,我只想更改新页面的背景颜色(从上一页的背景颜色到新颜色),而其余的前景内容淡入(或任何其他类型的过渡)。

如果您想要更多说明,我想要类似过渡的东西Hero,但带有页面的背景颜色。

背景颜色不必只是某个容器的颜色属性。

编辑:为了轻松回答,假设我的页面可以通过为其构造函数指定颜色来调用。所以页面如下所示,

class MyWidget extends StatelessWidget {
  final Color bgColor;

  const MyWidget(this.bgColor);

  @override
  Widget build(BuildContext context) {
    return Stack(
      fit: StackFit.expand,
      children: [
        Container(color: bgColor),
        // foreground widgets...
      ],
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我的方法应该是什么?我应该创建类似自定义过渡的内容吗?在这种情况下,我该如何设置背景颜色的动画?

flutter flutter-animation flutter-navigation flutter-pageview page-transition

2
推荐指数
1
解决办法
2536
查看次数