Freelance

Package dédié aux développements d'application en Flutter. À utiliser comme un Framework ou un toolkit, la première chose à faire sera de l'ajouter aux dependencies dans pubspec.yaml

Ce framework est prévu pour fonctionner avec les plateforme iOS, Android, Web, Linux, Windows, MacOSX.

Les outils utilisés :

Pour utiliser url_launcher, il faut configurer vos autorisations iOS et Android Ajouter dans /android/app/src/main/AndroidManifest.xml

    <!-- The INTERNET permission is required for development. Specifically,
         flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- Provide required visibility configuration for API level 30 and above -->
    <queries>
        <!-- If your app checks for SMS support -->
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="sms" />
        </intent>
        <!-- If your app checks for call support -->
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="tel" />
        </intent>
        <!-- If your app checks for mail support -->
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="mailto" />
        </intent>
        <!-- If your app checks for web support -->
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="https" />
        </intent>
    </queries>

et dans /ios/Runner/Info.plist

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>sms</string>
        <string>tel</string>
        <string>https</string>
        <string>mailto</string>
    </array>

Outils disponibles

Extensions

BuildContext

  • mediaSize: taille de l'écran ou de la fenêtre
  • orientation: positionnement du device
  • theme: données ThemeData

Utilisation :

import 'package:flutter/services.dart';
import 'package:freelance/extensions/context_extensions.dart';

...

  @override
  Widget build(BuildContext context) {
    Size size = context.mediaSize;
    var orientation = context.orientation;
    
    
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text(
              'example app', 
              style: context.theme.textTheme.bodyLarge),
        ),
...

Size

Contribuer

Ajouter une fonctionnalité

Pour créer une fonctionnalité, il faut créer une branche à partir de la branche dev et la nommer feature/<nom de la fonctionnalité>.

Un fois sur cette branche, vous devez commencer par créer le fichier de test <nom de la fonctionnalité>.feature dans le dossier features et le fichier <nom de la fonctionnalité>_steps.dart dans le dossier test. Un fois le fichier créé et avant même de commencer à écrire le Gherkin de la feature, lancez la commande :

flutter packages pub run build_runner watch --delete-conflicting-outputs

Cette commande va générer les fichiers step correspondant à votre feature. Vous pouvez maintenant commencer à écrire votre feature.

Une fois la feature et les steps rédigés, vous pouvez lancer les tests avec la commande :

flutter test

Le résultat des tests devrait être rouge (dans le cas contraire, c'est que vous avez oublié quelque chose). Il ne vous reste qu'à coder votre fronctionnalité pour que les tests passent au vert.

Dans le cas d'un Widget

Si votre fonctionnalité contient ou consiste à avoir un ou plusieurs Widgets, vous devrez ajouter les éléments permettant l'interprétation de Widgetbook.

Commencez par lancer cette commande

flutter packages pub run build_runner watch --delete-conflicting-outputs

Puis ajoutez en entête de vos Widgets les annotations suivantes :

import 'package:widgetbook_annotation/widgetbook_annotation.dart' as widgetbook;

@widgetbook.UseCase(
  name: 'with green color',
  type: Container,
)

Libraries

widgets/landing_page/cover/components/background_image
widgets/landing_page/cover/components/bottom_widgets
extensions/context_extensions
widgets/landing_page/cover/cover
widgets/landing_page/components/detail_widget
widgets/landing_page/components/divided_screen
extensions/extensions_module
widgets/landing_page/cover/components/filtered_column
widgets/landing_page/cover/components/first_plan
widgets/profile/forgiven_password_button
widgets/profile/form_events
widgets/profile/form_label
widgets/profile/form_title
method_channels/freelance
freelance
method_channels/freelance_method_channel
method_channels/freelance_platform_interface
method_channels/freelance_web
widgets/generate_md_theme
widgets/components/gridview_selectable_number_card
extensions/image_provider_extensions
widgets/profile/input_text
widgets/components/forms/input_text
widgets/landing_page
widgets/landing_page/landing_page
widgets/page/lazy_column
widgets/page/lazy_column/lazy_column_divider
widgets/page/lazy_column/lazy_column_extensions
widgets/page/lazy_column/lazy_column_group_title
widgets/page/lazy_column/lazy_column_model
widgets/page/lazy_column/lazy_column_row
widgets/page/lazy_column/lazy_column_title
extensions/list_extensions
widgets/profile/login_bottom_signup
widgets/profile/login_form
widgets/markdown_it
models/models_module
models/module_base
widgets/nullable_widget
widgets/components/plus_moins_value
widgets/preloader
widgets/landing_page/pricing_list/components/pricing_amount
widgets/landing_page/pricing_list/model/pricing_data
widgets/landing_page/pricing_list/model/pricing_data_extensions
widgets/landing_page/pricing_list/pricing_list
widgets/landing_page/pricing_list/components/pricing_page
widgets/profile
widgets/profile/profile_resumed
widgets/responsive
models/result
widgets/components/selectable_number_card
widgets/profile/separator
widgets/landing_page/components/separator_begin
widgets/landing_page/components/separator_end
widgets/profile/signup_button
extensions/size_extensions
widgets/landing_page/slide
widgets/landing_page/components/title_view
widgets/profile/white_button
widgets/widget_module
widgets/page/widgets