From 3fb53f9c1c943dc7af747b56d9b5444986b3acc1 Mon Sep 17 00:00:00 2001
From: Chaitanya <schlockmangra@gmail.com>
Date: Sun, 27 Mar 2022 05:19:18 +0200
Subject: [PATCH] First version of bottom navigation bar

---
 .../forum/forum.dart                          |  83 +++++
 .../weather/current_weather.dart              |  93 ++++++
 .../weather/weather.dart                      |  20 ++
 lib/main.dart                                 | 152 ++++-----
 pubspec.lock                                  | 301 ++++++++++++++++++
 pubspec.yaml                                  |  94 ++++++
 6 files changed, 670 insertions(+), 73 deletions(-)
 create mode 100644 lib/bottom_navigation_bar_buttons/forum/forum.dart
 create mode 100644 lib/bottom_navigation_bar_buttons/weather/current_weather.dart
 create mode 100644 lib/bottom_navigation_bar_buttons/weather/weather.dart
 create mode 100644 pubspec.lock
 create mode 100644 pubspec.yaml

diff --git a/lib/bottom_navigation_bar_buttons/forum/forum.dart b/lib/bottom_navigation_bar_buttons/forum/forum.dart
new file mode 100644
index 0000000..4ae4dfe
--- /dev/null
+++ b/lib/bottom_navigation_bar_buttons/forum/forum.dart
@@ -0,0 +1,83 @@
+import 'package:flutter/material.dart';
+
+import '../../main.dart';
+
+class Forum extends StatefulWidget {
+  const Forum({Key? key}) : super(key: key);
+
+  @override
+  State<Forum> createState() => _ForumState();
+}
+
+class _ForumState extends State<Forum> {
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: const Text("Forum"),
+      ),
+      body: Column(
+        children: <Widget>[
+          ForumFolder(
+            iconData: Icons.account_balance_outlined,
+            title: "Aufenthalt",
+          ),
+          ForumFolder(
+            iconData: Icons.account_box_outlined,
+            title: "Jobbörse",
+          ),
+          ForumFolder(
+            iconData: Icons.alternate_email,
+            title: "Allgemein",
+          )
+        ],
+      ),
+    );
+  }
+}
+
+class ForumFolder extends StatefulWidget {
+  ForumFolder({
+    Key? key,
+    required this.iconData,
+    required this.title,
+  }) : super(key: key);
+
+  IconData iconData;
+  String title;
+
+  @override
+  State<ForumFolder> createState() => _ForumFolderState();
+}
+
+class _ForumFolderState extends State<ForumFolder> {
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      children: <Widget>[
+        Padding(
+            padding: EdgeInsetsDirectional.fromSTEB(20, 5, 10, 5),
+            child: ElevatedButton(
+              onPressed: () {
+                Navigator.push(
+                  context,
+                  MaterialPageRoute(builder: (context) => const SecondRoute()),
+                );
+              },
+              child: Row(
+                children: [
+                  Icon(
+                    widget.iconData,
+                    color: Colors.black,
+                  ),
+                  Text(
+                    " " + widget.title,
+                    style: TextStyle(fontSize: 30, color: Colors.black),
+                  )
+                ],
+              ),
+            )),
+      ],
+    );
+  }
+}
diff --git a/lib/bottom_navigation_bar_buttons/weather/current_weather.dart b/lib/bottom_navigation_bar_buttons/weather/current_weather.dart
new file mode 100644
index 0000000..3ed0685
--- /dev/null
+++ b/lib/bottom_navigation_bar_buttons/weather/current_weather.dart
@@ -0,0 +1,93 @@
+import 'dart:convert';
+import 'package:flutter/material.dart';
+import 'package:http/http.dart' as http;
+import 'package:google_fonts/google_fonts.dart';
+
+import 'weather.dart';
+
+class CurrentWeather extends StatefulWidget {
+  const CurrentWeather({Key? key}) : super(key: key);
+
+  @override
+  _CurrentWeatherState createState() => _CurrentWeatherState();
+}
+
+class _CurrentWeatherState extends State<CurrentWeather> {
+  late WeatherData weather;
+
+  @override
+  Widget build(BuildContext buildContext) {
+    return Container(
+        child: Scaffold(
+            appBar: AppBar(
+              title: const Text("Deggendorf"),
+            ),
+            body:
+            Column(mainAxisAlignment: MainAxisAlignment.center, children: [
+              Container(
+                width: MediaQuery.of(context).size.width,
+                height: MediaQuery.of(context).size.height - 56,
+                decoration: const BoxDecoration(
+                    image: DecorationImage(
+                        image: AssetImage(
+                            'assets/chuttersnap-TSgwbumanuE-unsplash1.jpg'),
+                        fit: BoxFit.cover)),
+                child: FutureBuilder(
+                  builder: (buildContext, snapshot) {
+                    if (snapshot.connectionState == ConnectionState.done) {
+                      weather = snapshot.data as WeatherData;
+                      if (weather == null) {
+                        return const Text("Error getting weather");
+                      } else {
+                        return weatherBox(weather);
+                      }
+                    } else {
+                      return const CircularProgressIndicator();
+                    }
+                  },
+                  future: getCurrentWeather(),
+                ),
+              )
+            ])));
+  }
+}
+
+Widget weatherBox(WeatherData weather) {
+  return Column(children: <Widget>[
+    Padding(
+        padding: const EdgeInsets.fromLTRB(0, 150, 0, 0),
+        child: Text("${weather.temperature}°C",
+            style: GoogleFonts.dancingScript(
+                fontSize: 65,
+                color: Color.fromRGBO(0, 0, 139, 0.7),
+                fontWeight: FontWeight.bold))),
+    Text("${weather.description}",
+        style: GoogleFonts.pacifico(
+            fontSize: 30, color: Color.fromRGBO(0, 0, 139, 0.7))),
+    Padding(
+        padding: const EdgeInsets.fromLTRB(0, 50, 0, 0),
+        child: Text("Feels:${weather.feelsLike}°C",
+            style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15))),
+    Text("Highest: ${weather.high}°C    Lowest: ${weather.low}°C",
+        style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15)),
+  ]);
+}
+
+Future getCurrentWeather() async {
+  WeatherData? weather;
+  String latitude = "48.8296064"; //coordinates of THD
+  String longitude = "12.9542545";
+  String apiKey = "bdfd87b51211cb50b78a20c889a500b3";
+  var url =
+      "https://api.openweathermap.org/data/2.5/weather?lat=$latitude&lon=$longitude&appid=$apiKey&units=metric";
+
+  final response = await http.get(Uri.parse(url));
+
+  if (response.statusCode == 200) {
+    weather = WeatherData.fromJson(jsonDecode(response.body));
+    return weather;
+  } else {
+    weather = null;
+    FlutterError.presentError;
+  }
+}
diff --git a/lib/bottom_navigation_bar_buttons/weather/weather.dart b/lib/bottom_navigation_bar_buttons/weather/weather.dart
new file mode 100644
index 0000000..b0385ad
--- /dev/null
+++ b/lib/bottom_navigation_bar_buttons/weather/weather.dart
@@ -0,0 +1,20 @@
+class WeatherData {
+  final double temperature;
+  final double feelsLike;
+  final double low;
+  final double high;
+  final String description;
+
+  WeatherData({required this.temperature, required this.feelsLike, required this.low, required this.high, required this.description});
+
+  factory WeatherData.fromJson(Map<String, dynamic> json) {
+    return WeatherData(
+      temperature: json['main']['temp'].toDouble(),
+      feelsLike: json['main']['feels_like'].toDouble(),
+      low: json['main']['temp_min'].toDouble(),
+      high: json['main']['temp_max'].toDouble(),
+      description: json['weather'][0]['description'],
+    );
+  }
+
+}
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
index fb7357e..5a6d046 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,5 +1,8 @@
+import 'package:deggendorf_app/bottom_navigation_bar_buttons/weather/current_weather.dart';
 import 'package:flutter/material.dart';
 
+import 'bottom_navigation_bar_buttons/forum/forum.dart';
+
 void main() {
   runApp(const MyApp());
 }
@@ -11,17 +14,8 @@ class MyApp extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return MaterialApp(
-      title: 'Flutter Demo',
+      title: 'Deggendorf App',
       theme: ThemeData(
-        // This is the theme of your application.
-        //
-        // Try running your application with "flutter run". You'll see the
-        // application has a blue toolbar. Then, without quitting the app, try
-        // changing the primarySwatch below to Colors.green and then invoke
-        // "hot reload" (press "r" in the console where you ran "flutter run",
-        // or simply save your changes to "hot reload" in a Flutter IDE).
-        // Notice that the counter didn't reset back to zero; the application
-        // is not restarted.
         primarySwatch: Colors.blue,
       ),
       home: const MyHomePage(title: 'DeggApp'),
@@ -32,15 +26,6 @@ class MyApp extends StatelessWidget {
 class MyHomePage extends StatefulWidget {
   const MyHomePage({Key? key, required this.title}) : super(key: key);
 
-  // This widget is the home page of your application. It is stateful, meaning
-  // that it has a State object (defined below) that contains fields that affect
-  // how it looks.
-
-  // This class is the configuration for the state. It holds the values (in this
-  // case the title) provided by the parent (in this case the App widget) and
-  // used by the build method of the State. Fields in a Widget subclass are
-  // always marked "final".
-
   final String title;
 
   @override
@@ -48,77 +33,98 @@ class MyHomePage extends StatefulWidget {
 }
 
 class _MyHomePageState extends State<MyHomePage> {
-  int _counter = 0;
-
-  void _incrementCounter() {
+  int _selectedIndex = 0;
+
+  /*
+  Here is the list where the widgets for the bottom navigation bar are
+  The list starts at index zero
+  An exception has yet to be implemented which will be triggered whenever there
+  is not enough widget for the number of buttons
+   */
+  static const List<Widget> _widgetOptions = <Widget>[
+    //Index: 0
+    CurrentWeather(),
+    //Index: 1,
+    SecondRoute(),
+    //Index: 2,
+    Forum(),
+    //Index: 3
+    SecondRoute(),
+    //Index: 4
+    SecondRoute()
+  ];
+
+  void _onItemTapped(int index) {
     setState(() {
-      _counter++;
+      _selectedIndex = index;
     });
   }
 
   @override
   Widget build(BuildContext context) {
     return Scaffold(
-      appBar: AppBar(
-        // Here we take the value from the MyHomePage object that was created by
-        // the App.build method, and use it to set our appbar title.
-        title: Text(widget.title),
+      /*
+      Here is where the magic takes place :)
+      Each of the navigation bar item has an index starting from 0
+      This index is used to refer to a list and call widgets
+       */
+      body: Center(
+        child: _widgetOptions.elementAt(_selectedIndex),
       ),
-      body: Column(
-        children: [
-          MenuButton(title: "Wetter", iconData: Icons.ac_unit),
-          MenuButton(title: "Karte", iconData: Icons.location_on),
-          MenuButton(title: "Nachrichten", iconData: Icons.new_releases_sharp),
-          MenuButton(title: "Events", iconData: Icons.alternate_email)
+      /*
+      From here are the bottom navigation bar's buttons
+      Each button has an icon, a label and a colour, each of which are optional
+       */
+      bottomNavigationBar: BottomNavigationBar(
+        items: const <BottomNavigationBarItem>[
+          BottomNavigationBarItem(
+            icon: Icon(Icons.home),
+            label: 'Home',
+            backgroundColor: Colors.blue,
+          ),
+          BottomNavigationBarItem(
+            icon: Icon(Icons.alternate_email),
+            label: 'Event',
+            backgroundColor: Colors.green,
+          ),
+          BottomNavigationBarItem(
+            icon: Icon(Icons.accessibility_sharp),
+            label: 'Forum',
+            backgroundColor: Colors.purple,
+          ),
+          BottomNavigationBarItem(
+            icon: Icon(Icons.account_circle),
+            label: 'Konto',
+            backgroundColor: Colors.brown,
+          ),
+          BottomNavigationBarItem(
+            icon: Icon(Icons.settings),
+            label: 'Einstellung',
+            backgroundColor: Colors.pink,
+          ),
         ],
-
+        currentIndex: _selectedIndex,
+        selectedItemColor: Colors.amber[800],
+        onTap: _onItemTapped,
       ),
-      floatingActionButton: FloatingActionButton(
-        onPressed: _incrementCounter,
-        tooltip: 'Increment',
-        child: const Icon(Icons.add),
-      ), // This trailing comma makes auto-formatting nicer for build methods.
     );
   }
 }
 
-class MenuButton extends StatefulWidget {
-  const MenuButton({Key? key,
-  required this.title,
-    required this.iconData,
-  }) : super(key: key);
-
-  final String title;
-  final IconData iconData;
-
-  @override
-  State<MenuButton> createState() => _MenuButtonState();
-}
-
-class _MenuButtonState extends State<MenuButton> {
-  void _incrementCounter() async{
-    setState(() {
-    });
-  }
+/*
+This is a default route shown wherever a page is not developed yet
+ */
+class SecondRoute extends StatelessWidget {
+  const SecondRoute({Key? key}) : super(key: key);
 
   @override
   Widget build(BuildContext context) {
-    return InkWell(
-      child: Column(
-        children: <Widget>[
-          Padding(
-            padding: const EdgeInsetsDirectional.fromSTEB(20, 20, 20, 20),
-            child: Row(
-              children: <Widget>[
-                Icon(widget.iconData, color: Colors.blue, size: 30,),
-                Text("  " + widget.title, style: TextStyle(fontSize: 25, color: Colors.black),)
-
-              ],
-            ),
-          )
-        ],
-      )
+    return Scaffold(
+      appBar: AppBar(
+        title: const Text('Second Route'),
+      ),
+      body: const Center(
+          child: Text("Diese Seite wurde noch nicht entwickelt!!!")),
     );
   }
 }
-
diff --git a/pubspec.lock b/pubspec.lock
new file mode 100644
index 0000000..68f343a
--- /dev/null
+++ b/pubspec.lock
@@ -0,0 +1,301 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+  async:
+    dependency: transitive
+    description:
+      name: async
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.8.2"
+  boolean_selector:
+    dependency: transitive
+    description:
+      name: boolean_selector
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  characters:
+    dependency: transitive
+    description:
+      name: characters
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.0"
+  charcode:
+    dependency: transitive
+    description:
+      name: charcode
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.3.1"
+  clock:
+    dependency: transitive
+    description:
+      name: clock
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.0"
+  collection:
+    dependency: transitive
+    description:
+      name: collection
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.15.0"
+  crypto:
+    dependency: transitive
+    description:
+      name: crypto
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.1"
+  cupertino_icons:
+    dependency: "direct main"
+    description:
+      name: cupertino_icons
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.4"
+  fake_async:
+    dependency: transitive
+    description:
+      name: fake_async
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.0"
+  ffi:
+    dependency: transitive
+    description:
+      name: ffi
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.2"
+  file:
+    dependency: transitive
+    description:
+      name: file
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.1.2"
+  flutter:
+    dependency: "direct main"
+    description: flutter
+    source: sdk
+    version: "0.0.0"
+  flutter_lints:
+    dependency: "direct dev"
+    description:
+      name: flutter_lints
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.4"
+  flutter_test:
+    dependency: "direct dev"
+    description: flutter
+    source: sdk
+    version: "0.0.0"
+  google_fonts:
+    dependency: "direct dev"
+    description:
+      name: google_fonts
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.3.1"
+  http:
+    dependency: "direct main"
+    description:
+      name: http
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.13.4"
+  http_parser:
+    dependency: transitive
+    description:
+      name: http_parser
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
+  lints:
+    dependency: transitive
+    description:
+      name: lints
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.1"
+  matcher:
+    dependency: transitive
+    description:
+      name: matcher
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.12.11"
+  material_color_utilities:
+    dependency: transitive
+    description:
+      name: material_color_utilities
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.1.3"
+  meta:
+    dependency: transitive
+    description:
+      name: meta
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.7.0"
+  path:
+    dependency: transitive
+    description:
+      name: path
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.8.0"
+  path_provider:
+    dependency: transitive
+    description:
+      name: path_provider
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.9"
+  path_provider_android:
+    dependency: transitive
+    description:
+      name: path_provider_android
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.12"
+  path_provider_ios:
+    dependency: transitive
+    description:
+      name: path_provider_ios
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.8"
+  path_provider_linux:
+    dependency: transitive
+    description:
+      name: path_provider_linux
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.5"
+  path_provider_macos:
+    dependency: transitive
+    description:
+      name: path_provider_macos
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.5"
+  path_provider_platform_interface:
+    dependency: transitive
+    description:
+      name: path_provider_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.3"
+  path_provider_windows:
+    dependency: transitive
+    description:
+      name: path_provider_windows
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.5"
+  platform:
+    dependency: transitive
+    description:
+      name: platform
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.1.0"
+  plugin_platform_interface:
+    dependency: transitive
+    description:
+      name: plugin_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.2"
+  process:
+    dependency: transitive
+    description:
+      name: process
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.2.4"
+  sky_engine:
+    dependency: transitive
+    description: flutter
+    source: sdk
+    version: "0.0.99"
+  source_span:
+    dependency: transitive
+    description:
+      name: source_span
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.8.1"
+  stack_trace:
+    dependency: transitive
+    description:
+      name: stack_trace
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.10.0"
+  stream_channel:
+    dependency: transitive
+    description:
+      name: stream_channel
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.0"
+  string_scanner:
+    dependency: transitive
+    description:
+      name: string_scanner
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.0"
+  term_glyph:
+    dependency: transitive
+    description:
+      name: term_glyph
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.2.0"
+  test_api:
+    dependency: transitive
+    description:
+      name: test_api
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.4.8"
+  typed_data:
+    dependency: transitive
+    description:
+      name: typed_data
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.3.0"
+  vector_math:
+    dependency: transitive
+    description:
+      name: vector_math
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.1"
+  win32:
+    dependency: transitive
+    description:
+      name: win32
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.4.4"
+  xdg_directories:
+    dependency: transitive
+    description:
+      name: xdg_directories
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.2.0+1"
+sdks:
+  dart: ">=2.16.1 <3.0.0"
+  flutter: ">=2.10.0-0"
diff --git a/pubspec.yaml b/pubspec.yaml
new file mode 100644
index 0000000..4d3a0c9
--- /dev/null
+++ b/pubspec.yaml
@@ -0,0 +1,94 @@
+name: deggendorf_app
+description: A new Flutter project.
+
+# The following line prevents the package from being accidentally published to
+# pub.dev using `flutter pub publish`. This is preferred for private packages.
+publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+version: 1.0.0+1
+
+environment:
+  sdk: ">=2.16.1 <3.0.0"
+
+# Dependencies specify other packages that your package needs in order to work.
+# To automatically upgrade your package dependencies to the latest versions
+# consider running `flutter pub upgrade --major-versions`. Alternatively,
+# dependencies can be manually updated by changing the version numbers below to
+# the latest version available on pub.dev. To see which dependencies have newer
+# versions available, run `flutter pub outdated`.
+dependencies:
+  flutter:
+    sdk: flutter
+
+
+
+  # The following adds the Cupertino Icons font to your application.
+  # Use with the CupertinoIcons class for iOS style icons.
+  cupertino_icons: ^1.0.4
+  http: ^0.13.4
+
+dev_dependencies:
+  flutter_test:
+    sdk: flutter
+
+  # The "flutter_lints" package below contains a set of recommended lints to
+  # encourage good coding practices. The lint set provided by the package is
+  # activated in the `analysis_options.yaml` file located at the root of your
+  # package. See that file for information about deactivating specific lint
+  # rules and activating additional ones.
+  flutter_lints: ^1.0.4
+  google_fonts: ^2.3.1
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter.
+flutter:
+
+  # The following line ensures that the Material Icons font is
+  # included with your application, so that you can use the icons in
+  # the material Icons class.
+  uses-material-design: true
+  assets:
+    - assets/
+
+  # To add assets to your application, add an assets section, like this:
+  # assets:
+  #   - images/a_dot_burr.jpeg
+  #   - images/a_dot_ham.jpeg
+
+  # An image asset can refer to one or more resolution-specific "variants", see
+  # https://flutter.dev/assets-and-images/#resolution-aware.
+
+  # For details regarding adding assets from package dependencies, see
+  # https://flutter.dev/assets-and-images/#from-packages
+
+  # To add custom fonts to your application, add a fonts section here,
+  # in this "flutter" section. Each entry in this list should have a
+  # "family" key with the font family name, and a "fonts" key with a
+  # list giving the asset and other descriptors for the font. For
+  # example:
+  # fonts:
+  #   - family: Schyler
+  #     fonts:
+  #       - asset: fonts/Schyler-Regular.ttf
+  #       - asset: fonts/Schyler-Italic.ttf
+  #         style: italic
+  #   - family: Trajan Pro
+  #     fonts:
+  #       - asset: fonts/TrajanPro.ttf
+  #       - asset: fonts/TrajanPro_Bold.ttf
+  #         weight: 700
+  #
+  # For details regarding fonts from package dependencies,
+  # see https://flutter.dev/custom-fonts/#from-packages
-- 
GitLab