我有一个启动器屏幕,我可以在其中检查是否有特定数据。根据结果我显示不同的屏幕
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LauncherScreen()
);
}
}
class LauncherScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("build, build");
Future.delayed(new Duration(milliseconds: 2000), () {
LocalData localData = LocalData();
localData.getCity().then((city) {
if (city != null) {
Const.city = city;
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Home()),
);
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SelectCities()),
);
}
});
});
return Container( …Run Code Online (Sandbox Code Playgroud) 假设我有两条路线/firstRoute和/secondRoute,分别用于小部件FirstRoute和SecondRoute。我正在将一个命名路由与一些参数一起推送到堆栈上,就像这样......
Navigator.pushNamed(
context,
"/secondRoute",
arguments: <String, String>{"key" : "value"},
)
Run Code Online (Sandbox Code Playgroud)
我现在如何在SecondRoute中使用这个值?查看了文档,但没有提及。
我无法访问推送到当前导航器的小部件中的提供程序:
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:provider/provider.dart';
void main() => runApp(MyApp());
class MyModel with ChangeNotifier {
String a = 'Test1';
String b = 'Test2';
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: ChangeNotifierProvider(
create: (context) => MyModel(),
child: MyHomePage()
)
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Consumer<MyModel>( …Run Code Online (Sandbox Code Playgroud) 我有一个 Flutter 应用程序,它的启动方式如下:
void main() async {
// Check if user is logged in
runApp(
MaterialApp(
home: (isLoggedIn) ? MainPage() : PageLogin(),
),
);
}
Run Code Online (Sandbox Code Playgroud)
我的主页(和我的登录页面)只是 2 个常规的有状态小部件。
class MainPage extends StatefulWidget {
MainPage({Key key, this.selectedPageDefault = 0}) : super(key: key);
@override
_MainPageState createState() => _MainPageState();
}
Run Code Online (Sandbox Code Playgroud)
假设我还有 2 个页面,就像 MainPage :PageOne和PageTwo。
当我点击 上的按钮时MainPage,它会带我去PageOne,而当我点击 上的按钮时PageOne,它也会带我去PageTwo。
我使用以下方式去找他们:
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => PageOne(), // Or PageTwo
),
);
Run Code Online (Sandbox Code Playgroud)
现在,当我单击 …
我创建了一个类,并希望某些参数是可选的,但不知道该怎么做。
class PageAction {
PageState state;
PageConfiguration page;
List<PageConfiguration> pages;
Widget widget;
PageAction({
this.state = PageState.none,
this.page, // Optional
this.pages, // Optional
this.widget, // Optional
});
Run Code Online (Sandbox Code Playgroud)
我收到添加“必需”的建议,但这不是我需要的。有人可以帮忙解释一下吗?
constructor optional-parameters flutter flutter-navigation dart-null-safety
我有一个 flutter 应用程序,可以使用屏幕中的文本表单字段捕获数据。我有第二个屏幕,我想在其中显示从第一个屏幕的文本表单字段捕获的数据。
但首先我想从第二个屏幕控制器将其打印到终端,并查看已传递的内容。我尝试使用 GetX naviagtion 并传递,但出现此错误
The method '[]' was called on null.
Receiver: null
Tried calling: [](0)
Run Code Online (Sandbox Code Playgroud)
这是我用来获取数据作为输入的文本表单字段
TextFormField(
controller: controller._phoneNumberController,
keyboardType: TextInputType.text,
validator: (value) => validatePhoneNumber(value!),
style: TextStyle(
color: accentColor,
fontSize: 15,
fontFamily: 'PoppinsRegular',
),
decoration: InputDecoration(
hintText: "Phone Number",
hintStyle: TextStyle(
fontSize: 14,
color: Colors.black45,
fontWeight: FontWeight.w500),
fillColor: Color(0xffEBEDF4),
filled: true,
border: InputBorder.none,
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),
borderSide: BorderSide(
color: Color(0xff1D275C),
),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),
borderSide: BorderSide(
color: formFieldColor,
width: 2.0,
),
),
), …Run Code Online (Sandbox Code Playgroud) 亲爱的,
我正在使用provider dart 包,它允许侦听器获得有关模型本身更改的通知。
我能够检测到我的主应用程序根树中的更改,并且还能够更改初始路由的字符串值,但是我的屏幕没有更新。请参阅下面的代码片段和注释行:
void main() => runApp(_MyAppMain());
class _MyAppMain extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<UserProvider>.value(
value: UserProvider(),
),
ChangeNotifierProvider<PhoneProvider>.value(
value: PhoneProvider(),
)
],
child: Consumer<UserProvider>(
builder: (BuildContext context, userProvider, _) {
return FutureBuilder(
future: userProvider.getUser(),
builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
final User user = snapshot.data;
String initialScreen = LoginScreen.path;
// (1) I am able to get into the condition
if …Run Code Online (Sandbox Code Playgroud) ^ ^ ^^ ^ 不!这个问题没有答案!^ ^ ^ ^ ^ ^
我有问题Navigator.popUntil。我写了一个小演示应用程序来展示发生了什么。在我将此作为错误发布之前,我使用popUntil错了吗?
调用 popUntil 显示
看起来有些东西正在锁定导航器(设置_debugLocked)而不是释放它。
main.dart 下面:(可以直接粘贴到 Flutter 演示应用程序中)
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Routing Test Page'),
onGenerateRoute: (RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(
builder: (_) …Run Code Online (Sandbox Code Playgroud)