Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Last active March 15, 2022 00:51
Show Gist options
  • Save renatoapcosta/32fcc500d276f9b318eba3eb770a21de to your computer and use it in GitHub Desktop.
Save renatoapcosta/32fcc500d276f9b318eba3eb770a21de to your computer and use it in GitHub Desktop.
Flutter Snippet

Flutter Snippet

Layout

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,),
      ],
    );
  }

}

Providers

Adicionando um provider

child: MaterialApp(
  title: 'BPCMix - Loja',
  debugShowCheckedModeBanner: false,
  ...
)
child: Provider(
  create: (_) => ProductManager(),
  lazy: false,
  child: MaterialApp(
    title: 'BPCMix - Loja',
    debugShowCheckedModeBanner: false,
  ...
  )
)

ChangeNotifierProvider

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

MultiProvider

return MultiProvider(
  providers: [
    ChangeNotifierProvider(
      create: (_) => UserManager(),
      lazy: false,
    ),
    Provider(
      create: (_) => ProductManager(),
      lazy: false,
    )
  ],
  child: MaterialApp(
    title: 'BPCMix - Loja',
    debugShowCheckedModeBanner: false,
  )
)

Navegação pelo AppBar

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

Adicionar SnackBar

final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();

No Scaffolt adicione:

return Scaffold(
      key: scaffoldKey,
      appBar: AppBar(
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment