Flutter用ListData的里面的数据简单的生成列表菜单来检索内容

Flutter新手,从网上高手学到了不少的技术,因为搜索网络没有这样的高手来分享这个小功能,所以自己做了一份,也来分享一下小经验,算是回报各位码农高手新手:

 

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'countmodle.dart';
import 'package:provider/provider.dart';

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
        providers: [
          ChangeNotifierProvider(create: (BuildContext context) {
            return CountModle();
          }),
        ],
        child: MaterialApp(
          title: 'Welcome to Flutter',
          home: new Scaffold(
            appBar: new AppBar(
              title: new Text('Welcome to Flutter'),
            ),
            body: new MenuWidget(),
          ),
        ));
  }
}

int groupValue = 0;
int i = 0;
int keyvalue = 0;
int keyvalue2 = 0;

List menuList = [
  {
    "title1": "黄帝",
    "title2":
        "黄帝,中国古代部落联盟首领,五帝之首。黄帝被尊祀为“人文初祖”。 在《山海经》里“黄帝”只是诸帝之一,直到春秋战国时期才被定于一尊。  据说他是少典与附宝之子,本姓公孙,后改姬姓 ,也有说巳姓。 名轩辕,一说名轩。 建都于有熊,亦称有熊氏。也有人称之为“帝鸿氏”。 史载黄帝因有土德之瑞,故号黄帝。黄帝在位期间,播百谷草木,大力发展生产,始制衣冠、建舟车、制音律、作《黄帝内经》等。 黄帝的出生地古代文献记载有河南新郑、山东寿丘  、甘肃天水三地;近代学术界推测黄帝的发源地有陕西黄陵说、辽河说等。",
    "type": 0,
  },
  {
    "title1": "神农",
    "title2":
        "炎帝,是中国上古时期姜姓部落的首领尊称,号神农氏,又号魁隗氏、连山氏、列山氏,别号朱襄。(尚有争议,也有说朱襄氏部落曾有三代首领尊号炎帝 )。 传说姜姓部落的首领由于懂得用火而得到王位,所以称为炎帝。从神农起姜姓部落共有九代炎帝,神农生帝魁,魁生帝承,承生帝明,明生帝直,直生帝氂,氂生帝哀,哀生帝克,克生帝榆罔,传位五百三十年。 炎帝所处时代为新石器时代,炎帝故里目前有六地之争,分别是:陕西宝鸡、湖南会同县连山、湖南株洲炎陵县、湖北的随州、山西高平、河南柘城 。炎帝部落的活动范围在黄河中下游,在姜水(一说是今宝鸡市渭滨区的清姜河,一说是今宝鸡市岐山县的岐水。)一带时部落开始兴盛,最初定都在陈地,后来又将都城迁移到曲阜。 相传炎帝牛首人身,他亲尝百草,发展用草药治病;他发明刀耕火种创造了两种翻土农具,教民垦荒种植粮食作物;他还领导部落人民制造出了饮食用的陶器和炊具。 传说炎帝部落后来和黄帝部落结盟,共同击败了蚩尤。 华人自称炎黄子孙,将炎帝与黄帝共同尊奉为中华民族人文初祖,成为中华民族团结、奋斗的精神动力。 炎帝被道教尊为神农大帝,也称五榖神农大帝。",
    "type": 1
  },
  {"title1": "雷公", "title2": "远古,黄帝内经里面的主人公", "type": 2},
  {"title1": "歧伯", "title2": "远古,黄帝内经里面的主人公", "type": 3},
  {"title1": "扁鹊", "title2": "春秋战国,名医", "type": 4},
  {"title1": "华佗", "title2": "三国时期,不幸遇上曹操这个蠢货", "type": 5},
  {"title1": "张仲景", "title2": "东汉,医祖。高人", "type": 6},
  {"title1": "孙思邈", "title2": "唐朝,寿长140岁,高人中的高人", "type": 7},
  {"title1": "皇浦谧", "title2": "说明", "type": 8},
  {"title1": "公孙和", "title2": "说明", "type": 9},
  {"title1": "菜单一", "title2": "说明", "type": 10},
  {"title1": "菜单四", "title2": "说明", "type": 11},
  {"title1": "菜单五", "title2": "说明", "type": 12},
  {"title1": "菜单六", "title2": "说明", "type": 13},
  {"title1": "菜单七", "title2": "说明", "type": 14},
];

class MenuWidget extends StatefulWidget {
  @override
  _MenuWidgetState createState() => _MenuWidgetState();
}

class _MenuWidgetState extends State<MenuWidget>
    with SingleTickerProviderStateMixin {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Stack(children: <Widget>[
      Align(
        alignment: Alignment.topLeft,
        child: Container(
          width: 90,
          color: Colors.blue[100],
          padding: EdgeInsets.only(left: 5, top: 0, right: 5, bottom: 0),
          child: Container(
            child: getDataListY(),
          ),
        ),
      ),
      Align(
        alignment: Alignment.topRight,
        child: Container(
          height: MediaQuery.of(context).size.height,
          margin: EdgeInsets.only(left: 92, top: 0, right: 2, bottom: 0),
          padding: EdgeInsets.only(left: 0, top: 0, right: 0, bottom: 0),

          child: getDataListZ(
            keyvalue2: keyvalue,
          ),

          // ],
          // ),
        ),
      ),
    ]);
  }
}

class getDataListY extends StatefulWidget {
  getDataListY({Key? key}) : super(key: key);

  @override
  _getDataListYState createState() => _getDataListYState();
}

class _getDataListYState extends State<getDataListY> {
  List<Widget> _getDataListY() {
    var datalist = menuList.map((value) {
      return Stack(
        children: [
          //isThreeLine: true,
          TextButton(
            onPressed: () {
              updateGroupValue(value['type']);
              context.read<CountModle>().add();
            },
            child: Text(value['title1']),
          ),
        ],
      );
    });

    return datalist.toList();
  }

  @override
  Widget build(BuildContext context) {
    return GridView.count(
      mainAxisSpacing: 0.0,
      crossAxisSpacing: 0.0,
      crossAxisCount: 1,
      children: _getDataListY(),
    );
  }

  void updateGroupValue(int v) {
    setState(() {
      groupValue = v;
    });
  }
}

class getDataListZ extends StatefulWidget {
  var keyvalue2;

  getDataListZ({Key? key, required this.keyvalue2});

  @override
  _getDataListZState createState() => _getDataListZState();
}

class _getDataListZState extends State<getDataListZ> {
  @override
  Widget build(BuildContext context) {
    return Container(
        child: Column(
      children: [
        Text(menuList[groupValue]['title2'] +
            "Count ${context.watch<CountModle>().count}"),
        Visibility(
          child: Text("Count ${context.watch<CountModle>().count}"),
          visible: true,
        ),
      ],
    ));
  }
}


//================================================
 
以下是Countmodel.dart文件的内容,拷贝存储即可:
 
 
 
 
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'main.dart';

class CountModle with ChangeNotifier {
  //int keyvalue = updatakey(keyvalue2);
  int _count = 0;
  // int _keyvalue = 0;
  int get count => _count;

  void add() {
    _count++;
    notifyListeners();
  }
}


//==========================
 
以下 是PuBSPEC.YAML里面添加provider的内容:
 
dependencies:
  flutter:
    sdk: flutter
  provider: ^6.0.1
 
 
 
 
 
posted @ 2021-12-21 14:18  商君治国安邦之张莽  阅读(258)  评论(0编辑  收藏  举报