Olá Matheus, tudo bem com você?
A maneira como o Flutter faz a parte gráfica dos widgets
independe da plataforma que está sendo utilizada, então se você utilizar o Material
dentro do ìOS`terá o mesmo resultado que no Android ( e quaaaaase vice-versa), na documentação fica até um pouco claro isso:
The Material design language was created for any platform, not just Android. When you write a Material app in Flutter, it has the Material look and feel on all devices, even iOS.
Codelabs Google
Ou seja, como o Material não foi criado pensando em uma plataforma, não temos esse problema de compatibilidade, pois terá o mesmo comportamento sempre :)
Entretanto ao usar o Cupertino dentro do Android teremos a mesma interface visual, entretanto, as fontes serão diferentes, dado que a Apple tem o direito / licença em cima das fontes do sistema
You can technically run a Cupertino app on either Android or iOS, but (due to licensing issues) Cupertino won't have the correct fonts on Android. For this reason, use an iOS-specific device when writing a Cupertino app.
Então o resultado, por conta das fontes, terá uma pequena diferença, para ser sincero eu nunca testei, mas acredito que não seja um grande problema
Agora em relação a melhor abordagem, isso vai depender de vários fatores, questão de tempo de desenvolvimento, tamanho da equipe que está trabalhando no projeto
adicionar uma verificação de qual plataforma o usuário está?
Acredito que essa é uma ótima opção, para que o usuário tenha seus aplicativos todos com o mesmo formato, algumas pessoas gostam de separar o código, por exemplo :
E dessa maneira precisamos trabalhar bem para que haja uma boa reusabilidade :)
utilizar uma solução "bonita" nas duas plataformas?
Aqui temos uma questão bem bacana que é a flexibilidade do Material, podemos criar layouts incríveis que não pareçam muito com Android ou iOS, inclusive é bem comum a gente pegar alguns apps que tem o que chamam de interface única (trazendo uma interface visual mais parecida com a empresa), dessa maneira temos um desenvolvimento em que poucas partes da nossa aplicação acabam sendo diferente de uma plataforma para outra :)
ou então usar algo que traga por padrão o layout das duas plataformas?
Então, essa parte eu não irei opinar tanto por não ter tanto conhecimento, temos um pacote da comunidade que é o platform_widgets
que você acaba tendo um desenvolvimento único, da seguinte maneira:
return PlatformButton(
onPressed: () => print('send'),
child: PlatformText('Send'),
material: (_, __) => MaterialRaisedButtonData(...),
cupertino: (_, __) => CupertinoButtonData(...)
);
Mas não saberia dizer como ele se comportaria em projetos grandes, ou como seria o desempenho do app no longo prazo, acredito que eu iria mais pelas duas primeiras opções :)
Abraços e Bons Estudos!