我正在尝试实现 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) 这就是我想要实现的:
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)
但现在问题来了,为什么我不能像第一组代码那样直接创建一个默认函数值呢?第一种情况和第二种情况似乎没有什么区别。第一种方法中给出的函数为什么不是常数?
我在不断评估时遇到错误。
请看一下这段代码:
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) 我尝试将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
我想在颤振中的两个页面的背景颜色之间设置动画。我说的是页面过渡,但我不想过渡整个页面,我只想更改新页面的背景颜色(从上一页的背景颜色到新颜色),而其余的前景内容淡入(或任何其他类型的过渡)。
如果您想要更多说明,我想要类似过渡的东西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