我使用flutter已经有一段时间了,最近使用Get来实现状态管理。我在首先打开加载对话框然后打开消息对话框时遇到问题。然后我想关闭加载对话框,但消息对话框是保持关闭的对话框。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class HomeController extends GetxController {
Future<void> openAndCloseLoadingDialog() async {
showDialog(
context: Get.overlayContext,
barrierDismissible: false,
builder: (_) => WillPopScope(
onWillPop: () async => false,
child: Center(
child: SizedBox(
width: 60,
height: 60,
child: CircularProgressIndicator(
strokeWidth: 10,
),
),
),
),
);
await Future.delayed(Duration(seconds: 3));
Get.dialog(
AlertDialog(
title: Text("This should not be closed automatically"),
content: Text("This should not be closed automatically"),
actions: <Widget>[
FlatButton(
child: Text("CLOSE"),
onPressed: () {
Get.back();
},
)
],
),
barrierDismissible: false,
); …Run Code Online (Sandbox Code Playgroud) 我正在开发适用于 iOS、Android 和 Web 的 Flutter 应用程序。我决定使用 GetX 包,因为它使事情变得更容易,但我对如何处理 Web URL/地址栏导航感到困惑。例如,我的一个屏幕显示有关事件的详细信息。通过应用程序导航到那里效果很好,但是如果我在浏览器中粘贴到该事件的链接会怎么样?我的 GetX EventController 管理一个_selectedEvent事件,这就是我知道要显示哪个事件的详细信息的方式。但是,如果我使用 URL 链接,我的_selectedEvent活动永远不会更新,详细信息屏幕也不会显示正确的活动。
目前,我在主页中设置_selectedEvent当用户单击事件时导航到详细信息屏幕。但是,如果用户通过浏览器中的地址栏导航,我无法更新_selectedEvent. 我认为我无法使用 GetX 中的任何状态管理器,因为我没有更新小部件,所以我不确定在哪里更新我的_selectedEvent.
我应该如何处理地址栏导航?
希望我的解释有意义。我还在努力学习Flutter。
在我的 Flutter 应用程序中,我使用 GetxController 作为每个视图的 viewModel:
\nimport \'package:flutter/material.dart\';\nimport \'package:get/get.dart\';\n\nimport \'track_activity_view_model.dart\';\n\n// Main widget of the view\nclass TrackActivityView extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return GetBuilder<TrackActivityViewModel>(\n init: TrackActivityViewModel(),\n builder: (viewModel) {\n return SafeArea(\n child: Scaffold(\n appBar: AppBar(title: Text(\'Registra un\\\'attivit\xc3\xa0\')),\n body: viewModel.serviceEnabled\n ? AskPermissionWidget()\n : TrackingWidget(viewModel),\n ));\n });\n }\n}\n\nclass AskPermissionWidget extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return GetBuilder<TrackActivityViewModel>(\n init: TrackActivityViewModel(),\n builder: (viewModel) {\n // Some code that use viewModel\n return Container();\n });\n }\n}\n\nclass TrackingWidget extends StatelessWidget {\n final …Run Code Online (Sandbox Code Playgroud) 每当我的 GetX 状态发生变化时,如何调用无状态小部件中的特定函数?例如,每当我的底部导航栏的索引发生变化时,如何触发事件?
Obx(
() =>
BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.explore),
label: 'Erkunden',
),
],
currentIndex: bottomNavigationController.index.value,
onTap: (index) {
bottomNavigationController.changeIndex(index);
},
)
),
Run Code Online (Sandbox Code Playgroud)
编辑:
class BottomNavigationController extends GetxController {
RxInt index = 0.obs;
void changeIndex(int val) {
index.value = val;
}
}
Run Code Online (Sandbox Code Playgroud) 问题: 我在使用 GetX 和 AutoRoute 设置导航时遇到问题。
代码设置: 根据 GetX 文档,如果您想使用 GetX 导航,则必须将 MaterialApp() 替换为 GetMaterialApp()。您还设置了路线。
void main() {
runApp(
GetMaterialApp(
initialRoute: '/',
getPages: [
GetPage(name: '/', page: () => MyHomePage()),
GetPage(name: '/second', page: () => Second()),
GetPage(
name: '/third',
page: () => Third(),
transition: Transition.zoom
),
],
)
);
}
Run Code Online (Sandbox Code Playgroud)
AutoRoute示例使用MaterialApp.router()来设置routerDelegate和routeInformationParser。
final _appRouter = AppRouter()
...
Widget build(BuildContext context){
return MaterialApp.router(
routerDelegate: _appRouter.delegate(...initialConfig),
routeInformationParser: _appRouter.defaultRouteParser(),
),
}
Run Code Online (Sandbox Code Playgroud)
以下是我根据 Getx 和 AutoRoute 设置导航的方法:
void main() {
configureDependencies();
runApp(Portfolio());
}
class Portfolio …Run Code Online (Sandbox Code Playgroud) 我是 Flutter GetX 包的新手,在使用 flutter GetX 包时遇到问题。我有几个应用程序屏幕,其中一个屏幕用于列出数据库中的所有产品。
在我的产品控制器中,我从数据库中获取所有数据并使用列表视图显示,如下面给出的代码所示,并且工作正常。
问题:当我从另一个控制器插入新记录并返回产品列表控制器时,它不会显示新添加的数据。实际上这次onInit方法不会触发。
控制器代码
class ProductIndexCtrl extends GetxController {
var products = [].obs;
@override
void onInit() {
super.onInit();
getAll();
}
void getAll() {
Product.getAll().then((jsonList) {
products.value = Product.fromJsonList(jsonList);
});
}
}
class ProductCreateCtrl extends GetxController {
void saveData(Product product) {
...
...
//after successful insert
Get.toNamed('productIndex');
}
}
Run Code Online (Sandbox Code Playgroud)
产品索引屏幕
final ctrl = Get.put(ProductIndexCtrl());
GetX<ProductIndexCtrl>(builder: (controller) {
return _listview(controller.products);
}
Widget _listview(data) {
...
...
}
Run Code Online (Sandbox Code Playgroud) 我尝试检查 GetX 包。我一直在更新 String.obs
这是示例代码:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class MyController extends GetxController {
var name = "JOHN".obs;
var age = 33.obs;
incrementAge() {
age++;
}
changeName(String s) {
name = RxString(s);
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
TextEditingController textEditingController …Run Code Online (Sandbox Code Playgroud) 使用 GetX (或任何其他方式)在 flutter 中发送带有参数的数据是一个好习惯吗?我的意思是它对性能和内存容量有好处吗?...就像这个例子:
Get.toNamed(AppPages.servicesDetails, arguments: [service]);
Run Code Online (Sandbox Code Playgroud)
当(服务)仅包含来自 API 的一种产品的数据时:例如(id、名称、信息、图像...等)。
并在服务详细信息页面中:
final s = Get.arguments[0];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child: Text(s.name),),
Run Code Online (Sandbox Code Playgroud) 我使用 GetX 来实现底部工作表的目的。我使用下面的代码来实现该功能。当我按 (i)-info 图标时,我希望弹出底部工作表,但我收到此错误。
处理手势时抛出以下 _CastError:空值检查运算符
这是代码:
GestureDetector(
onTap:(){
Get.bottomSheet(
Container(
child: Wrap(
children:<Widget>[
ListTile(
leading: Icon(Icons.wb_incandescent),
title: Text("Testing"),
onTap: () => {Get.changeTheme(ThemeData.light())},
),
ListTile(
leading: Icon(Icons.wb_incandescent),
title: Text("Testing"),
onTap: () => {Get.changeTheme(ThemeData.dark())},
),
]
),
),
);
},
child: Container(
width: 30.0,
height: 30.0,
decoration: BoxDecoration(
color: Color(0xFF1D265F),
borderRadius: BorderRadius.circular(80.0),
),
child: new LayoutBuilder(
builder: (context, constraint) {
return new Icon(
Icons.info_outline_rounded,
color: widget.cardContent.cardColor,
size: constraint.biggest.height,
);
},
),
),
),
Run Code Online (Sandbox Code Playgroud) dart android-studio flutter flutter-dependencies flutter-getx
一段时间以来,我注意到我的一些 Firebase 文档的字段被删除,即使我没有删除它们或在我的应用程序上编写任何逻辑来删除文档或文档本身的字段。这张图片显示了我的 firebase 项目中的一个文档,该文档的字段已自行删除。
firebase项目已连接到我的flutter应用程序,但我还没有编写任何删除功能。我只是偶尔用最新数据更新字段。请问谁知道发生了什么事?
编辑
这就是我更新用户集合文档的方式
Future<String?> submitUpdate(User user) async{
CollectionReference userCollection = firestore.collection('users');
String? uid = await secureStorage.read(key: 'uid');
try{
//updates user doc in users collection
await userCollection.doc(uid).update(user.toMap());
return "Success";
}catch(e){
return null;
}
Run Code Online (Sandbox Code Playgroud)
这就是我在用户集合中创建用户文档的方法。
Future<String?> saveUserCredentials(User user) async{
CollectionReference users = firestore.collection('users');
String? uid = await FlutterSecureStorage().read(key: "uid");
try{
//creates a user doc in the users collection
await users.doc(uid).set(
user.toMap()
);
return "Success";
}catch (e){
print(e);
return null;
}
Run Code Online (Sandbox Code Playgroud)
我有一个定义用户对象的用户模型。
firebase firebase-realtime-database flutter google-cloud-firestore flutter-getx
flutter ×10
flutter-getx ×10
dart ×3
android ×1
arguments ×1
firebase ×1
flutter-web ×1
performance ×1