flutter_taobao_page 0.1.1 copy "flutter_taobao_page: ^0.1.1" to clipboard
flutter_taobao_page: ^0.1.1 copied to clipboard

outdated

Scrape personal data from taobao(淘宝) by webview in a application.

example/lib/main.dart

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter_taobao_page/taobao_page.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '淘宝数据 Demo',
      debugShowCheckedModeBanner: false,
      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: MyHomePage(title: '淘宝数据 Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, 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
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _loading = true;
  bool _canFetch = false;
  int _page = 0;

  bool _busy = false;

  List<dynamic> _orders = [];

  TaobaoPageController _controller;

  void _fetchOrder() {
    if (_busy) return;
    _busy = true;
    _controller.getOrder(_page + 1, count: 5).then((data) {
      _orders.addAll(data["mainOrders"]);
      setState(() {
        _page += 1;
      });
    }).catchError((_) {
      print("抓取第 $_page 页订单失败: $_");
    });
    _busy = false;
  }

  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    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:
            _canFetch ? Text("${widget.title} - $_page 页") : Text(widget.title),
        actions: <Widget>[
          IconButton(
            onPressed: () {
              _controller.reset();
              setState(() {
                _page = 0;
                _loading = true;
                _canFetch = false;
                _orders = [];
              });
            },
            icon: Icon(Icons.refresh),
          ),
        ],
      ),
      body: TaobaoPage(
        /// 抓取模块创建: 这里拿到controller
        onCreated: (TaobaoPageController controller) {
          _controller = controller;
        },

        /// 可以进行登录
        onInit: () {
          setState(() {
            _loading = false;
          });
        },

        /// 可以进行订单抓取
        onReady: () {
          setState(() {
            _canFetch = true;
          });
        },
        child: NotificationListener(
          onNotification: (ScrollNotification note) {
            return true;
          },
          child: _loading
              ? Center(child: CircularProgressIndicator())
              : CustomScrollView(
                  slivers: <Widget>[
                    SliverList(
                      delegate: SliverChildBuilderDelegate(
                        (BuildContext context, int index) {
                          if (index == _orders.length) {
                            return _buildMoreWidget();
                          }
                          Map<String, dynamic> order = _orders[index];
                          return Container(
                            alignment: Alignment.center,
                            padding: EdgeInsets.all(20),
                            margin: EdgeInsets.symmetric(vertical: 10),
                            color: Colors.lightBlue[100],
                            child: Row(
                              children: <Widget>[
                                Flexible(
                                  child: Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: <Widget>[
                                      Text(order["id"]),
                                      Text(order["seller"]["shopName"] ?? '未知'),
                                    ],
                                  ),
                                ),
                              ],
                            ),
                          );
                        },
                        childCount: _orders.length + 1,
                      ),
                    ),
                  ],
                ),
        ),
      ),
      floatingActionButton: _canFetch
          ? FloatingActionButton(
              onPressed: _fetchOrder,
              tooltip: 'Increment',
              child: Icon(Icons.add),
            )
          : null, // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  Widget _buildMoreWidget() {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 20.0),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          InkWell(
            onTap: () {
              _fetchOrder();
            },
            child: Text('点击加载下一页',
                style: TextStyle(color: const Color(0x8A000000))),
          ),
        ],
      ),
    );
  }
}
1
likes
0
pub points
0%
popularity

Publisher

verified publisherzoe.im

Scrape personal data from taobao(淘宝) by webview in a application.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter, webview_flutter

More

Packages that depend on flutter_taobao_page