DEV Community

Cover image for Show me your main.dart - Flutter research
Keff
Keff

Posted on

Show me your main.dart - Flutter research

Do you work on a Flutter project? If so, please share your main.dart file with me (if you want and can).

I'm researching how people organize their main.dart files for a new post for my series Let's learn Flutter. I might want to include some of the entries in the post (and credit you of course).

So, if you're up to it, please share you main.dart file and a little overview on why you organized it that way.

Discussion (28)

Collapse
iizmotabar profile image
Motabar Javaid • Edited

Here's mine: main.dart screenshot

Collapse
manumrigank profile image
MANUMRIGANK

Which editor is this?
*note newbie here

Collapse
iizmotabar profile image
Motabar Javaid

Hey, Sorry for the late reply. @nombrekeff is right. Its a code beautifier ray.so . But the one Keff mentioned also does the same job :)

Thread Thread
manumrigank profile image
MANUMRIGANK • Edited

Thanks
Can I somehow get this color and/or Background in VS Code?

Thread Thread
iizmotabar profile image
Motabar Javaid

You'll have to find some theme that implement those colors. Lemme know If you find it ;)

Thread Thread
nombrekeff profile image
Keff Author

I think there's a theme called "nord" that is quite similar, you could check it out and see if you like it!

Collapse
nombrekeff profile image
Keff Author

I think it's not an editor, most likely something like carbon, it converts code into imagesx like the one shown above! A rather neat site

Thread Thread
manumrigank profile image
MANUMRIGANK

Oh!
Thanks

Collapse
nombrekeff profile image
Keff Author • Edited

I will also add riverpod to my list of reactive options. Never heard of it, looks good!
Do you have experience with it?

Collapse
iizmotabar profile image
Motabar Javaid

Yes, I have been using Riverpod for quite some time now. Riverpod makes my life so much easier. Previously I used Provider for most of my projects but certain limitations made me switch and Riverpod was the No Brainer for me since its very similar to Provider and is superior . I would highly recommend you to give it a try if you're looking for a state management solution.

Thread Thread
nombrekeff profile image
Keff Author

Cool I will check it out for sure! I'm sticking with provider for now for most projects and have not found many limitations yet. Can I ask you which were the limitations you encountered? And what were the reasons you chose Riverpod over other solutions, like let's say, redux or mobx?

I'm also doing research on these topics, so it would be really interesting to hear about that too!

Thread Thread
iizmotabar profile image
Motabar Javaid

The first and far most important thing about Riverpod is that it helps in keeping the business logic and the Widgets separate making the Widget Tree clean and easier to read.
The second thing is that Provider is not compile-time safe.For instance, Provider will only prompt you with an error at runtime If you try to use a Provider that does not even exist.
Another one is the if there are multiple providers of same type within the widget tree, Using Provider, you can only listen to the one which is closer to the Consumer Widget. With Riverpod, you can consume any provider anytime and even anywhere since the Providers are globally defined.

And the list goes on.I hope it helped! If you need more help with it, let me know!

Thread Thread
nombrekeff profile image
Keff Author

Makes sense, thanks for the info. I might get in touch once I start researching more about it!

Thread Thread
iizmotabar profile image
Motabar Javaid

I'm here if you need help. Just let me know

Collapse
nombrekeff profile image
Keff Author

Thanks for the addition!

I found a really usefull package from this, did not know of the existance of device_preview, really usefull package!

Collapse
iizmotabar profile image
Motabar Javaid

Happy to help! :)

Collapse
johnny5development profile image
johnny5development • Edited

Here's mine and I have to admit, i'm excited about Riverpod. In my "InitAppCore"-Widget i'm registering all the Providers I globally need. This is bloating my widgettree. I heavily depend on the concept of ProxyProviders do you know if thats possible with RiverPod?:

import 'package:flutter/material.dart';
import 'package:AppName/src/presentation/widgets/widgets.dart';
import 'main.reflectable.dart';
import 'src/app.dart';

void main() {
  initializeReflectable();
  WidgetsFlutterBinding.ensureInitialized();
  runApp(SystemConfig(child: InitAppCore(child: AppName())));
}
Enter fullscreen mode Exit fullscreen mode
Collapse
nombrekeff profile image
Keff Author

Thanks for the addition, I have not used proxy providers not riverpod, but I found this issue where they talk about it: github.com/rrousselGit/river_pod/i...

Just as a little tip, you can add codeblocks to highlight your code. Like this:

Collapse
johnny5development profile image
johnny5development

Hi Keff, thank you for finding this discussion. I think this is holding me back then from using Riverpod then. I use the proxyprovider for providing a callbackfunction from the authenticator to my grpc client, so the grpcclient knows nothing about the authenticator but can always ask for an id token.
I can think of a simple solution for my bloated widgettree, if i build one inherited widget that registers all the objects in a map[class]object and just provides a getter function.

GrpcClient _initGrpcClient(
    BuildContext ctx, Future<String> Function([bool]) idToken) {
  return GrpcClient(
      GrpcSetupParameter(
          remoteHost: SystemConfig.of(ctx).getValue<String>('backendUrl'),
          remotePort: SystemConfig.of(ctx).getValue<int>('backendPort'),
          options: ChannelOptions(
            credentials: ChannelCredentials.secure(),
            idleTimeout: Duration(minutes: 1),
          )),
      interceptorBuilder: () => [
            MyAuthInterceptor.build(metadataProvider: [
              MyAuthorizationMetadataProvider(idToken: idToken),
            ])
          ],
      serviceBuilder: (c, i) => [
            FileTransferService(c, [
              i<MyAuthInterceptor>(),
            ]),
            UserProfileService(c, [
              i<MyAuthInterceptor>(),
            ]),
            SomeServiceClass(c, [
              i<MyAuthInterceptor>(),
            ]),
            SomeServiceClass(c, [i<MyAuthInterceptor>()]),
          ]);
}

Enter fullscreen mode Exit fullscreen mode
Thread Thread
nombrekeff profile image
Keff Author

Yeah I don't now much about Riverpod, but maybe @iizmotabar knows as he has been using it.

Collapse
aviadkatani_68 profile image
Aviad • Edited

Hi, this is mine:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await GetStorage.init('MainStorage');
  await PushNotificationService.initializeApp();
  initializeDateFormatting().then(
    (_) => runApp(
      MyApp(),
    ),
  );
}
Enter fullscreen mode Exit fullscreen mode
Collapse
nombrekeff profile image
Keff Author

I'll start, this is one of mine:

import 'package:flutter/material.dart';
import 'package:pegues/api/local/loading.dart';
import 'package:pegues/app.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Loading.setup();

  runApp(const PeguesApp());
}
Enter fullscreen mode Exit fullscreen mode
Collapse
spiderbezno profile image
Collapse
inhuofficial profile image
InHuOfficial • Edited

Comment for the algo -4C

Collapse
Sloan, the sloth mascot
Comment deleted
Collapse
nombrekeff profile image
Keff Author

Would you mind sharing it? no problem if you dont't, but I'd love to see it. Also, have you always done your main.dart file like that, or have experimented and landed on that specific way?

Collapse
cahyowhy profile image
cahyo wibowo • Edited

Here's mine:
using catcher plugins

Alt text of image

Collapse
nombrekeff profile image
Keff Author

Thanks for the addition @cahyowhy . I like that you're handling errors, great stuff! did not know about catcher either (I'm discovering a load of cool packages from this post), we use Sentry at our company for this.