Flutter Flatter中可忽略的页面视图不';我不能正常工作
我面临一个问题。我有一个flatter应用程序,其中有两个页面(第1页和第2页),第2页被包装成一个Dismissible,所以当我向下拖动时,页面弹出返回到第1页。所有这些都很好,但在第2页我有一个页面视图。在这个页面视图中,当页面索引更改时,我调用一个函数(使用onPageChanged回调),如果在这个函数中,我在一个通知侦听器的提供程序中放置了一个setState或调用了一个函数,那么页面不再更改,但函数仍然被调用。 也许我做错了,但如果你有任何建议或想法来解决它,我将不胜感激 以下是代码snipsets: main.dart:Flutter Flatter中可忽略的页面视图不';我不能正常工作,flutter,flutter-layout,Flutter,Flutter Layout,我面临一个问题。我有一个flatter应用程序,其中有两个页面(第1页和第2页),第2页被包装成一个Dismissible,所以当我向下拖动时,页面弹出返回到第1页。所有这些都很好,但在第2页我有一个页面视图。在这个页面视图中,当页面索引更改时,我调用一个函数(使用onPageChanged回调),如果在这个函数中,我在一个通知侦听器的提供程序中放置了一个setState或调用了一个函数,那么页面不再更改,但函数仍然被调用。 也许我做错了,但如果你有任何建议或想法来解决它,我将不胜感激 以下是代
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import './custom_provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [ChangeNotifierProvider.value(value: CustomProvider())],
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FirstScreen(),
),
);
}
}
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Test'),
),
body: Center(
child: TextButton(
child: Text('push'),
onPressed: () {
showGeneralDialog(
barrierDismissible: false,
barrierColor: Colors.transparent,
transitionDuration: const Duration(milliseconds: 400),
context: context,
pageBuilder: (context, anim1, anim2) {
return SecondScreen();
},
transitionBuilder: (context, anim1, anim2, child) {
return SlideTransition(
position: Tween(begin: Offset(0, 1), end: Offset(0, 0))
.animate(anim1),
child: child,
);
},
);
},
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final provider = Provider.of<CustomProvider>(context);
void onPageChanged(int value) async {
// if (value == 0 && FocusScope.of(context).hasFocus) {
// FocusScope.of(context).unfocus();
// }
print(value);
provider.toggleIndexAddScreenPage(value);
}
return Dismissible(
key: UniqueKey(),
direction: DismissDirection.down,
onDismissed: (_) {
Navigator.of(context).pop();
},
child: Scaffold(
appBar: AppBar(
title: Text('Test'),
),
body: PageView(
onPageChanged: (value) => onPageChanged(value),
physics: const BouncingScrollPhysics(),
children: [
Container(
width: double.infinity,
height: double.infinity,
color: Colors.pink,
),
Container(
width: double.infinity,
height: double.infinity,
color: Colors.blue,
),
],
),
),
);
}
}
import 'package:flutter/cupertino.dart';
class CustomProvider extends ChangeNotifier {
int indexAddScreenPage = 0;
void toggleIndexAddScreenPage(int value) {
indexAddScreenPage = value;
notifyListeners();
}
}