Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么不是';t Navigator PushNamed和RemoveUntil未按预期工作?_Android_Flutter - Fatal编程技术网

Android 为什么不是';t Navigator PushNamed和RemoveUntil未按预期工作?

Android 为什么不是';t Navigator PushNamed和RemoveUntil未按预期工作?,android,flutter,Android,Flutter,在我的应用程序中,我有一个带有墨水池的基本应用程序抽屉,用于处理手势(轻触) 我正在使用provider更改主题,但当我使用我的应用程序抽屉转到任何命名路由时,它会删除初始路由,即使我正在使用pushname和removeintil 但是,当我更改主题时,这会起作用。例如,当我进入设置\u screen.dart并使用开关将我的主题从浅色更改为深色时,会出现“后退”按钮,即我的初始路线。 这种奇怪行为的原因是什么? main.dart import 'package:flutter/materi


在我的应用程序中,我有一个带有墨水池的基本应用程序抽屉,用于处理手势(轻触)

我正在使用provider更改主题,但当我使用我的应用程序抽屉转到任何命名路由时,它会删除初始路由,即使我正在使用
pushname和removeintil

但是,当我更改主题时,这会起作用。例如,当我进入设置\u screen.dart并使用开关将我的主题从浅色更改为深色时,会出现“后退”按钮,即我的初始路线。 这种奇怪行为的原因是什么?
main.dart

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

//Providers
import './providers/themes.dart';

//screens
import './screens/home_screen.dart';
import './screens/about_screen.dart';
import './screens/news_screen.dart';
import './screens/department_screen.dart';
import './screens/admission_screen.dart';
import './screens/placements_screen.dart';
import './screens/contact_us_screen.dart';
import './screens/settings_screen.dart';

void main() => runApp(SfitApp());

class SfitApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<Themes>(
      create: (_) => Themes(),
      child: MaterialAppWithTheme(),
    );
  }
}

class MaterialAppWithTheme extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final theme = Provider.of<Themes>(context);
    return MaterialApp(
      title: "SFIT App",
      //routes
      initialRoute: '/',
      routes: {
        '/': (context) => HomeScreen(),
        AboutScreen.routeName: (context) => AboutScreen(),
        NewsScreen.routeName: (context) => NewsScreen(),
        AdmissionScreen.routeName: (context) => AdmissionScreen(),
        DepartmentScreen.routeName: (context) => DepartmentScreen(),
        PlacementsScreen.routeName: (context) => PlacementsScreen(),
        ContactUsScreen.routeName: (context) => ContactUsScreen(),
        SettingsScreen.routeName: (context) => SettingsScreen(),
      },
      //theme
      theme: theme.getTheme(),
    );
  }
}
设置屏幕

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

//providers
import '../providers/themes.dart';

class SettingsScreen extends StatefulWidget {
  static const routeName = 'settings_screen';

  @override
  _SettingsScreenState createState() => _SettingsScreenState();
}

class _SettingsScreenState extends State<SettingsScreen> {
  bool isSwitched = false;

  @override
  Widget build(BuildContext context) {
    Themes themeChanger = Provider.of<Themes>(context);
    return Scaffold(
      appBar: AppBar(
        title: Text(
          'Settings',
          style: Theme.of(context).textTheme.headline6,
        ),
        brightness: Theme.of(context).brightness,
        elevation: 3,
      ),
      body: Container(
        width: double.infinity,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Padding(
              padding: EdgeInsets.fromLTRB(20, 10, 0, 10),
              child:
                  Text("Theme", style: Theme.of(context).textTheme.headline5),
            ),
            ListTile(
              title: Text(
                "Overall look and feel of the app",
                style: Theme.of(context).textTheme.bodyText1,
              ),
              subtitle: Text("Light/ Dark"),
              trailing: Switch(
                value: isSwitched,
                onChanged: (value) {
                  if (value) {
                    themeChanger.changeTheme(Brightness.dark);
                    setState(() {
                      isSwitched = value;
                    });
                    print(value);
                  } else {
                    themeChanger.changeTheme(Brightness.light);
                    setState(() {
                      isSwitched = value;
                    });
                    print(value);
                  }
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
//提供者
导入“../providers/themes.dart”;
类设置Screen扩展StatefulWidget{
静态常量routeName='设置\屏幕';
@凌驾
_SettingsScreenState createState()=>_SettingsScreenState();
}
类设置ScreenState扩展状态{
bool isSwitched=false;
@凌驾
小部件构建(构建上下文){
Themes themeChanger=Provider.of(上下文);
返回脚手架(
appBar:appBar(
标题:正文(
“设置”,
风格:Theme.of(context).textTheme.headline6,
),
亮度:主题(上下文)。亮度,
标高:3,
),
主体:容器(
宽度:double.infinity,
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
填充物(
填充:从LTRB(20,10,0,10)开始的边缘设置,
儿童:
文本(“主题”,样式:Theme.of(context.textTheme.headline5),
),
列表砖(
标题:正文(
“应用程序的整体外观和感觉”,
样式:Theme.of(context).textTheme.bodyText1,
),
字幕:文本(“亮/暗”),
尾随:开关(
值:已切换,
一旦更改:(值){
如果(值){
改变主题(光明、黑暗);
设置状态(){
isSwitched=值;
});
印刷品(价值);
}否则{
改变主题(亮度、光线);
设置状态(){
isSwitched=值;
});
印刷品(价值);
}
},
),
),
],
),
),
);
}
}
其他文件尚未包括在内。
但是当我导航到它们中的任何一个时,应该出现在应用程序栏中的操作按钮就没有了。

颤振中有一个bug。更新解决了问题

颤振中有一个错误。更新解决了问题

为什么您认为
pushname和removeintil
无法按预期工作?你认为“期望”是什么?用
pushname和removeintil
发布最小代码,因为我认为没有人会尝试运行您的原始代码。我想说的是,初始路径正在弹出,即使它不应该弹出<代码>'/':(上下文)=>HomeScreen(),这是main.dart和
Navigator.of(context).pushName和removeUntil(appSectionItem['onTap'],ModalRoute.withName('/'),)中的初始路由这是我在抽屉里使用它的地方。请注意,appSectionItem['onTap']返回一个命名路由,即AboutScreen.RouteName。您的代码正在按预期工作。我试过使用你注释掉的
ModalRoute
,但它仍然有效。我的代码一定有问题,因为当我按下一条路线时,它不会在应用程序栏中显示后退按钮,相反,当我返回时,它会关闭应用程序。因此,正如我所说:发布最小的不工作代码-没有人会尝试运行你的代码,很可能你的代码甚至没有编译。我已经为上面的源代码添加了zip文件,请尝试运行你为什么认为
pushname和removeintil
不能按预期工作?你认为“期望”是什么?用
pushname和removeintil
发布最小代码,因为我认为没有人会尝试运行您的原始代码。我想说的是,初始路径正在弹出,即使它不应该弹出<代码>'/':(上下文)=>HomeScreen(),
这是main.dart和
Navigator.of(context).pushName和removeUntil(appSectionItem['onTap'],ModalRoute.withName('/'),)中的初始路由这是我在抽屉里使用它的地方。请注意,appSectionItem['onTap']返回一个命名路由,即AboutScreen.RouteName。您的代码正在按预期工作。我试过使用你注释掉的
ModalRoute
,但它仍然有效。我的代码一定有问题,因为当我按下一条路线时,它不会在应用程序栏中显示后退按钮,相反,当我返回时,它会关闭应用程序。因此,正如我所说:发布最小的不工作代码-没有人会尝试运行你的代码,很可能你的代码甚至没有编译。我已经为上面的源代码添加了zip文件,请尝试运行那个密码。
import 'package:flutter/material.dart';

class Themes with ChangeNotifier {
  ThemeData _theme = ThemeData(
    brightness: Brightness.light,
//    primaryColor: Colors.yellow,
//    accentColor: Colors.amber,
    fontFamily: 'OpenSans',
    textTheme: TextTheme(
      headline5: TextStyle(
        fontFamily: 'OpenSans',
        fontSize: 16,
      ),
      headline6: TextStyle(
        fontFamily: 'OpenSans',
        fontWeight: FontWeight.bold,
        fontSize: 25,
      ),
      bodyText1: TextStyle(
        fontFamily: 'OpenSans',
        fontSize: 14,
      ),
      bodyText2: TextStyle(
        fontFamily: 'OpenSans',
        fontSize: 12,
      ),
      headline4: TextStyle(
        fontFamily: 'PlayfairDisplay',
        fontSize: 25,
        color: Colors.yellow[900],
      ),
    ),
  );

  getTheme() => _theme;

  changeTheme(brightness) {
    _theme = ThemeData(brightness: brightness);
    notifyListeners();
  }

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

//providers
import '../providers/themes.dart';

class SettingsScreen extends StatefulWidget {
  static const routeName = 'settings_screen';

  @override
  _SettingsScreenState createState() => _SettingsScreenState();
}

class _SettingsScreenState extends State<SettingsScreen> {
  bool isSwitched = false;

  @override
  Widget build(BuildContext context) {
    Themes themeChanger = Provider.of<Themes>(context);
    return Scaffold(
      appBar: AppBar(
        title: Text(
          'Settings',
          style: Theme.of(context).textTheme.headline6,
        ),
        brightness: Theme.of(context).brightness,
        elevation: 3,
      ),
      body: Container(
        width: double.infinity,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Padding(
              padding: EdgeInsets.fromLTRB(20, 10, 0, 10),
              child:
                  Text("Theme", style: Theme.of(context).textTheme.headline5),
            ),
            ListTile(
              title: Text(
                "Overall look and feel of the app",
                style: Theme.of(context).textTheme.bodyText1,
              ),
              subtitle: Text("Light/ Dark"),
              trailing: Switch(
                value: isSwitched,
                onChanged: (value) {
                  if (value) {
                    themeChanger.changeTheme(Brightness.dark);
                    setState(() {
                      isSwitched = value;
                    });
                    print(value);
                  } else {
                    themeChanger.changeTheme(Brightness.light);
                    setState(() {
                      isSwitched = value;
                    });
                    print(value);
                  }
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}