Created
November 24, 2019 18:09
-
-
Save anfelor/e1e60cd227b5d4f8ac06fa0ec5879fbe to your computer and use it in GitHub Desktop.
Flutter 'bug'
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
void main() { | |
return runApp(MyApp()); | |
} | |
class MyApp extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
home: SegmentsView(), | |
); | |
} | |
} | |
typedef InSegment = bool Function(String m); | |
class SegmentArguments { | |
final String title; | |
final InSegment inSegment; | |
SegmentArguments(this.title, this.inSegment); | |
} | |
class SegmentViewState extends State<SegmentView> { | |
List<String> mc = ["Hi!"]; | |
@override | |
void initState() { | |
super.initState(); | |
} | |
@override | |
Widget build(BuildContext context) { | |
final SegmentArguments args = ModalRoute.of(context).settings.arguments; | |
return Scaffold( | |
appBar: AppBar( | |
title: Text(args.title), | |
), | |
body: Center( | |
child: finiteList(mc.where((String s) => args.inSegment(s)).toList(), (String s) => ListTile(title: Text(s))), | |
), | |
); | |
} | |
} | |
class SegmentView extends StatefulWidget { | |
SegmentView({Key key}) : super(key: key); | |
@override | |
SegmentViewState createState() => SegmentViewState(); | |
} | |
ListView finiteList<A>(List<A> data, ListTile Function(A) tile) { | |
return ListView.builder( | |
padding: const EdgeInsets.all(16.0), | |
itemCount: data.length * 2 - 1, // BUG BUG BUG | |
itemBuilder: (context, i) { | |
if(i.isOdd) return Divider(); | |
final index = i ~/ 2; | |
return tile(data[index]); | |
} | |
); | |
} | |
class SegmentsView extends StatelessWidget { | |
final List<SegmentArguments> segments = [ | |
SegmentArguments("Has elements", (m) => true), | |
SegmentArguments("No elements", (m) => false), | |
]; | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar( | |
title: Text("Bug example"), | |
), | |
body: Center( | |
child: finiteList<SegmentArguments>(segments, (SegmentArguments args) { | |
return ListTile( | |
title: Text(args.title), | |
trailing: Icon(Icons.keyboard_arrow_right), | |
onTap: () { | |
Navigator.push( | |
context, | |
MaterialPageRoute( | |
builder: (context) => SegmentView(), | |
settings: RouteSettings( | |
arguments: args, | |
), | |
), | |
); | |
} | |
); | |
}) | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment