commit 5cc5f01daba44b3682f937e250752e83da344e92 Author: Trent Palmer Date: Fri Aug 30 13:05:00 2019 -0700 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5cd138b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.dart_tool +.packages +build diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..1a21fc2 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,478 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "0.38.1" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.10" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.2" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + bazel_worker: + dependency: transitive + description: + name: bazel_worker + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.21" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + build_config: + dependency: transitive + description: + name: build_config + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.1+1" + build_daemon: + dependency: transitive + description: + name: build_daemon + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + build_modules: + dependency: transitive + description: + name: build_modules + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.3" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.7" + build_runner: + dependency: "direct dev" + description: + name: build_runner + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.7" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.9" + build_web_compilers: + dependency: "direct dev" + description: + name: build_web_compilers + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.3" + built_collection: + dependency: transitive + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.2" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "6.7.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + code_builder: + dependency: transitive + description: + name: code_builder + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.11" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.1" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.10" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.9" + flutter_web: + dependency: "direct main" + description: + path: "packages/flutter_web" + ref: HEAD + resolved-ref: bdd12b223a7e7f268508784a7b78312e47664556 + url: "https://github.com/flutter/flutter_web" + source: git + version: "0.0.0" + flutter_web_ui: + dependency: "direct main" + description: + path: "packages/flutter_web_ui" + ref: HEAD + resolved-ref: bdd12b223a7e7f268508784a7b78312e47664556 + url: "https://github.com/flutter/flutter_web" + source: git + version: "0.0.0" + front_end: + dependency: transitive + description: + name: front_end + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.23" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.7" + graphs: + dependency: transitive + description: + name: graphs + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + html: + dependency: "direct main" + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+2" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0+2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.0" + io: + dependency: transitive + description: + name: io + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.3" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1+1" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" + kernel: + dependency: transitive + description: + name: kernel + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.23" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.3+2" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.6+3" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + package_resolver: + dependency: transitive + description: + name: package_resolver + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.10" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.4" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0+1" + pool: + dependency: transitive + description: + name: pool + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" + protobuf: + dependency: transitive + description: + name: protobuf + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.15" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.2" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + scratch_space: + dependency: transitive + description: + name: scratch_space + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.5" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.3" + source_maps: + dependency: transitive + description: + name: source_maps + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.8" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.5" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.19" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + timing: + dependency: transitive + description: + name: timing + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7+12" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.15" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.16" +sdks: + dart: ">=2.4.0 <3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..74c27db --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,30 @@ +name: concisepdx + +environment: + sdk: '>=2.2.0 <3.0.0' + +dependencies: + flutter_web: any + flutter_web_ui: any + html: ^0.14.0+2 + +dev_dependencies: + # Enables the `pub run build_runner` command + build_runner: ^1.4.0 + # Includes the JavaScript compilers + build_web_compilers: ^2.0.0 + +# flutter_web packages are not published to pub.dartlang.org +# These overrides tell the package tools to get them from GitHub +dependency_overrides: + flutter_web: + git: + url: https://github.com/flutter/flutter_web + path: packages/flutter_web + flutter_web_ui: + git: + url: https://github.com/flutter/flutter_web + path: packages/flutter_web_ui + +flutter: + uses-material-design: true diff --git a/web/assets/FontManifest.json b/web/assets/FontManifest.json new file mode 100644 index 0000000..ac2ce1c --- /dev/null +++ b/web/assets/FontManifest.json @@ -0,0 +1 @@ +[ { "family": "MaterialIcons", "fonts": [ { "asset": "https://fonts.gstatic.com/s/materialicons/v42/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2" } ] } ] diff --git a/web/attractions.dart b/web/attractions.dart new file mode 100644 index 0000000..5f2429c --- /dev/null +++ b/web/attractions.dart @@ -0,0 +1,39 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; +import 'card_templates.dart'; + +class Attractions extends StatefulWidget { + @override + _AttractionsState createState() => _AttractionsState(); +} + +class _AttractionsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + 'attractions', + ), + centerTitle: true, + backgroundColor: navy, + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + columbiaGorge(), + multnomahFalls(), + mountHood(), + mountSaintHelens(), + oregonCoast(), + ], + ), + ), + ), + ); + } +} diff --git a/web/card_templates.dart b/web/card_templates.dart new file mode 100644 index 0000000..aebb11c --- /dev/null +++ b/web/card_templates.dart @@ -0,0 +1,216 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'dart:html' as html; + +Card infoCard(String leftText,String infoUrl,String infoUrlName) { + return Card( + margin: EdgeInsets.only( + left: 4, + top: 4, + right: 4, + bottom: 0, + ), + color: Colors.black, + child: Card( + margin: EdgeInsets.all(4.0), + color: ivory, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + children: [ + Expanded( + flex: 8, + child: Text( + leftText, + style: TextStyle( + fontSize: 20.0, + ), + ), + ), + Expanded( + flex: 2, + child: InkWell( + child: Icon( + Icons.info, + size: 50.0, + color: Colors.black, + ), + onTap: () { + html.window.open(infoUrl,infoUrlName); + }, + ), + ), + ], + ), + ), + ), + ); +} + +Card cardThree(String allText) { + return Card( + margin: EdgeInsets.only( + left: 4, + top: 4, + right: 4, + bottom: 0, + ), + color: Colors.black, + child: Card( + margin: EdgeInsets.all(4.0), + color: ivory, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + allText, + style: TextStyle( + fontSize: 20.0, + ), + ), + ), + ), + ); +} + +Card cardOne(String leftText) { + return Card( + margin: EdgeInsets.only( + left: 4, + top: 4, + right: 4, + bottom: 0, + ), + color: Colors.black, + child: Card( + margin: EdgeInsets.all(4.0), + color: ivory, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + children: [ + Expanded( + child: Text( + leftText, + style: TextStyle( + fontSize: 20.0, + ), + ), + ), + Container( + child: Icon( + Icons.arrow_right, + size: 50.0, + color: candyApple, + ), + ), + ], + ), + ), + ), + ); +} + +Card cardTwo(String leftText,String mapUrl,String mapUrlName) { + return Card( + margin: EdgeInsets.only( + left: 4, + top: 4, + right: 4, + bottom: 0, + ), + color: Colors.black, + child: Card( + margin: EdgeInsets.all(4.0), + color: ivory, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + children: [ + Expanded( + flex: 8, + child: Text( + leftText, + style: TextStyle( + fontSize: 20.0, + ), + ), + ), + Expanded( + flex: 2, + child: InkWell( + child: Icon( + Icons.map, + size: 50.0, + color: Colors.black, + ), + onTap: () { + html.window.open(mapUrl,mapUrlName); + }, + ), + ), + ], + ), + ), + ), + ); +} + +Card convenienceCardOne(String infoUrl,String infoUrlName,String middleText,String mapUrl,String mapUrlName) { + return Card( + margin: EdgeInsets.only( + left: 4, + top: 4, + right: 4, + bottom: 0, + ), + color: Colors.black, + child: Card( + margin: EdgeInsets.all(4.0), + color: ivory, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Row( + children: [ + Expanded( + flex: 2, + child: InkWell( + child: Icon( + Icons.info, + size: 50.0, + color: candyApple, + ), + onTap: () { + html.window.open(infoUrl,infoUrlName); + }, + ), + ), + Expanded( + flex: 6, + child: Text( + middleText, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20.0, + fontStyle: FontStyle.italic, + ), + ), + ), + Expanded( + flex: 2, + child: InkWell( + child: Icon( + Icons.map, + size: 50.0, + color: Colors.black, + ), + onTap: () { + html.window.open(mapUrl,mapUrlName); + }, + ), + ), + ], + ), + ), + ), + ); +} diff --git a/web/chinesejapanesegardens.dart b/web/chinesejapanesegardens.dart new file mode 100644 index 0000000..6d4e2a9 --- /dev/null +++ b/web/chinesejapanesegardens.dart @@ -0,0 +1,48 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; +import 'prebuildcards.dart'; + +class ChineseJapaneseGardens extends StatefulWidget { + @override + _ChineseJapaneseGardensState createState() => _ChineseJapaneseGardensState(); +} + +class _ChineseJapaneseGardensState extends State { + @override + Widget build(BuildContext context) { + + String _answer = 'The Chinese Garden is a small garden in China Town that will take up maybe an hour of your time.'; + _answer += ' Whereas, Japanese Garden is part of the Washington Park complex, which has many attractions,'; + _answer += ' and is a destination itself.'; + + return Scaffold( + appBar: AppBar( + title: Text('chinese-japanese-gardens'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + cardThree(_answer), + japaneseGarden(), + chineseGarden(), + ], + ), + ), + ), + ); + } +} diff --git a/web/concisepdx.dart b/web/concisepdx.dart new file mode 100644 index 0000000..5b0a7a8 --- /dev/null +++ b/web/concisepdx.dart @@ -0,0 +1,83 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'streetareas.dart'; +import 'vistas.dart'; +import 'faqs.dart'; +import 'hikes.dart'; +import 'attractions.dart'; +import 'card_templates.dart'; + +void main() => runApp(MainApp()); + +class MainApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'concise-pdx', + theme: ThemeData( + primaryColor: navy, + ), + home: ConcisePDX(), + ); + } +} + +class ConcisePDX extends StatefulWidget { + @override + _ConcisePDXState createState() => _ConcisePDXState(); +} + +class _ConcisePDXState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('concise-pdx'), + centerTitle: true, + backgroundColor: navy, + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => StreetAreas())); + }, + child: cardOne('Walkable Streets With Restaurants and Bars'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => Attractions())); + }, + child: cardOne('Must See and Do'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => Hikes())); + }, + child: cardOne('Must Hikes'), + ), + // cardOne('Anecdotal Recommendations'), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => Vistas())); + }, + child: cardOne('Vistas and Overlooks'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => Faqs())); + }, + child: cardOne('FAQ\'s'), + ), + cardOne('Feedback and Source'), + ], + ), + ), + ), + ); + } +} diff --git a/web/defaults.dart b/web/defaults.dart new file mode 100644 index 0000000..b12e3d0 --- /dev/null +++ b/web/defaults.dart @@ -0,0 +1,6 @@ +import 'package:flutter_web/material.dart'; + +final Color navy = Color(0xff00293C); +final Color peacockBlue = Color(0xff1e656d); +final Color ivory = Color(0xfff1f3ce); +final Color candyApple = Color(0xfff62a00); diff --git a/web/eastwillamettevalley.dart b/web/eastwillamettevalley.dart new file mode 100644 index 0000000..ffaa331 --- /dev/null +++ b/web/eastwillamettevalley.dart @@ -0,0 +1,50 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; +import 'prebuildcards.dart'; + +class EastWillametteValley extends StatefulWidget { + @override + _EastWillametteValleyState createState() => _EastWillametteValleyState(); +} + +class _EastWillametteValleyState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable small-towns\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + silverFalls(), + cardTwo('Water and First in Downtown Silverton','https://www.google.com/maps/@45.0052266,-122.7825282,17z','water-first'), + convenienceCardOne( + 'https://en.wikipedia.org/wiki/Oregon_Garden', + 'oregon-garden', + 'Silverton is convenient for a visit to Oregon Garden', + 'https://www.google.com/maps/@44.9927687,-122.7935883,16z', + 'oregon-garden-map' + ), + cardTwo('Downtown Mt Angel is famous for German Food','https://www.google.com/maps/@45.0696714,-122.7991836,17z','downtown-mtangel'), + ], + ), + ), + ), + ); + } +} diff --git a/web/faqs.dart b/web/faqs.dart new file mode 100644 index 0000000..e7e6f7c --- /dev/null +++ b/web/faqs.dart @@ -0,0 +1,47 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'trimet.dart'; +import 'chinesejapanesegardens.dart'; +import 'card_templates.dart'; + +class Faqs extends StatefulWidget { + @override + _FaqsState createState() => _FaqsState(); +} + +class _FaqsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + 'faqs', + ), + centerTitle: true, + backgroundColor: navy, + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => TriMet())); + }, + child: cardOne('How do the buses, lightrail, and streetcars work?'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => ChineseJapaneseGardens())); + }, + child: cardOne('What is the difference between Chinese Gardens and Japanese Gardens?'), + ), + ], + ), + ), + ), + ); + } +} diff --git a/web/gorgevistas.dart b/web/gorgevistas.dart new file mode 100644 index 0000000..d44f613 --- /dev/null +++ b/web/gorgevistas.dart @@ -0,0 +1,47 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class GorgeVistas extends StatefulWidget { + @override + _GorgeVistasState createState() => _GorgeVistasState(); +} + +class _GorgeVistasState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('gorge-vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + larchMountain(), + womensForum(), + crownPoint(), + angelsRest(), + multnomahFalls(), + indianPoint(), + dogMountain(), + coyoteWall(), + ], + ), + ), + ), + ); + } +} diff --git a/web/greshamvistas.dart b/web/greshamvistas.dart new file mode 100644 index 0000000..81ac5f2 --- /dev/null +++ b/web/greshamvistas.dart @@ -0,0 +1,40 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class GreshamVistas extends StatefulWidget { + @override + _GreshamVistasState createState() => _GreshamVistasState(); +} + +class _GreshamVistasState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('gresham-vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + hoganButte(), + ], + ), + ), + ), + ); + } +} diff --git a/web/hikes.dart b/web/hikes.dart new file mode 100644 index 0000000..0f1aeaa --- /dev/null +++ b/web/hikes.dart @@ -0,0 +1,53 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; +import 'card_templates.dart'; + +class Hikes extends StatefulWidget { + @override + _HikesState createState() => _HikesState(); +} + +class _HikesState extends State { + @override + Widget build(BuildContext context) { + + String _mapTip = 'Most trails are on Google Maps, but service is spotty, so cache some maps offline.'; + _mapTip += ' and take along an auxiliary battery to keep your phone charged.'; + String _prepared = 'Be sure to have water, and adequate clothing and footwear.'; + String _eagleCreekClosed = 'Eagle Creek is still closed on account of fire damage.'; + String _whiteWaterTrailClosed = 'The WhiteWater Trail to Jefferson Park is still closed on account of fire damage.'; + + return Scaffold( + appBar: AppBar( + title: Text( + 'hikes', + ), + centerTitle: true, + backgroundColor: navy, + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + cardThree(_mapTip), + cardThree(_prepared), + macleayParkPittockMansion(), + angelsRest(), + multnomahFalls(), + // eagleCreek(), + cardThree(_eagleCreekClosed), + dogMountain(), + paradisePark(), + silverFalls(), + // jeffersonPark(), + cardThree(_whiteWaterTrailClosed), + ], + ), + ), + ), + ); + } +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..bd5e778 --- /dev/null +++ b/web/index.html @@ -0,0 +1,10 @@ + + + + + concise-pdx + + + + + diff --git a/web/main.dart b/web/main.dart new file mode 100644 index 0000000..7fd35bc --- /dev/null +++ b/web/main.dart @@ -0,0 +1,7 @@ +import 'package:flutter_web_ui/ui.dart' as ui; +import 'concisepdx.dart' as app; + +main() async { + await ui.webOnlyInitializePlatform(); + app.main(); +} diff --git a/web/middlesoutheaststreets.dart b/web/middlesoutheaststreets.dart new file mode 100644 index 0000000..c15980c --- /dev/null +++ b/web/middlesoutheaststreets.dart @@ -0,0 +1,47 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; +import 'prebuildcards.dart'; + +class MiddleSouthEastStreets extends StatefulWidget { + @override + _MiddleSouthEastStreetsState createState() => _MiddleSouthEastStreetsState(); +} + +class _MiddleSouthEastStreetsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable middle se streets\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + mtTabor(), + cardTwo('Glisan','https://example.com','glisan'), + cardTwo('Burnside','https://example.com','burnside'), + cardTwo('Stark','https://example.com','stark'), + cardTwo('Morrison-Belmont','https://example.com','morrison-belmont'), + cardTwo('Hawthorne','https://example.com','hawthorne'), + cardTwo('SE Division between 11th and 60th','https://www.google.com/maps/@45.5048718,-122.6326215,18z','division'), + ], + ), + ), + ), + ); + } +} diff --git a/web/northeaststreets.dart b/web/northeaststreets.dart new file mode 100644 index 0000000..9594035 --- /dev/null +++ b/web/northeaststreets.dart @@ -0,0 +1,48 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; +import 'card_templates.dart'; + +class NorthEastStreets extends StatefulWidget { + @override + _NorthEastStreetsState createState() => _NorthEastStreetsState(); +} + +class _NorthEastStreetsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable northeast streets\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + rockyButteDrive(), + rockyButteHike(), + cardTwo('Killingsworth','https://example.com','killingsworth'), + cardTwo('Alberta','https://example.com','alberta'), + cardTwo('Freemont','https://example.com','freemont'), + cardTwo('Sandy','https://example.com','sandy'), + cardTwo('Weidler-Broadway','https://example.com','weidler-broadway'), + modaCenter(), + ], + ), + ), + ), + ); + } +} diff --git a/web/northstreets.dart b/web/northstreets.dart new file mode 100644 index 0000000..2582e48 --- /dev/null +++ b/web/northstreets.dart @@ -0,0 +1,45 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; +import 'card_templates.dart'; + +class NorthStreets extends StatefulWidget { + @override + _NorthStreetsState createState() => _NorthStreetsState(); +} + +class _NorthStreetsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable north streets\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + cardTwo('Vancouver-Williams','https://example.com','vancouver-williams'), + modaCenter(), + cardTwo('Mississippi-Albina','https://example.com','mississippi-albina'), + waudBluff(), + cardTwo('North Lombard','https://example.com','north lombard'), + ], + ), + ), + ), + ); + } +} diff --git a/web/northweststreets.dart b/web/northweststreets.dart new file mode 100644 index 0000000..ca47d04 --- /dev/null +++ b/web/northweststreets.dart @@ -0,0 +1,58 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; +import 'prebuildcards.dart'; + +class NorthWestStreets extends StatefulWidget { + @override + _NorthWestStreetsState createState() => _NorthWestStreetsState(); +} + +class _NorthWestStreetsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable northwest streets\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + macleayParkPittockMansion(), + cardTwo('Vaughn','https://example.com','vaughn'), + convenienceCardOne( + 'https://en.wikipedia.org/wiki/Washington_Park_(Portland,_Oregon)', + 'washington-park', + 'This area of town is convenient for the Zoo, Rose Garden, and Japanese Garden', + 'https://www.google.com/maps/@45.515833,-122.7075,15z', + 'washington-park-map' + ), + cardTwo('NW 23rd','https://example.com','23rd'), + convenienceCardOne( + 'https://en.wikipedia.org/wiki/Providence_Park', + 'providence-park', + 'This area of town is convenient for a football, baseball, or soccer game at Providence park', + 'https://www.google.com/maps/@45.521389,-122.691667,17z', + 'providence-park-map' + ), + cardTwo('NW 21st','https://example.com','21st'), + ], + ), + ), + ), + ); + } +} diff --git a/web/prebuildcards.dart b/web/prebuildcards.dart new file mode 100644 index 0000000..d665d2a --- /dev/null +++ b/web/prebuildcards.dart @@ -0,0 +1,272 @@ +import 'package:flutter_web/material.dart'; +import 'card_templates.dart'; + +Card modaCenter() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Moda_Center', + 'moda-center', + 'This area of town is convenient for a visit to the Moda Center for Concert, Basketball, or Hockey', + 'https://www.google.com/maps/@45.531667,-122.666667,17z', + 'moda-center-map' + ); +} + +Card waudBluff() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Swan_Island-Mocks_Crest_Loop_Hike', + 'mocks-crest-hike', + 'Hike, drive, or bike atop Waud Bluff via Willamette Blvd in North Portland.', + 'https://www.google.com/maps/@45.5736,-122.7220,17z', + 'waud-bluff-trailhead' + ); +} + +Card rockyButteHike() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Rocky_Butte_Hike', + 'rocky-butte-hike', + 'Hike to Rocky Butte in North East PDX.', + 'https://www.google.com/maps/@45.55325,-122.57468,17z', + 'grotto-trailhead' + ); +} + +Card rockyButteDrive() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Rocky_Butte', + 'rocky-butte', + 'Drive to Rocky Butte in North East PDX.', + 'https://www.google.com/maps/@45.546714,-122.565941,17z', + 'rocky-butte-map' + ); +} + +Card mtTabor() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Mount_Tabor_Hike', + 'mt-tabor-hike', + 'Hike or Walk on Mt Tabor in South East PDX.', + 'https://www.google.com/maps/@45.50894,-122.5996687,17z', + 'lincoln-street-trailhead' + ); +} + +Card hoganButte() { + return convenienceCardOne( + 'https://greshamoregon.gov/hogan-butte-nature-park/', + 'hogan-butte', + 'Drive and Walk to Hogan Butte in Gresham.', + 'https://www.google.com/maps/@45.474413,-122.4238744,17z', + 'hogan-butte-map' + ); +} + +Card olallieButte() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Olallie_Butte_Hike', + 'olallie-butte', + 'Drive a gassed-up truck or suv to remote Olallie Butte for a serious hike, weather permitting.', + 'https://www.google.com/maps/@44.8419,-121.7798,17z', + 'olallie-butte-map' + ); +} + +Card highRockLookOut() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/High_Rock_Hike', + 'high-rock', + 'Drive a gassed-up car and walk to remote High Rock Lookout.', + 'https://www.google.com/maps/@45.15983,-121.89141,17z', + 'high-rock-map' + ); +} + +Card larchMountain() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Sherrard_Point_Hike', + 'larch-mountain', + 'Walk to the top of Larch Mt, (or hike up from the gorge).', + 'https://www.google.com/maps/@45.53271,-122.0878,17z', + 'larch-mountain-map' + ); +} + +Card womensForum() { + return convenienceCardOne( + 'https://oregonstateparks.org/index.cfm?do=parkPage.dsp_parkPage&parkId=119', + 'womens-forum', + 'Drive to Portland Women\'s Forum Overlooking the Gorge', + 'https://www.google.com/maps/@45.5345,-122.2607,17z', + 'womens-forum-map' + ); +} + +Card crownPoint() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Vista_House', + 'crown-point', + 'Drive to Crown Point Overlooking the Gorge', + 'https://www.google.com/maps/@45.539579,-122.244401,17z', + 'crown-point-map' + ); +} + +Card angelsRest() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Angels_Rest_Hike', + 'angels-rest', + 'Hike to Angel\'s Rest in the Gorge', + 'https://www.google.com/maps/@45.56065,-122.17241,17z', + 'angels-rest-map' + ); +} + +Card multnomahFalls() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Multnomah_Falls', + 'multnomah-falls', + 'Hike up Multnomah Falls in The Gorge (closed when full)', + 'https://www.google.com/maps/@45.5780539,-122.1140257,17z', + 'multnomah-falls-map' + ); +} + +Card indianPoint() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Indian_Point_Loop_Hike', + 'indian-point', + 'Hike to Indian Point overlooking the Gorge', + 'https://www.google.com/maps/@45.68367,-121.79795,17z', + 'indian-point-map' + ); +} + +Card dogMountain() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Dog_Mountain_Loop_Hike', + 'dog-mountain', + 'Hike to Dog Mountain overlooking the Gorge', + 'https://www.google.com/maps/@45.6993,-121.7081,17z', + 'dog-mountain-map' + ); +} + +Card coyoteWall() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Labyrinth-Coyote_Wall_Loop_Hike', + 'coyote-wall', + 'Hike to Coyote Wall overlooking the Gorge', + 'https://www.google.com/maps/@45.7005,-121.4024,17z', + 'coyote-wall-map' + ); +} + +Card japaneseGarden() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Portland_Japanese_Garden', + 'japanese-garden', + 'Japanese Garden in Washington Park', + 'https://www.google.com/maps/@45.51872,-122.7080,17z', + 'japanese-garden-map' + ); +} + +Card chineseGarden() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Lan_Su_Chinese_Garden', + 'chinese-garden', + 'Lan Su Chinese Garden in NW Downtown Portland', + 'https://www.google.com/maps/@45.52565,-122.67299,17z', + 'chinese-garden-map' + ); +} + +Card paradisePark() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Paradise_Park_from_Timberline_Lodge_Hike', + 'paradise-park', + 'Hike to Paradise Park on Mt Hood, from Timberline Lodge in Summer.', + 'https://www.google.com/maps/@45.3561013,-121.7472,17z', + 'paradise-park-map' + ); +} + +Card eagleCreek() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Eagle_Creek_to_Tunnel_Falls_Hike', + 'eagle-creek', + 'Hike up Eagle Creek in the Gorge to Tunnel Falls', + 'https://www.google.com/maps/@45.63653,-121.91947,17z', + 'eagle-creek-map' + ); +} + +Card silverFalls() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Trail_of_Ten_Falls_Loop_Hike', + 'trail-of-ten-falls-loop-hike', + 'Silver Falls near Silverton, has the most Water Falls Anywhere.', + 'https://www.google.com/maps/@44.87752,-122.65513,15z', + 'south-falls-lodge-trailhead' + ); +} + +Card jeffersonPark() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Jefferson_Park_from_Whitewater_Trailhead_Hike', + 'jefferson-park', + 'Hike to Jefferson Park on Mt Jefferson', + 'https://www.google.com/maps/@44.706730,-121.874899,17z', + 'jefferson-park-map' + ); +} + +Card macleayParkPittockMansion() { + return convenienceCardOne( + 'https://www.oregonhikers.org/field_guide/Pittock_Mansion_Hike', + 'pittock-mansion-hike', + 'Hike from Macleay Park in NW Portland, to Pittock Mansion', + 'https://www.google.com/maps/@45.5360,-122.7125,15z', + 'lower-macleay-park-trailhead' + ); +} + +Card columbiaGorge() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Columbia_River_Gorge', + 'columbia-river-gorge', + 'Hike, SightSee, Cruise, or WindSurf the Columbia River Gorge', + 'https://www.google.com/maps/@45.704722,-121.791667,11z', + 'columbia-river-gorge-map' + ); +} + +Card mountHood() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Mount_Hood', + 'mount-hood', + 'Visit Mt Hood', + 'https://www.google.com/maps/@45.373514,-121.695919,12z', + 'mount-hood-map' + ); +} + +Card mountSaintHelens() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Mount_St._Helens', + 'mount-saint-helens', + 'Visit Mt St Helens', + 'https://www.google.com/maps/@46.27532,-122.21729,13z', + 'mount-saint-helens-map' + ); +} + +Card oregonCoast() { + return convenienceCardOne( + 'https://en.wikipedia.org/wiki/Oregon_Coast', + 'oregon-coast', + 'Visit the Oregon Coast', + 'https://www.google.com/maps/@44.000001,-124.100001,8z', + 'oregon-coast-map' + ); +} diff --git a/web/remotevistas.dart b/web/remotevistas.dart new file mode 100644 index 0000000..8706a46 --- /dev/null +++ b/web/remotevistas.dart @@ -0,0 +1,41 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class RemoteVistas extends StatefulWidget { + @override + _RemoteVistasState createState() => _RemoteVistasState(); +} + +class _RemoteVistasState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('remote-vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + olallieButte(), + highRockLookOut(), + ], + ), + ), + ), + ); + } +} diff --git a/web/sellwoodstreets.dart b/web/sellwoodstreets.dart new file mode 100644 index 0000000..0c0559c --- /dev/null +++ b/web/sellwoodstreets.dart @@ -0,0 +1,58 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; + +class SellwoodStreets extends StatefulWidget { + @override + _SellwoodStreetsState createState() => _SellwoodStreetsState(); +} + +class _SellwoodStreetsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable sellwood streets\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + cardTwo('Woodstock','https://example.com','woodstock'), + convenienceCardOne( + 'https://www.portlandoregon.gov/parks/finder/index.cfm?&action=ViewPark&propertyid=27', + 'crystal-springs-rhododendron-garden', + 'This area of town is convenient for Crystal Springs Rhododendron Garden', + 'https://www.google.com/maps/@45.479722,-122.635556,17z', + 'crystal-springs-rhododendron-garden-map' + ), + cardTwo('Bybee','https://example.com','bybee'), + cardTwo('Milwaukie','https://example.com','milwaukie'), + convenienceCardOne( + 'https://www.alltrails.com/trail/us/oregon/springwater-on-the-wilamette-north-woodland-and-bluff-trail-loop', + 'springwater-on-the-willamette-trail', + 'This area of town is near the Springwater on the Willamette Trail', + 'https://www.google.com/maps/@45.4762318,-122.6616333,16z', + 'springwater-on-the-willamette-trail-map' + ), + cardTwo('SE 13th','https://example.com','13th'), + cardTwo('Tacoma','https://example.com','tacoma'), + ], + ), + ), + ), + ); + } +} diff --git a/web/smalltowns.dart b/web/smalltowns.dart new file mode 100644 index 0000000..4f466f3 --- /dev/null +++ b/web/smalltowns.dart @@ -0,0 +1,53 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; +import 'eastwillamettevalley.dart'; +import 'westwillamettevalley.dart'; + +class SmallTowns extends StatefulWidget { + @override + _SmallTownsState createState() => _SmallTownsState(); +} + +class _SmallTownsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable small-towns\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => EastWillametteValley())); + }, + child: cardOne('East Willamette Valley'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => WestWillametteValley())); + }, + child: cardOne('West Willamette Valley'), + ), + ], + ), + ), + ), + ); + } +} diff --git a/web/stjohnsstreets.dart b/web/stjohnsstreets.dart new file mode 100644 index 0000000..6dec4e3 --- /dev/null +++ b/web/stjohnsstreets.dart @@ -0,0 +1,42 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; + +class StJohnsStreets extends StatefulWidget { + @override + _StJohnsStreetsState createState() => _StJohnsStreetsState(); +} + +class _StJohnsStreetsState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable stjohns streets\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: Column( + children: [ + convenienceCardOne( + 'https://en.wikipedia.org/wiki/Cathedral_Park_(Portland,_Oregon)', + 'Cathedral Park', + 'This area of town is convenient for a visit to Cathedral Park under the St John\'s Bridge', + 'https://www.google.com/maps/@45.5883,-122.75799,17z', + 'cathedral-park' + ), + cardTwo('Lombard-Ivanhoe','https://example.com','lombard-ivanhoe'), + ], + ), + ); + } +} diff --git a/web/streetareas.dart b/web/streetareas.dart new file mode 100644 index 0000000..86449a6 --- /dev/null +++ b/web/streetareas.dart @@ -0,0 +1,82 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'middlesoutheaststreets.dart'; +import 'northeaststreets.dart'; +import 'northweststreets.dart'; +import 'northstreets.dart'; +import 'stjohnsstreets.dart'; +import 'sellwoodstreets.dart'; +import 'smalltowns.dart'; +import 'card_templates.dart'; + +class StreetAreas extends StatefulWidget { + @override + _StreetAreasState createState() => _StreetAreasState(); +} + +class _StreetAreasState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + 'walkable-street-areas\nwith bars-restaurants', + ), + centerTitle: true, + backgroundColor: navy, + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => MiddleSouthEastStreets())); + }, + child: cardOne('Middle SouthEast'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => SellwoodStreets())); + }, + child: cardOne('Sellwood'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => NorthEastStreets())); + }, + child: cardOne('NorthEast'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => NorthStreets())); + }, + child: cardOne('North'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => StJohnsStreets())); + }, + child: cardOne('St John\'s'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => NorthWestStreets())); + }, + child: cardOne('NorthWest'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => SmallTowns())); + }, + child: cardOne('Small Towns in the Area'), + ), + ], + ), + ), + ), + ); + } +} diff --git a/web/trimet.dart b/web/trimet.dart new file mode 100644 index 0000000..438da4b --- /dev/null +++ b/web/trimet.dart @@ -0,0 +1,50 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; + +class TriMet extends StatefulWidget { + @override + _TriMetState createState() => _TriMetState(); +} + +class _TriMetState extends State { + @override + Widget build(BuildContext context) { + + String _answer = 'The buses, lightrail, and streetcars are all on the same system.'; + _answer += ' This makes it easy to find your way using Google Maps for directions.'; + + String _fareAnswer = 'Presumably if you are a tourist, you want to buy a HOP ticket from a ticket machine,'; + _fareAnswer += ' or pay a bus driver cash, (instead of buying a HOP card).'; + _fareAnswer += ' All day costs \$5, 2.5 hours costs \$2.50.'; + + return Scaffold( + appBar: AppBar( + title: Text('trimet'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + cardThree(_answer), + infoCard('There no longer is a \"Fareless Square\".','https://en.wikipedia.org/wiki/Fareless_Square','a'), + infoCard(_fareAnswer,'https://trimet.org/fares/','b'), + ], + ), + ), + ), + ); + } +} diff --git a/web/vistadrives.dart b/web/vistadrives.dart new file mode 100644 index 0000000..c7fe5e6 --- /dev/null +++ b/web/vistadrives.dart @@ -0,0 +1,44 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class VistaDrives extends StatefulWidget { + @override + _VistaDrivesState createState() => _VistaDrivesState(); +} + +class _VistaDrivesState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('driveable vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + waudBluff(), + rockyButteDrive(), + hoganButte(), + womensForum(), + crownPoint(), + ], + ), + ), + ), + ); + } +} diff --git a/web/vistahikes.dart b/web/vistahikes.dart new file mode 100644 index 0000000..18b1893 --- /dev/null +++ b/web/vistahikes.dart @@ -0,0 +1,49 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class VistaHikes extends StatefulWidget { + @override + _VistaHikesState createState() => _VistaHikesState(); +} + +class _VistaHikesState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('hikeable vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + waudBluff(), + rockyButteHike(), + mtTabor(), + olallieButte(), + larchMountain(), + angelsRest(), + multnomahFalls(), + indianPoint(), + dogMountain(), + coyoteWall(), + ], + ), + ), + ), + ); + } +} diff --git a/web/vistas.dart b/web/vistas.dart new file mode 100644 index 0000000..a08e2df --- /dev/null +++ b/web/vistas.dart @@ -0,0 +1,96 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; +import 'vistadrives.dart'; +import 'vistawalks.dart'; +import 'vistahikes.dart'; +import 'vistasnorthpdx.dart'; +import 'vistasnortheastpdx.dart'; +import 'vistassoutheastpdx.dart'; +import 'greshamvistas.dart'; +import 'remotevistas.dart'; +import 'gorgevistas.dart'; + +class Vistas extends StatefulWidget { + @override + _VistasState createState() => _VistasState(); +} + +class _VistasState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + 'walkable-street-areas\nwith bars-restaurants', + ), + centerTitle: true, + backgroundColor: navy, + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => VistaDrives())); + }, + child: cardOne('Drive to the Top'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => VistaWalks())); + }, + child: cardOne('Walk to the Top'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => VistaHikes())); + }, + child: cardOne('A Real Hike to the Top'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => GorgeVistas())); + }, + child: cardOne('Gorge'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => RemoteVistas())); + }, + child: cardOne('Remote'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => VistasNorthPDX())); + }, + child: cardOne('North Portland'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => VistasNorthEastPDX())); + }, + child: cardOne('NE Portland'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => VistasSouthEastPDX())); + }, + child: cardOne('SE Portland'), + ), + InkWell( + onTap: () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => GreshamVistas())); + }, + child: cardOne('Gresham'), + ), + ], + ), + ), + ), + ); + } +} diff --git a/web/vistasnortheastpdx.dart b/web/vistasnortheastpdx.dart new file mode 100644 index 0000000..f6476b8 --- /dev/null +++ b/web/vistasnortheastpdx.dart @@ -0,0 +1,41 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class VistasNorthEastPDX extends StatefulWidget { + @override + _VistasNorthEastPDXState createState() => _VistasNorthEastPDXState(); +} + +class _VistasNorthEastPDXState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('ne-pdx-vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + rockyButteDrive(), + rockyButteHike(), + ], + ), + ), + ), + ); + } +} diff --git a/web/vistasnorthpdx.dart b/web/vistasnorthpdx.dart new file mode 100644 index 0000000..a6e53c3 --- /dev/null +++ b/web/vistasnorthpdx.dart @@ -0,0 +1,40 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class VistasNorthPDX extends StatefulWidget { + @override + _VistasNorthPDXState createState() => _VistasNorthPDXState(); +} + +class _VistasNorthPDXState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('north-pdx-vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + waudBluff(), + ], + ), + ), + ), + ); + } +} diff --git a/web/vistassoutheastpdx.dart b/web/vistassoutheastpdx.dart new file mode 100644 index 0000000..cf8cd7a --- /dev/null +++ b/web/vistassoutheastpdx.dart @@ -0,0 +1,40 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class VistasSouthEastPDX extends StatefulWidget { + @override + _VistasSouthEastPDXState createState() => _VistasSouthEastPDXState(); +} + +class _VistasSouthEastPDXState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('se-pdx-vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + mtTabor(), + ], + ), + ), + ), + ); + } +} diff --git a/web/vistawalks.dart b/web/vistawalks.dart new file mode 100644 index 0000000..79dd5db --- /dev/null +++ b/web/vistawalks.dart @@ -0,0 +1,45 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'prebuildcards.dart'; + +class VistaWalks extends StatefulWidget { + @override + _VistaWalksState createState() => _VistaWalksState(); +} + +class _VistaWalksState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable vistas'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + waudBluff(), + mtTabor(), + hoganButte(), + highRockLookOut(), + larchMountain(), + multnomahFalls(), + ], + ), + ), + ), + ); + } +} diff --git a/web/westwillamettevalley.dart b/web/westwillamettevalley.dart new file mode 100644 index 0000000..385b809 --- /dev/null +++ b/web/westwillamettevalley.dart @@ -0,0 +1,48 @@ +import 'package:flutter_web/material.dart'; +import 'defaults.dart'; +import 'card_templates.dart'; + +class WestWillametteValley extends StatefulWidget { + @override + _WestWillametteValleyState createState() => _WestWillametteValleyState(); +} + +class _WestWillametteValleyState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('walkable small-towns\nwith bars-restaurants'), + centerTitle: true, + backgroundColor: navy, + actions: [ + IconButton( + icon: Icon(Icons.home), + onPressed: () { + Navigator.of(context).popUntil((route) => route.isFirst); + }, + ), + ], + ), + backgroundColor: peacockBlue, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.only(bottom: 6.0,), + child: Column( + children: [ + cardTwo('Newberg-Dundee is a Wine-Tasting Destination','https://www.google.com/maps/@45.3007635,-122.9754037,17z','downtown-newberg'), + cardTwo('3rd St in Downtown McMinnville','https://www.google.com/maps/@45.2099371,-123.1927857,16z','downtown-mcminnville'), + convenienceCardOne( + 'https://en.wikipedia.org/wiki/Evergreen_Aviation_%26_Space_Museum', + 'spruce-goose', + 'McMinnville is convenient for the Spruce Goose and Evergreen Aviation Museum', + 'https://www.google.com/maps/@45.2031571,-123.1454622,17z', + 'spruce-goose-map' + ), + ], + ), + ), + ), + ); + } +}