Mudando de tela
class BaseScreen extends StatelessWidget {
final PageController pageController = PageController();
@override
Widget build(BuildContext context) {
return PageView(
controller: pageController,
physics: const NeverScrollableScrollPhysics(), // Impede a mudança por gesto
children: [
Container(color: Colors.yellow, child: ElevatedButton(
onPressed: (){
pageController.jumpToPage(1);
}, child: Text('Proximo'),
),),
Container(color: Colors.red,),
Container(color: Colors.green,),
],
);
}
}
Adicionando um provider
child: MaterialApp(
title: 'BPCMix - Loja',
debugShowCheckedModeBanner: false,
...
)
child: Provider(
create: (_) => ProductManager(),
lazy: false,
child: MaterialApp(
title: 'BPCMix - Loja',
debugShowCheckedModeBanner: false,
...
)
)
Extender class para ChangeNotifier
class UserManager extends ChangeNotifier {
Chamar o notifyListeners() onde ouve alteração.
set loading(bool value) {
_loading = value;
notifyListeners();
}
Registrar o provider, no caso de um ChangeNotifier
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => UserManager(),
child: MaterialApp(
Agora precisamos ficar observando o widget que vai ocorrer as mudanças:
child: Form(
key: formKey,
child: ListView(
), //ListView
), //Form
child: Form(
key: formKey,
child: Consumer<UserManager>(builder: (_, userManager, child) {
return ListView(
); //ListView
}) //Consumer
), //Form
Podemos colocar child para que o mesmo não seja recriado:
child: Form(
key: formKey,
child: Consumer<UserManager>(builder: (_, userManager, child) {
return ListView(
children: [
child,
SizedBox(height: 32,),
child,
]
); //ListView
},
child: Align(),
) //Consumer
), //Form
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => UserManager(),
lazy: false,
),
Provider(
create: (_) => ProductManager(),
lazy: false,
)
],
child: MaterialApp(
title: 'BPCMix - Loja',
debugShowCheckedModeBanner: false,
)
)
Vamos mudar a navegação de:
child: MaterialApp(
title: 'BPCMix - Loja',
debugShowCheckedModeBanner: false,
theme: ThemeData(),
home: BaseScreen(),
), //MaterialApp
para:
child: MaterialApp(
title: 'BPCMix - Loja',
debugShowCheckedModeBanner: false,
theme: ThemeData(),
initialRoute: '/base',
onGenerateRoute: (settings) {
switch(settings.name){
case '/signup':
return MaterialPageRoute(builder: (_)=> SignUpScreen());
case '/base':
default:
return MaterialPageRoute(builder: (_) => BaseScreen());
}
},
), //MaterialApp
Removeremos o parametro hone e adicionamos onGenerateRoute
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
No Scaffolt adicione:
return Scaffold(
key: scaffoldKey,
appBar: AppBar(