我需要从另一个小部件App类调用。如何获取对app类的引用?我尝试了这样的东西:
静态应用myApp = this;
但是“这”没有定义,也没有“自我”的定义。
有没有办法让" app“成为变量,或者把app对象放到某种全局变量中?
编辑:
更清楚的是:我使用了一个选项卡式导航风格的应用程序,并想要显示一个全屏旋转指示器(ModalProgressHud),表明有一些东西正在从后端加载。现在,当我将微调器代码添加到某些屏幕时,当微调器显示时,选项卡仍然可见并可单击。因此,围绕选项卡栏创建,将微调代码移到主应用程序文件中。
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'My cool app',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: new App(),
);
}
}
现在在App类中,我像这样初始化选项卡,并将它们包装在旋转指示器调用(“ModalProgressHud”)内的构建函数中:
子体:ModalProgressHUD(:buildTabs(上下文),inAsyncCall:_saving,颜色: Colors.grey,不透明度: 0.5),
import 'package:modal_progress_hud/modal_progress_hud.dart';
class App extends StatefulWidget {
@override
State<StatefulWidget> createState() => AppState();
}
class AppState extends State<App> {
bool _saving = false;
TabItem currentTab = TabItem.Dashboard;
Map<TabItem, GlobalKey<NavigatorState>> navigatorKeys = {
TabItem.Dashboard: GlobalKey<NavigatorState>(),
TabItem.Family: GlobalKey<NavigatorState>(),
TabItem.Groups: GlobalKey<NavigatorState>(),
TabItem.ShoppingList: GlobalKey<NavigatorState>(),
TabItem.Me: GlobalKey<NavigatorState>(),
};
AppState() {
_initManagers();
}
void _initManagers() {
new BackendManager();
new ShoppingListManager();
new UserManager();
}
void _selectTab(TabItem tabItem) {
UserManager user = new UserManager();
if (user.userIsLoggedIn()) {
// only if user is logged-in we allow to switch bottom navi tabs
setState(() {
currentTab = tabItem;
});
}
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async =>
!await navigatorKeys[currentTab].currentState.maybePop(),
child: Scaffold(
resizeToAvoidBottomPadding: false,
resizeToAvoidBottomInset: false,
// HERE THE WRAP OF THE MAIN TABS IN THE HUD WIDGET
body: ModalProgressHUD(child: buildTabs(context), inAsyncCall: _saving, color: Colors.grey, opacity: 0.5),
bottomNavigationBar: BottomNavigation(
currentTab: currentTab,
onSelectTab: _selectTab,
),
),
);
}
Widget buildTabs(BuildContext context) {
return Stack(children: <Widget>[
_buildOffstageNavigator(TabItem.Dashboard),
_buildOffstageNavigator(TabItem.Search),
_buildOffstageNavigator(TabItem.Shop),
_buildOffstageNavigator(TabItem.ShoppingList),
_buildOffstageNavigator(TabItem.Me),
]);
}
Widget _buildOffstageNavigator(TabItem tabItem) {
return Offstage(
offstage: currentTab != tabItem,
child: TabNavigator(
navigatorKey: navigatorKeys[tabItem],
tabItem: tabItem,
),
);
}
void _submit() {
setState(() {
_saving = true;
});
//Simulate a service call
print('>>>>>> submitting to backend...');
new Future.delayed(new Duration(seconds: 4), () {
setState(() {
_saving = false;
});
});
}
}
ModalProgressHud现在位于应用程序类中。我现在的问题是,我想从任何其他小部件设置/调用ModalProgressHud来显示全屏覆盖旋转指示器。
因此,我在想,如果全局静态变量有效(我该如何设置它?)或者是否有任何其他方法可以在App类中调用submit()函数。
发布于 2019-06-13 03:45:45
尝试像在Flutter for Web中所做的那样,导入文件并使用as
,然后您就有了调用方法的参考
import 'package:hello_web/main.dart' as app;
main() async {
app.main();
}
https://stackoverflow.com/questions/56562659
复制相似问题